Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- byte h = 0, v = 0; //vars for for loops
- const byte rows = 2; //number of rows
- const byte cols = 5; //number of cols
- const byte Output[rows] = {21, 20}; //pins
- const byte Input[cols] = {19, 18, 16, 17, 15}; //pins
- int led1 = 7;
- int led2 = 8;
- int led3 = 23;
- int led4 = 12;
- byte keypad() { //detects button presses
- static bool no_press_flag = 0; //static flag ensures nothing was press
- for (byte x = 0; x < cols; x++) { //for loop reads every button
- if (digitalRead(Input[x]) == HIGH); //read every input if high, continue. if else, break
- else
- break;
- if (x == (cols - 1)) { //if no button is pressed, flag as no button pressed
- no_press_flag = 1;
- h = 0;
- v = 0;
- }
- }
- if (no_press_flag == 1) { //if no button is pressed
- for (byte r = 0; r < rows; r++) //for loop used to make all output as low
- digitalWrite(Output[r], LOW);
- for (h = 0; h < cols; h++) { // for loop to check if one of inputs is low
- if (digitalRead(Input[h]) == HIGH) //if specific input is remain high (no press on it) continue
- continue;
- else { //if one of inputs is low
- for (v = 0; v < rows; v++) { //for loop used to specify the number of row
- digitalWrite(Output[v], HIGH); //make specified output as HIGH
- if (digitalRead(Input[h]) == HIGH) { //if the input that selected from first sor loop is change to high
- no_press_flag = 0; //reset the no press flag;
- for (byte w = 0; w < rows; w++) // make all outputs as low
- digitalWrite(Output[w], LOW);
- return v * 5 + h; //return number of button
- }
- }
- }
- }
- }
- return 50;
- }
- void setup() {
- pinMode(led1, OUTPUT);
- pinMode(led2, OUTPUT);
- pinMode(led3, OUTPUT);
- pinMode(led4, OUTPUT);
- for (byte i = 0; i < rows; i++) { // for loop used to make pin mode of outputs as output
- pinMode(Output[i], OUTPUT);
- }
- for (byte s = 0; s < cols; s++) { //for loop used to make pin mode of inputs as input
- pinMode(Input[s], INPUT_PULLUP);
- }
- Serial.begin(9600);
- }
- void getKey() {
- switch (keypad()) {
- case 0:
- digitalWrite(led1, HIGH);
- break;
- case 1:
- digitalWrite(led2, HIGH);
- break;
- case 2:
- digitalWrite(led3, HIGH);
- break;
- case 3:
- digitalWrite(led3, HIGH);
- break;
- case 4:
- digitalWrite(led1, HIGH);
- digitalWrite(led3, HIGH);
- break;
- case 5:
- digitalWrite(led1, HIGH);
- break;
- case 6:
- digitalWrite(led2, HIGH);
- break;
- case 7:
- digitalWrite(led3, HIGH);
- break;
- case 8:
- digitalWrite(led4, HIGH);
- break;
- case 9:
- digitalWrite(led2, HIGH);
- digitalWrite(led4, HIGH);
- break;
- default:
- digitalWrite(led1, LOW);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- break;
- }
- }
- void loop() {
- getKey();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement