const int a = 12, b=18,c =14,d=13;
int position = 90;
volatile bool isRunning = false;
volatile bool isUp = false;
#include <ESP32Servo.h>
Servo servo;
void lampTask(void *parameter){
bool lampState = false;
while(true){
if (isRunning){
lampState = !lampState;
digitalWrite(d,lampState ? HIGH : LOW);
vTaskDelay(300 / portTICK_PERIOD_MS);
}else{
digitalWrite(d,LOW);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
}
void servoTask(void *parameter){
while(true){
if (isRunning){
if(!isUp){
for(position; position <= 180; position++){
if(!isRunning){
servo.write(position);
isUp = false;
break;
}
servo.write(position);
vTaskDelay(50 / portTICK_PERIOD_MS);
isUp = true;
}
}
}
if(isRunning){
if(isUp){
for(position; position >= 0; position--){
servo.write(position);
if(!isRunning){
servo.write(position);
isUp =true;
break;
}
vTaskDelay(50 / portTICK_PERIOD_MS);
isUp = false;
}
}
}
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
void buttonTask(void *parameter){
pinMode(c, INPUT_PULLUP);
pinMode(a, INPUT_PULLUP);
while(true){
if(digitalRead(a) == LOW){
isRunning = true;
}
if(digitalRead(c)== LOW){
isRunning = false;
}
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
void setTrue(){
isRunning = true;
}
void setFalse(){
isRunning = false;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(d,OUTPUT);
servo.attach(b, 500, 2400);
xTaskCreatePinnedToCore(servoTask, "Servo Task", 2000, NULL, 1, NULL, 0); // Core 0
xTaskCreatePinnedToCore(lampTask, "Lamp Task", 1000, NULL, 1, NULL, 0); // Core 0
xTaskCreatePinnedToCore(buttonTask, "Button Task", 1000, NULL, 1, NULL, 1); // Core 1
}
void loop() {
// put your main code here, to run repeatedly:
}