2024年12月22日 星期日

[8051] 用CH552設計偵測拍掌聲,控制伺服馬達和語音IC(JQ6500)

 電路圖

程式碼:


 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);
}

沒有留言:

張貼留言