Untitled

 avatar
unknown
c_cpp
2 years ago
1.5 kB
4
Indexable
#include <ESP32Servo.h> //請先安裝ESP32Servo程式庫
#define LED1 2
#define LED2 16
Servo myServo; //建立一個伺服馬達物件
const byte SW = 18;
TaskHandle_t handleA;

void warningLight(void *pvParam){
    while(1){
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      digitalWrite(LED1, HIGH);
      //ledcWriteTone(0, 659);  // 通道0的頻率設成659Hz
      vTaskDelay(50);
      digitalWrite(LED2, LOW);
      //ledcWriteTone(0, 440);  // 通道0的頻率設成440Hz
      vTaskDelay(50);  
      digitalWrite(LED1, LOW);
      //ledcWriteTone(0, 659);  // 通道0的頻率設成440Hz
      vTaskDelay(50);
      digitalWrite(LED2, HIGH);
      //ledcWriteTone(0, 440);  // 通道0的頻率設成440Hz
      vTaskDelay(50);
      yield();
    }    
}

void setup(){
  Serial.begin(115200);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  myServo.attach(17, 500, 2400);  //SG90的脈衝寬度500~2400
  pinMode(SW, INPUT_PULLUP);
  xTaskCreate(warningLight, "blink LED", 1000, NULL, 1, &handleA);  
}
void loop(){
  if(digitalRead(SW)){
    Serial.println("高電平");
    vTaskSuspend(handleA);
    delay(1000);   
  }
  else{
    Serial.println("低電平");
    vTaskResume(handleA); 
    myServo.write(90);//轉到90度
    Serial.println("打開柵欄"); 
    delay(5000); 
    myServo.write(0);//轉到0度(原點)
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    Serial.println("關閉柵欄");
  }
  
}
Editor is loading...