標題: 關(guān)于如何讓Arduino串口打印一次或者兩次的問題 [打印本頁]

作者: kingzr00    時間: 2024-12-11 15:25
標題: 關(guān)于如何讓Arduino串口打印一次或者兩次的問題
寫了一段代碼,按下按鍵引腳輸出高電平,并切串口打印相應(yīng)字符,松開按鍵引腳輸出低電平,串口打印相應(yīng)字符,現(xiàn)在問題是不管是高電平還是低電平串口都在一直打印,想問問各位大佬怎樣才能讓串口打印一次或者兩次字符?源代碼,初學(xué)寫的比較爛,大佬湊合看!
源碼如下:


void setup()
{
  Serial.begin(19200);
  pinMode(3, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  digitalWrite(13,LOW);
}

void loop()
{
  if (!digitalRead(3))
   {
    digitalWrite(13,HIGH);        
    Serial.print("1a");
    delay(1000);
    }
     
    else
   
  {
    digitalWrite(13,LOW);
    Serial.print("1b");
    delay(1000);
   }
                     
}
作者: zpwgf    時間: 2024-12-11 15:25
bool lastButtonState = HIGH;  // 初始假設(shè)按鍵未按下(由于使用了PULLUP電阻)

void setup()
{
  Serial.begin(19200);
  pinMode(3, INPUT_PULLUP);  // 使用內(nèi)部上拉電阻
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop()
{
  bool currentButtonState = !digitalRead(3);  // 按鍵按下時引腳為LOW

  if (currentButtonState != lastButtonState)  // 檢查按鍵狀態(tài)是否改變
  {
    if (currentButtonState)  // 按鍵按下
    {
      digitalWrite(13, HIGH);
      Serial.println("Button pressed: 1a");  // 使用println換行,方便閱讀
      lastButtonState = currentButtonState;  // 更新狀態(tài)
    }
    else  // 按鍵松開
    {
      digitalWrite(13, LOW);
      Serial.println("Button released: 1b");  // 使用println換行,方便閱讀
      lastButtonState = currentButtonState;  // 更新狀態(tài)
    }
  }

  // 這里可以添加一個小的延時來減少CPU的占用,但注意不要太大以免影響響應(yīng)速度
  // delay(10);  // 可選,根據(jù)需要調(diào)整
}
作者: hhdsdy    時間: 2024-12-11 18:16
loop里面的程序是一直在循環(huán)運行的,肯定會一直打印,要加一個變量用來記錄按鍵狀態(tài),只要讀取到的按鍵狀態(tài)和記錄的不一樣,就更改變量并執(zhí)行相應(yīng)的操作。
作者: kingzr00    時間: 2024-12-11 20:33
zpwgf 發(fā)表于 2024-12-11 17:49
bool lastButtonState = HIGH;  // 初始假設(shè)按鍵未按下(由于使用了PULLUP電阻)

void setup()

感謝大佬解惑,大佬的代碼完美實現(xiàn),把代碼最后的延時加上了,不然按鍵時有抖動,感謝!
作者: kingzr00    時間: 2024-12-11 20:33
hhdsdy 發(fā)表于 2024-12-11 18:16
loop里面的程序是一直在循環(huán)運行的,肯定會一直打印,要加一個變量用來記錄按鍵狀態(tài),只要讀取到的按鍵狀態(tài) ...

感謝指點!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1