/* 1st Attempt at the controller for a 2 digit seven segment display which will be used as an electronic pit board */ int brightness = 0; // set variable for the brightness PWM (P Channel so 0 is fully on, 255 is off) int keypadValue = 0;// variable for reading the keypad int keypressed = 0;// Which Number has been pressed int digitA = 0; int digitB = 0; int charCount = 0; unsigned long currentMillis = 0;//record current time unsigned long flashMillis = 0; // used to record last millis for the flash sequence const long flashSpeed = 200; boolean button = false;// has a button been pressed boolean flash = false;//used to toggle the flash functionality boolean flashOn = false;//used to flash the light boolean pos = false;//used to set the P letter void setup() { //Serial.begin(9600); //Start the serial monitor for debugging pinMode(A1, OUTPUT);//a RH Digit A pinMode(A3, OUTPUT);//b RH Digit A pinMode(2, OUTPUT);//c RH Digit A pinMode(3, OUTPUT);//d RH Digit A pinMode(4, OUTPUT);//e RH Digit A pinMode(5, OUTPUT);//f RH Digit A pinMode(6, OUTPUT);//g RH Digit A pinMode(7, OUTPUT);//a LH Digit B pinMode(8, OUTPUT);//b LH Digit B pinMode(9, OUTPUT);// PWM Output pinMode(10, OUTPUT);//c LH Digit B pinMode(11, OUTPUT);//d LH Digit B pinMode(12, OUTPUT);//e LH Digit B pinMode(13, OUTPUT);//f LH Digit B pinMode(A0, OUTPUT);//g LH Digit B reset(); analogWrite(9, brightness); // turn on the main PWM to full brightness (remember this is a P Channel so 0 means fully on) // delay(100); // allow battery bank DC-DC converter to stabilise showA(); // display a zero to start } void reset(){ digitalWrite(A1, LOW); digitalWrite(A3, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, LOW); digitalWrite(A0, LOW); } void loop() { if (flash == true){ currentMillis = millis(); if (currentMillis - flashMillis >= flashSpeed){ if (flashOn == false){ analogWrite(9, brightness); // set the LED brightness flashOn = true; } else { analogWrite(9,255); // P Channel so this will turn of the LED's flashOn = false; } flashMillis = currentMillis; } } else{ analogWrite(9, brightness); // set the LED brightness } while (analogRead(A2) > 200){//if a button is pressed if (analogRead(A2)> keypadValue){ keypadValue = analogRead(A2); // read the value (0-1023) } delay(20); // delay between taking readings whilst button is pressed button = true;// a button has been pressed } if (button == true){ delay(30); // work out which button was pressed if ((keypadValue >937) && (keypadValue < 1025)){keypressed = 1;} if ((keypadValue >791) && (keypadValue < 937)){keypressed = 2;} if ((keypadValue >685) && (keypadValue < 791)){keypressed = 3;} if ((keypadValue >607) && (keypadValue < 685)){keypressed = 10;}// this is for A symbol if ((keypadValue >545) && (keypadValue < 607)){keypressed = 4;} if ((keypadValue >495) && (keypadValue < 545)){keypressed = 5;} if ((keypadValue >452) && (keypadValue < 495)){keypressed = 6;} if ((keypadValue >417) && (keypadValue < 452)){keypressed = 11;}// this is for B symbol if ((keypadValue >389) && (keypadValue < 417)){keypressed = 7;} if ((keypadValue >362) && (keypadValue < 389)){keypressed = 8;} if ((keypadValue >339) && (keypadValue < 362)){keypressed = 9;} if ((keypadValue >319) && (keypadValue < 339)){keypressed = 12;}// this is for C symbol if ((keypadValue >301) && (keypadValue < 319)){keypressed = 13;}// this is for * symbol if ((keypadValue >285) && (keypadValue < 301)){keypressed = 0;} if ((keypadValue >271) && (keypadValue < 285)){keypressed = 14;}// this is for # symbol if ((keypadValue >200) && (keypadValue < 271)){keypressed = 15;}// this is for D symbol //Serial.print("Keypad Value: "); // used for debugging //Serial.print(keypadValue);// used for debugging //Serial.print(", Keypressed: "); // used for debugging //Serial.println(keypressed); // used for debugging result(); //print the result to the board button = false; keypadValue = 0; } } void result(){ if (keypressed > 9){ if (keypressed == 13){ flash = !flash; } else if ((keypressed == 15) && (brightness < 200)){// P Channel so this turns the brightness down brightness = brightness + 60; } else if ((keypressed == 12) && (brightness > 0)){// P Channel so this turns the brightness up brightness = brightness - 60; } else if (keypressed == 10){ reset(); digitalWrite(7, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); charCount = 0; } else if (keypressed == 11){ reset(); charCount = 0; pos = true; digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } } else{ if (charCount == 0){ // if this is the first character to be displayed if (pos == false){ reset(); // turn off old numbers digitB = 0;//set digit B to zero if its not a 'P' charCount = 1; showB(); // output digit B to the display } else { digitalWrite(A1, LOW); digitalWrite(A3, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); } digitA = keypressed;// set digit A to the key pressed value showA(); // output digit A to the display pos = false; } else if (charCount == 1){// if its the 2nd character reset(); digitB = digitA; // move the 1st number from digit A to B digitA = keypressed;// set digit A to the key pressed value charCount = 0; showB(); // output digit B to the display showA(); // output digit A to the display } } } void showB(){ // these just light up the correct segments if (digitB == 1){ digitalWrite(8, HIGH); digitalWrite(10, HIGH); } if (digitB == 2){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(A0, HIGH); } if (digitB == 3){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(A0, HIGH); } if (digitB == 4){ digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } if (digitB == 5){ digitalWrite(7, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } if (digitB == 6){ digitalWrite(7, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } if (digitB == 7){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(10, HIGH); } if (digitB == 8){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } if (digitB == 9){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(13, HIGH); digitalWrite(A0, HIGH); } if (digitB == 0){ digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); } } void showA(){ // these just light up the correct segments if (digitA == 1){ digitalWrite(A3, HIGH); digitalWrite(2, HIGH); } if (digitA == 2){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(6, HIGH); } if (digitA == 3){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(6, HIGH); } if (digitA == 4){ digitalWrite(A3, HIGH); digitalWrite(2, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } if (digitA == 5){ digitalWrite(A1, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } if (digitA == 6){ digitalWrite(A1, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } if (digitA == 7){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(2, HIGH); } if (digitA == 8){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } if (digitA == 9){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); } if (digitA == 0){ digitalWrite(A1, HIGH); digitalWrite(A3, HIGH); digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); } }