Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. byte h = 0, v = 0; //vars for for loops
  2. const byte rows = 2; //number of rows
  3. const byte cols = 5; //number of cols
  4. const byte Output[rows] = {21, 20}; //pins
  5. const byte Input[cols] = {19, 18, 16, 17, 15}; //pins
  6. int led1 = 7;
  7. int led2 = 8;
  8. int led3 = 23;
  9. int led4 = 12;
  10.  
  11. byte keypad() { //detects button presses
  12.   static bool no_press_flag = 0; //static flag ensures nothing was press
  13.   for (byte x = 0; x < cols; x++) { //for loop reads every button
  14.     if (digitalRead(Input[x]) == HIGH); //read every input if high, continue. if else, break
  15.     else
  16.       break;
  17.     if (x == (cols - 1)) { //if no button is pressed, flag as no button pressed
  18.       no_press_flag = 1;
  19.       h = 0;
  20.       v = 0;
  21.     }
  22.   }
  23.   if (no_press_flag == 1) { //if no button is pressed
  24.     for (byte r = 0; r < rows; r++) //for loop used to make all output as low
  25.       digitalWrite(Output[r], LOW);
  26.     for (h = 0; h < cols; h++) { // for loop to check if one of inputs is low
  27.       if (digitalRead(Input[h]) == HIGH) //if specific input is remain high (no press on it) continue
  28.         continue;
  29.       else {   //if one of inputs is low
  30.         for (v = 0; v < rows; v++) { //for loop used to specify the number of row
  31.           digitalWrite(Output[v], HIGH);  //make specified output as HIGH
  32.           if (digitalRead(Input[h]) == HIGH) { //if the input that selected from first sor loop is change to high
  33.             no_press_flag = 0;              //reset the no press flag;
  34.             for (byte w = 0; w < rows; w++) // make all outputs as low
  35.               digitalWrite(Output[w], LOW);
  36.             return v * 5 + h; //return number of button
  37.           }
  38.         }
  39.       }
  40.     }
  41.   }
  42.   return 50;
  43. }
  44.  
  45. void setup() {
  46.   pinMode(led1, OUTPUT);
  47.   pinMode(led2, OUTPUT);
  48.   pinMode(led3, OUTPUT);
  49.   pinMode(led4, OUTPUT);
  50.   for (byte i = 0; i < rows; i++) { // for loop used to make pin mode of outputs as output
  51.     pinMode(Output[i], OUTPUT);
  52.   }
  53.   for (byte s = 0; s < cols; s++) { //for loop used to make pin mode of inputs as input
  54.     pinMode(Input[s], INPUT_PULLUP);
  55.   }
  56.   Serial.begin(9600);
  57. }
  58.  
  59. void getKey() {
  60.   switch (keypad()) {
  61.     case 0:
  62.       digitalWrite(led1, HIGH);
  63.       break;
  64.     case 1:
  65.       digitalWrite(led2, HIGH);
  66.       break;
  67.     case 2:
  68.       digitalWrite(led3, HIGH);
  69.       break;
  70.     case 3:
  71.       digitalWrite(led3, HIGH);
  72.       break;
  73.     case 4:
  74.       digitalWrite(led1, HIGH);
  75.       digitalWrite(led3, HIGH);
  76.       break;
  77.     case 5:
  78.       digitalWrite(led1, HIGH);
  79.       break;
  80.     case 6:
  81.       digitalWrite(led2, HIGH);
  82.       break;
  83.     case 7:
  84.       digitalWrite(led3, HIGH);
  85.       break;
  86.     case 8:
  87.       digitalWrite(led4, HIGH);
  88.       break;
  89.     case 9:
  90.       digitalWrite(led2, HIGH);
  91.       digitalWrite(led4, HIGH);
  92.       break;
  93.     default:
  94.       digitalWrite(led1, LOW);
  95.       digitalWrite(led2, LOW);
  96.       digitalWrite(led3, LOW);
  97.       digitalWrite(led4, LOW);
  98.       break;
  99.   }
  100. }
  101. void loop() {
  102.   getKey();
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement