Bonjour,
Je fais fonctionner un petit ventilateur, un bouton pour allumer et éteindre, et un autre pour régler la vitesse. Cela fonctionne mais par contre le ventilateur ne s'éteint pas quand je rappuie sur le premier bouton. Une idée du pourquoi?
#include <analogWrite.h>
#define fanPin1 19
#define fanPin2 18
#define btn1 16
int btn_count = 0; //Used to count the clicked button times
#define btn2 27
int btn_count2 = 0;
int speed_val = 130; //Define the speed variables
void setup() {
Serial.begin(9600);
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
pinMode(fanPin1, OUTPUT);
pinMode(fanPin2, OUTPUT);
}
void loop() {
boolean btn1_val = digitalRead(btn1);
if(btn1_val == 0) //If the button is pressed
{
delay(10); //Delay 10ms to eliminate button jitter
if(btn1_val == 0) //Make sure the button is pressed again
{
boolean btn_state = 1;
while(btn_state == 1) //Loop indefinitely until the button is released
{
boolean btn_val = digitalRead(btn1);
if(btn_val == 1) //If the button is released
btn_count++; //Automatically increments by 1 to count the clicked button times
Serial.println(btn_count);
btn_state = 0; //The button is released and exits the loop
}
}
}
boolean value = btn_count % 2; //Take the remainder of the value, you will get 0 or 1
while(value == 1)
{
//Serial.println("on");
digitalWrite(fanPin1, LOW); //pwm = 0
analogWrite(fanPin2, speed_val);
boolean btn2_val = digitalRead(btn2);
if(btn2_val == 0)
{
delay(10);
if(btn2_val == 0)
{
boolean btn_state2 = 1;
while(btn_state2 == 1)
{
boolean btn2_val = digitalRead(btn2);
if(btn2_val == 1)
{
btn_count2++;
if(btn_count2 > 3)
{
btn_count2 = 1;
}
switch(btn_count2)
{
case 1: speed_val = 130; Serial.println(speed_val);break; //Adjust the speed
case 2: speed_val = 180; Serial.println(speed_val);break;
case 3: speed_val = 230; Serial.println(speed_val);break;
}
btn_state2 = 0;
}
}
}
boolean btn1_val = digitalRead(btn1);
if(btn1_val == 0) //If the button is pressed
{
digitalWrite(fanPin1, LOW); //pwm = 0
analogWrite(fanPin2, 0);
value = 0; //Exit the loop
}
}
}
}