電路圖
程式碼:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <Servo.h> const int analogInPin = 11; const int servoPin = 15; const int ControlPin = 16; const int SoundPin = 17; // 設定時間間隔為 5 分鐘(300,000 毫秒) const int INTERVAL = 300000; int threshold = 60; int sensorValue = 0; // value read from the pot // 上次執行的時間點 unsigned long previousMillis = 0; void setup() { pinMode(analogInPin,INPUT); Servo_init(); pinMode(servoPin, OUTPUT); Servo_attach(servoPin); pinMode(ControlPin, OUTPUT); digitalWrite(ControlPin, HIGH); // 初始狀態設為 HIGH pinMode(SoundPin, OUTPUT); digitalWrite(SoundPin, HIGH); // 初始狀態設為 HIGH } void loop() { // read the analog in value: sensorValue = analogRead(analogInPin); // 取得目前的時間 unsigned long currentMillis = millis(); // 每隔 5 分鐘執行一次 if (currentMillis - previousMillis >= INTERVAL) { previousMillis = currentMillis; // 更新上次執行的時間點 // 將 P3.6 拉低 1000 毫秒 digitalWrite(ControlPin, LOW); delay(1000); digitalWrite(ControlPin, HIGH); } if (sensorValue>=threshold){ USBSerial_print(sensorValue); USBSerial_print("\n"); digitalWrite(SoundPin, LOW); delay(1000); digitalWrite(SoundPin, HIGH); Servo_write(servoPin,0); delay(1000); Servo_write(servoPin,180); delay(1000); Servo_write(servoPin,90); delay(3000); } delay(2); } |