序列号 只打印一次

Serial Print once only

我是一个 ON/OFF 程序,如果我打开它,它将串行打印到串行监视器 1“ON”,但仍在循环并打开输出,如果关闭,它将串行打印 1“ OFF”,但仍在循环并关闭输出。

这是我的代码:

            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 && lightON == LOW){
            
                pushed = 1-pushed;
                delay(100);
            
              }    
            
              lightON = val;
            
                  if(pushed == LOW){
                    Serial.print("ON\n");
                    Serial.println();
                    digitalWrite(fan, LOW); 
                    digitalWrite(water, LOW); 
                    delay(100);
                   
                  }
                  
                  else if(pushed == HIGH) {
                    Serial.print("OFF\n");
                    Serial.println();   
                    digitalWrite(fan, HIGH); 
                    digitalWrite(water, HIGH); 
                    delay(100);
                    
            
                  }
               
            }

我猜你想要这样的东西,但我不确定

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() 仅在按下按钮时调用一次。 也许这对你有用

在代码末尾的代码 Sting previousval = val 的最后添加这个,并放置一个 if 语句来检查先前的值是否已更改。如果是,则 运行 代码并将包含 print 语句的这部分放入其中。基本上这将是您的代码

if ( previousval =! val){
    if(pushed == LOW){
    Serial.print("ON\n");
    Serial.println();
    digitalWrite(fan, LOW); 
    digitalWrite(water, LOW); 
    delay(100);
   
  }
  
  else if(pushed == HIGH) {
    Serial.print("OFF\n");
    Serial.println();   
    digitalWrite(fan, HIGH); 
    digitalWrite(water, HIGH); 
    delay(100);
    previousval = val
    }
}