#define motorPin1 23 // ขาสั่งมอเตอร์
#define motorPin2 22 // ขาสั่งมอเตอร์
int ledgreen = 15; // ไฟแสดงสถานะเขียว
int ledred = 2; // ไฟแสดงสถานะแดง
int camera = 13; // กล้อง
int sw1 = 35; // สวิตช์ 1 (เปิด-ปิด)
int sw2 = 4; // สวิตช์ 2 (ปิดอย่างเดียว)
int line = 34; // แจ้งเตือนไลน์
bool switchState1 = false; // สถานะปัจจุบันของสวิตช์ 1
bool lastSwitchState1 = false; // สถานะก่อนหน้าของสวิตช์ 1
void setup() {
pinMode(ledgreen, OUTPUT);
pinMode(ledred, OUTPUT);
pinMode(camera, OUTPUT);
pinMode(line, OUTPUT);
pinMode(sw1, INPUT_PULLUP); // ใช้ INPUT_PULLUP ในกรณีไม่ต้องการใช้เรซิสเตอร์
pinMode(sw2, INPUT_PULLUP); // ใช้ INPUT_PULLUP ในกรณีของสวิตช์ 2
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
Serial.begin(9600);
}
void loop() {
// อ่านสถานะของสวิตช์ 1 และสวิตช์ 2
bool upState1 = digitalRead(sw1);
bool upState2 = digitalRead(sw2);
// ถ้าสวิต์ 1 มีการเปลี่ยนสถานะ
if (upState1 != lastSwitchState1) {
delay(50); // รอเล็กน้อยเพื่อป้องกันการสั่น
if (upState1 == LOW) {
// ถ้าสวิต์ 1 ถูกกด
switchState1 = !switchState1; // เปลี่ยนสถานะสวิตช์ 1
if (switchState1) {
// ถ้าสวิต์ 1 เปิด
rotateMotor(0); // สั่งให้มอเตอร์หมุนเปิด 90 องศา
digitalWrite(ledgreen, LOW);
digitalWrite(ledred, HIGH);
digitalWrite(line, LOW);
} else {
// ถ้าสวิต์ 1 ปิด
rotateMotor(90); // สั่งให้มอเตอร์หมุนปิด 0 องศา
digitalWrite(ledred, LOW);
digitalWrite(ledgreen, HIGH);
digitalWrite(line, LOW);
}
}
}
lastSwitchState1 = upState1;
// ถ้าสวิต์ 2 ถูกกด (ปิดอย่างเดียว)
if (upState2 == LOW) {
rotateMotor(0); // สั่งให้มอเตอร์หมุนปิด 0 องศา
digitalWrite(ledred, HIGH);
tone(line, 625, 500); //ฟา เสียง1เสียงที่ขา 34 (line)
digitalWrite(ledgreen, LOW);
switchState1 = false; // ปิดสวิต์ 1
}
}
void rotateMotor(int angle) {
// ควบคุมการหมุนของมอเตอร์
if (angle == 0) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
} else if (angle == 90) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
} else {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
}
}