// ===== กำหนดขาสวิตช์ =====
#define SW5 PB9
#define SW6 PB2
#define SW7 PB8
// ===== กำหนดขา LED =====
#define LED1 PB13
#define LED2 PB14
#define LED3 PB15
// ===== กำหนดขา 7-segment (Common Cathode) =====
#define SEG_A PA0
#define SEG_B PA1
#define SEG_C PA4
#define SEG_D PA5
#define SEG_E PA6
#define SEG_F PA7
#define SEG_G PA8
// ตาราง segment (a,b,c,d,e,f,g) สำหรับเลข 0-9
const byte segmentMap[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
// ===== ตัวแปรควบคุม =====
bool programRunning = false;
bool counting = false;
int counter = 0;
void setup() {
Serial.begin(9600);
// ตั้งค่าโหมดสวิตช์
pinMode(SW5, INPUT_PULLUP);
pinMode(SW6, INPUT_PULLUP);
pinMode(SW7, INPUT_PULLUP);
// ตั้งค่าโหมด LED
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// ตั้งค่าโหมด 7-segment
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
allLedsOff();
clear7Segment();
Serial.println("ระบบพร้อมทำงาน");
}
void loop() {
bool sw5Pressed = !digitalRead(SW5);
bool sw6Pressed = !digitalRead(SW6);
bool sw7Pressed = !digitalRead(SW7);
// ===== กด SW5 =====
if (sw5Pressed) {
if (!programRunning) {
// เริ่มโปรแกรม
programRunning = true;
counting = false;
counter = 0;
showLedState(LED1);
clear7Segment();
Serial.println("เริ่มโปรแกรม");
} else {
// หยุดโปรแกรม
programRunning = false;
counting = false;
allLedsOff();
clear7Segment();
Serial.println("หยุดโปรแกรม");
}
delay(300); // กันการเด้งปุ่ม
}
// ===== ถ้าโปรแกรมกำลังทำงาน =====
if (programRunning) {
// กด SW6 ค้าง → หยุดชั่วคราว
if (sw6Pressed) {
showLedState(LED2);
return; // ข้ามการนับ
}
// กด SW7 ครั้งเดียวเพื่อเริ่มนับ
if (sw7Pressed && !counting) {
counting = true;
Serial.println("เริ่มนับ");
delay(300);
}
// ถ้ากำลังนับอยู่
if (counting) {
showLedState(LED3);
Serial.println(counter);
displayNumber(counter);
counter++;
if (counter > 9) counter = 0;
delay(500); // ความเร็วการนับ
}
}
}
// ===== ฟังก์ชันช่วย =====
void allLedsOff() {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
void showLedState(int ledPin) {
allLedsOff();
digitalWrite(ledPin, HIGH);
}
void clear7Segment() {
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
}
void displayNumber(int num) {
digitalWrite(SEG_A, segmentMap[num][0]);
digitalWrite(SEG_B, segmentMap[num][1]);
digitalWrite(SEG_C, segmentMap[num][2]);
digitalWrite(SEG_D, segmentMap[num][3]);
digitalWrite(SEG_E, segmentMap[num][4]);
digitalWrite(SEG_F, segmentMap[num][5]);
digitalWrite(SEG_G, segmentMap[num][6]);
}Loading
st-nucleo-c031c6
st-nucleo-c031c6