Последовательная печать только один раз

#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
    }
}