#include <Keypad.h>
const byte segmentPins[] = {A0, A1, A2, A3, A4, A5, A6};
const byte numSegments = 7;
const byte digitPins[] = {2, 3, 4, 5}; // Change these pins based on your wiring
const byte numDigits = 4;
// Define the common cathode seven-segment display patterns for digits 0-9
const byte digitPatterns[] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
};
byte ROW_NUM = 4;
byte COLUMN_NUM = 4;
byte pin_rows[] = {1, 0, 2, 3}; // connect to the row pinouts of the keypad
byte pin_columns[] = {4, 5, 6, 7}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap("123A456B789C*0#"), pin_rows, pin_columns, ROW_NUM, COLUMN_NUM);
void setup() {
// Set segment pins as OUTPUT
for (byte i = 0; i < numSegments; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], HIGH); // Common cathode, set HIGH initially
}
// Set digit pins as OUTPUT
for (byte i = 0; i < numDigits; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], LOW); // Set LOW initially
}
}
void displayDigit(byte digit) {
// Display a digit on the seven-segment display
for (byte i = 0; i < numSegments; i++) {
if (digitPatterns[digit] & (1 << i)) {
digitalWrite(segmentPins[i], LOW); // Common cathode, set LOW to light up the segment
} else {
digitalWrite(segmentPins[i], HIGH);
}
}
}
void loop() {
char key = keypad.getKey();
if (key) {
// Display the pressed key on the seven-segment display
int digit = key - '0';
if (digit >= 0 && digit <= 9) {
for (byte i = 0; i < numDigits; i++) {
// Activate the corresponding digit
digitalWrite(digitPins[i], HIGH);
// Display the pressed key
displayDigit(digit);
// Wait a short duration (adjust as needed)
delay(5);
// Turn off the digit
digitalWrite(digitPins[i], LOW);
}
// Wait for a short duration before reading the next key
// delay(500);
}
}
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6