#include #include #include #define LATCH_PIN 2 #define CLOCK_PIN 3 #define DATA_PIN 0 #define OFF false, false, false #define RED true, false, false #define GREEN false, true, false #define BLUE false, false, true #define PURPLE true, false, true #define YELLOW true, true, false #define CYAN false, true, true #define WHITE true, true, true typedef enum { LEFT, RIGHT } Side_t; bool colorField[] = { false, // Left red false, // Left green false, // Left blue false, // Right red false, // Right green false, // Right blue false, // Unused bit false // Unused bit }; void write(bool mode) { delay(10); digitalWrite(DATA_PIN, mode); digitalWrite(CLOCK_PIN, true); digitalWrite(CLOCK_PIN, false); digitalWrite(DATA_PIN, false); } void flushPins() { digitalWrite(LATCH_PIN, true); digitalWrite(LATCH_PIN, false); } void updateColors() { flushPins(); for(int i = 0; i < 8; i ++){ write(colorField[i]); } flushPins(); } void changeColor(Side_t side, bool red, bool green, bool blue) { short shift = 0; if(side == RIGHT) { shift = 3; } colorField[shift] = red; colorField[shift + 1] = green; colorField[shift + 2] = blue; colorField[6] = red; colorField[7] = green; } void changeAllColors(bool red, bool green, bool blue) { changeColor(LEFT, red, green, blue); changeColor(RIGHT, red, green, blue); } int main(void) { wiringPiSetup(); pinMode(DATA_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); changeAllColors(OFF); updateColors(); delay(1000); int ch; //ch = 'w'; printf("Starting main loop\n"); while((ch = getchar()) != EOF){ if (ch == 'r') { changeAllColors(RED); } else if (ch == 'g') { changeAllColors(GREEN); } else if (ch == 'b') { changeAllColors(BLUE); } else if(ch == 'p') { changeAllColors(PURPLE); } else if (ch == 'y') { changeAllColors(YELLOW); } else if (ch == 'c') { changeAllColors(CYAN); } else if (ch == 'o') { changeAllColors(OFF); } else if (ch == 'w') { changeAllColors(WHITE); } else { printf("Invalid char\n"); continue; } printf("Changing to color: %c\n", ch); updateColors(); delay(1000); } changeAllColors(OFF); updateColors(); } // vim: ts=2