char Format = "";
const uint8_t ROWS = 3;
const uint8_t COLS = 3;
int vol = 0;
//int Butter = A10;
char keys[ROWS][COLS] = {
{ '1', '2', '3' },
{ '4', '5', '6' },
{ '7', '8', '9' }
};
uint8_t colPins[COLS] = { A3, A4, A5 };
uint8_t rowPins[ROWS] = { A0, A1, A2 };
const byte segmentCodes[] = {
0b11000000, // 0
0b11111010, // 1
0b10100100, // 2
0b10110000, // 3
0b10011010, // 4
0b10010001, // 5
0b10000001, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
};
void setup() {
DDRK = 0b11110010;
DDRA = 0xFF;
DDRB = 0xFF;
// Initialize serial communication for debugging
Serial.begin(9600);
// Set column pins as outputs and row pins as inputs
for (uint8_t col = 0; col < COLS; col++) {
pinMode(colPins[col], OUTPUT);
digitalWrite(colPins[col], HIGH); // Set column pin high
}
for (uint8_t row = 0; row < ROWS; row++) {
pinMode(rowPins[row], INPUT_PULLUP); // Use internal pull-up resistors
}
}
void displayDigit(int digit) {
PORTA = segmentCodes[digit];
}
void displayTime(unsigned long time) {
int thousands = time / 10000;
int hundreds = (time / 1000) % 10;
int tens = (time / 100) % 10;
int ones = time % 10;
displayDigit(thousands);
PORTB |= 0b0001;
delay(5);
PORTB ^= 0b0001;
displayDigit(hundreds);
PORTB |= 0b0010;
PORTA = 0b01111111;
delay(5);
PORTB ^= 0b0010;
displayDigit(tens);
PORTB |= 0b0100;
delay(5);
PORTB ^= 0b0100;
displayDigit(ones);
PORTB |= 0b1000;
delay(5);
PORTB ^= 0b1000;
}
void displayTime1(unsigned long time) {
int thousands = time / 10000;
int hundreds = (time / 1000) % 10;
int tens = (time / 100) % 10;
int ones = time % 10;
displayDigit(thousands);
PORTB |= 0b000001;
delay(5);
PORTB ^= 0b000001;
displayDigit(hundreds);
PORTB |= 0b000010;
PORTD = 0b01111111;
delay(5);
PORTB ^= 0b000010;
displayDigit(tens);
PORTC |= 0b000100;
delay(5);
PORTC ^= 0b000100;
displayDigit(ones);
PORTC |= 0b001000;
delay(5);
PORTC ^= 0b001000;
}
int vol1 = 0;
int startTime = 0;
int Segment = 0;
int elapsedTime = 0;
void FX() {
while (true) {
if (startTime == 0) {
startTime = millis(); // เริ่มต้นนับเวลา
}
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
displayTime(elapsedTime);
if (Format == '1','2','3') {
vol1 = digitalRead(PINK & (1 << 3)); // อ่านค่าจากขา PINK บิตที่ 0
if (vol1 == 1 ) {
Segment = elapsedTime;
//Format = "";
return;
}
}
}
}
void loop() {
int vol = 0;
vol = digitalRead(PINK & (1 << 2));
// Serial.print(vol);
if (vol == 1) {
elapsedTime = 0;
while (true) {
displayTime(Segment);
for (uint8_t col = 0; col < COLS; col++) {
digitalWrite(colPins[col], LOW); // Set current column low
for (uint8_t row = 0; row < ROWS; row++) {
if (digitalRead(rowPins[row]) == LOW) {
// Key press detected
char key = keys[row][col];
if(key == '1'){
Format = key;
//startTime = 0;
FX();
}
else if (key == '2'){
Format = key;
//startTime = 0;
FX();
}
else if (key == '3'){
Format = key;
//startTime = 0;
FX();
}
Serial.println("Key pressed: " + String(key));
// Wait until the key is released
while (digitalRead(rowPins[row]) == LOW) {
// Wait
}
}
}
digitalWrite(colPins[col], HIGH); // Restore current column to high
}
int vol2 = 0;
vol2 = digitalRead(PINK & (1 << 3)); // อ่านค่าจากขา PINK บิตที่ 0
if (vol2 == 1 ) {
return;
}
}
}
}