#arduino
#arduino
Вопрос:
Я являюсь программой включения / выключения, в которой, если я включу ее, она будет последовательно печатать на последовательном мониторе только 1 «ВКЛ.», но все еще зацикливается и включает выходы, а при выключении она будет последовательно печатать только 1 «ВЫКЛ.», но все еще зацикливается и отключает выходы.
Вот мой код:
int pbuttonPin = 7;// push button
int fan = 8;
int water = 9;
int val = 0; // push value from pin 2
int lightON = 0;//light status
int pushed = 0;//push status
void setup() {
Serial.begin(9600);
pinMode(pbuttonPin, INPUT_PULLUP);
pinMode(fan, OUTPUT);
pinMode(water, OUTPUT);
digitalWrite(fan, HIGH);
digitalWrite(water, HIGH);
}
void loop() {
val = digitalRead(pbuttonPin);// read the push button value
if(val == HIGH amp;amp; lightON == LOW){
pushed = 1-pushed;
delay(100);
}
lightON = val;
if(pushed == LOW){
Serial.print("ONn");
Serial.println();
digitalWrite(fan, LOW);
digitalWrite(water, LOW);
delay(100);
}
else if(pushed == HIGH) {
Serial.print("OFFn");
Serial.println();
digitalWrite(fan, HIGH);
digitalWrite(water, HIGH);
delay(100);
}
}
Ответ №1:
Я думаю, вы хотите что-то подобное, но я не уверен
bool buttonState = false, buttonStateBefore = false;
buttonState = !digitalRead(buttonPin); //needs to be inverted because INPUT_PULLUP
if(buttonState > buttonStateBefore) doStuff(); //Serial print and turn on/off ligths
buttonStateBefore = buttonState;
Теперь doStuff() вызывается только один раз при нажатии кнопки.
Может быть, это сработает для вас
Ответ №2:
Добавьте это, наконец, в конец кода previousval = val
в конце кода и поместите оператор if, который проверяет, изменилось ли предыдущее значение или нет. Если это так, то запустите код и поместите в него эту часть, содержащую инструкцию print . в основном это будет ваш код
if ( previousval =! val){
if(pushed == LOW){
Serial.print("ONn");
Serial.println();
digitalWrite(fan, LOW);
digitalWrite(water, LOW);
delay(100);
}
else if(pushed == HIGH) {
Serial.print("OFFn");
Serial.println();
digitalWrite(fan, HIGH);
digitalWrite(water, HIGH);
delay(100);
previousval = val
}
}