int counter = 0;
// ขาที่ต่อกับสวิตช์
int switchPinIncrement = 7; // สวิตช์เพิ่มค่า
int switchPinDecrement = 6; // สวิตช์ลดค่า
// ขาที่ต่อกับ 7-Segment Display (ตัวอย่าง: Common Anode)
int latchpin = 11; // STCP is pin 12 of 74HC595
int clockpin = 12; // SHCP is pin 11 of 74HC595
int datapin = 8; // DS is pin 14 of 74HC595
int Digit[] = {
0X3F, // 0
0X06, // 1
0X5B, // 2
0X4F, // 3
0X66, // 4
0X6D, // 5
0X7D, // 6
0X07, // 7
0X7F, // 8
0X6F // 9
};
void setup() {
pinMode(latchpin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
pinMode(switchPinIncrement, INPUT_PULLUP);
pinMode(switchPinDecrement, INPUT_PULLUP);
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
int i = 0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
digitalWrite(myDataPin, LOW);
digitalWrite(myClockPin, LOW);
for (i = 7; i >= 0; i--) {
digitalWrite(myClockPin, LOW);
if (myDataOut & (1 << i)) {
pinState = HIGH;
} else {
pinState = LOW;
}
digitalWrite(myDataPin, pinState);
digitalWrite(myClockPin, HIGH);
digitalWrite(myDataPin, LOW);
}
digitalWrite(myClockPin, LOW);
}
void displayNumber(int number) {
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, Digit[number]);
digitalWrite(latchpin, HIGH);
}
void loop() {
// อ่านสถานะของสวิตช์และนับตัวเลข
if (digitalRead(switchPinIncrement) == LOW) {
counter++;
if (counter > 9) {
counter = 9;
}
delay(250); // ป้องกันการ bounce
}
if (digitalRead(switchPinDecrement) == LOW) {
counter--;
if (counter < 0) {
counter = 0;
}
delay(250); // ป้องกันการ bounce
}
// แสดงตัวเลขบน 7-Segment display
displayNumber(counter);
}