SemaphoreHandle_t mutex_v;
int ledPin = 2;
int inputPin = 4;
int inputButton = 13;
int Analog = LOW;
int val = 0;
int lastState = HIGH;
int value = digitalRead(inputButton);
void setup() {
pinMode(inputButton, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
Serial.begin(9600);
mutex_v = xSemaphoreCreateBinary();
if (mutex_v == NULL) {
Serial.println("Mutex can not be created");
}
xTaskCreate(MainCheck, "Option1", 1024, NULL, 1, NULL);
xTaskCreate(LightSignal, "Option2", 1024, NULL, 2, NULL);
}
void ChangeSignal(){
digitalWrite(ledPin, !digitalRead(ledPin));
Serial.println("Led State Changed ");
}
void LightSignal(void *pvParameters){
while(1){
if(xSemaphoreTake(mutex_v, portMAX_DELAY)){
ChangeSignal();
}
}
}
void MainCheck(void *pvParameters){
bool k = false;
Serial.println("Looking for smoke");
while(1){
val = analogRead(inputPin);
if (val >= 2000) {
if (Analog == LOW) {
Serial.println("SMOKE");
Analog = HIGH;
if(!k){
k=true;
xSemaphoreGive(mutex_v);
}
}
} else {
if (Analog == HIGH) {
Serial.println("Smoke cleared");
Analog = LOW;
}
if(k){
value = digitalRead(inputButton);
if(lastState != value){
lastState = value;
if(value == 0){
k=false;
xSemaphoreGive(mutex_v);
Serial.println("RESET");
}
}
}
}
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
void loop() {
}