diff --git a/Main.c b/Main.c index 3827ff8..88fd66c 100644 --- a/Main.c +++ b/Main.c @@ -1,7 +1,95 @@ #include +#include -void main(void) +// these are based on the wiringPi pin numbers +#define YELLOW_PIN 26 // GPIO 12 +#define GREEN_PIN 27 // GPIO 16 +#define BLUE_PIN 28 // GPIO 20 +#define RED_PIN 29 // GPIO 21 + +#define BUTTON_PIN 1 // GPIO 18 + +enum LED_STATE +{ + BLANK = 0, + YELLOW, + GREEN, + BLUE, + RED, + NUM_LEDS +}; + +int main(int argc, char *argv[]) { printf("Starting program \n"); + printf("Number of arguments: %d\n", argc); + + printf("Program name: %s\n", argv[0]); // argv[0] holds the program name + + for (int i = 1; i < argc; i++) + { // Iterate through arguments starting from index 1 + printf("Argument %d: %s\n", i, argv[i]); + } + + wiringPiSetup(); + + pinMode(YELLOW_PIN, OUTPUT); + pinMode(GREEN_PIN, OUTPUT); + pinMode(BLUE_PIN, OUTPUT); + pinMode(RED_PIN, OUTPUT); + + pinMode(BUTTON_PIN, INPUT); + + enum LED_STATE ledState = BLANK; + + while (1) + { + if (digitalRead(BUTTON_PIN) == HIGH) + { + ledState = (ledState + 1) % NUM_LEDS; + } + else + { + continue; + } + + switch (ledState) + { + case BLANK: + digitalWrite(YELLOW_PIN, LOW); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, LOW); + digitalWrite(RED_PIN, LOW); + break; + case YELLOW: + digitalWrite(YELLOW_PIN, HIGH); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, LOW); + digitalWrite(RED_PIN, LOW); + break; + case GREEN: + digitalWrite(YELLOW_PIN, LOW); + digitalWrite(GREEN_PIN, HIGH); + digitalWrite(BLUE_PIN, LOW); + digitalWrite(RED_PIN, LOW); + break; + case BLUE: + digitalWrite(YELLOW_PIN, LOW); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, HIGH); + digitalWrite(RED_PIN, LOW); + break; + case RED: + digitalWrite(YELLOW_PIN, LOW); + digitalWrite(GREEN_PIN, LOW); + digitalWrite(BLUE_PIN, LOW); + digitalWrite(RED_PIN, HIGH); + break; + default: + break; + } + } + + return 0; }