Untitled
plain_text
a month ago
4.9 kB
2
Indexable
Never
char key[3][3] = {{'1','2','3'}, {'4','5','6'}, {'7','8','9'}}; #define pin1 8 #define pin2 9 #define pin3 10 #define pin5 2 #define pin6 3 #define pin7 4 int input_pins[3] = {2 ,3, 4}; int output_pins[3] = {8, 9, 10}; char Pressed; char digit; // Segment pin definitions #define A 5 #define B 6 #define C 7 #define D 11 #define E 12 #define F 13 #define G A0 void setup() { Serial.begin(9600); // Keypad pins setup for (int i = 0; i < 3; i++) { pinMode(output_pins[i], OUTPUT); digitalWrite(output_pins[i], HIGH); pinMode(input_pins[i], INPUT_PULLUP); } // Segment pins setup pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(E, OUTPUT); pinMode(F, OUTPUT); pinMode(G, OUTPUT); // Turn off all segments initially digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); } char mykey(void) { int r, c; for (r = 0; r < 3; r++) { digitalWrite(output_pins[r], LOW); for (c = 0; c < 3; c++) { if (digitalRead(input_pins[c]) == LOW) { Serial.print("Button pressed at row "); Serial.print(r); Serial.print(", column "); Serial.println(c); // Debounce by waiting for a short time delay(50); // Adjust this value based on your needs if (digitalRead(input_pins[c]) == LOW) { while (digitalRead(input_pins[c]) == LOW) { // Wait until the button is released } digitalWrite(output_pins[r], HIGH); return key[r][c]; } } } digitalWrite(output_pins[r], HIGH); } return '$'; } void loop() { Pressed = mykey(); if (Pressed != '$') { Serial.println(Pressed); // Display logic using segment pins switch (Pressed) { case '1': // Define segment pin states for '1' digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case('2'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,LOW); digitalWrite(C,HIGH); digitalWrite(D,LOW); digitalWrite(E,LOW); digitalWrite(F,HIGH); digitalWrite(G,LOW); break; case('3'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,LOW); digitalWrite(C,LOW); digitalWrite(D,LOW); digitalWrite(E,HIGH); digitalWrite(F,HIGH); digitalWrite(G,LOW); break; case('4'): //Define which parts of screen to turn on for each digit digitalWrite(A,HIGH); digitalWrite(B,LOW); digitalWrite(C,LOW); digitalWrite(D,HIGH); digitalWrite(E,HIGH); digitalWrite(F,LOW); digitalWrite(G,LOW); break; case ('5'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,HIGH); digitalWrite(C,LOW); digitalWrite(D,LOW); digitalWrite(E,HIGH); digitalWrite(F,LOW); digitalWrite(G,LOW); break; case ('6'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,HIGH); digitalWrite(C,LOW); digitalWrite(D,LOW); digitalWrite(E,LOW); digitalWrite(F,LOW); digitalWrite(G,LOW); break; case ('7'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,LOW); digitalWrite(C,LOW); digitalWrite(D,HIGH); digitalWrite(E,HIGH); digitalWrite(F,HIGH); digitalWrite(G,HIGH); break; case ('8'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,LOW); digitalWrite(C,LOW); digitalWrite(D,LOW); digitalWrite(E,LOW); digitalWrite(F,LOW); digitalWrite(G,LOW); break; case ('9'): //Define which parts of screen to turn on for each digit digitalWrite(A,LOW); digitalWrite(B,LOW); digitalWrite(C,LOW); digitalWrite(D,HIGH); digitalWrite(E,HIGH); digitalWrite(F,LOW); digitalWrite(G,LOW); break; default: // Turn off all segments for unhandled cases digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); break; } // Add delay to control display refresh rate delay(100); // Adjust as needed } }