簡體   English   中英

Nextion觸摸屏Arduino Mega 2560打開和關閉繼電器

[英]Nextion Touch Screen Arduino Mega 2560 Turning a relay off and on

伙計們,我有點問題。

我正在嘗試使用Nextion觸摸屏來控制我的越野燈。 我正在使用Arduino Mega 2560開發板。 8個模塊的中繼板。 和下一步屏幕。 我寫的草圖一切正常,除了觸發繼電器后無法將其關閉。 在草圖中,我還發布了第一個按鈕切換,我已讀取引腳的狀態,然后根據狀態將其關閉或打開。 好吧,它現在什么也不做。 它既不會觸發繼電器也不會關閉繼電器。

在按鈕切換的其余部分中,我只是讓它在按鈕切換時觸發繼電器。

在按鈕切換中要求的消息不會根據按鈕狀態而改變。 否則我會用它來關閉繼電器。

伙計們,我很茫然。 任何指導將不勝感激。

/* This is my Sketch for the Touch Screen interface for the relay box that will be installed in my Jeep
        Robert L. Wardecker

        This code is in public domain
    */

    #include <SoftwareSerial.h>
    #include <doxygen.h>
    #include <Nextion.h>


    const int relayaPin = 52;
    const int relaybPin = 53;
    const int relaycPin = 50;
    const int relaydPin = 51;
    int val = 0;


    SoftwareSerial nextion(10, 11);// Nextion TX to pin 10 and RX to pin 11 of Arduino

    Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

    boolean button1State;
    boolean button2State;
    boolean button3state;
    boolean button4state;
    boolean button5state;

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      myNextion.init(); // send the initialization commands for Page 0

      pinMode(relayaPin, OUTPUT);
      pinMode(relaybPin, OUTPUT);
      pinMode(relaycPin, OUTPUT);
      pinMode(relaydPin, OUTPUT);

    }

    void loop() {
      // put your main code here, to run repeatedly:

      String message = myNextion.listen(); //check for message
      if (message == "65 0 1 1 ffff ffff ffff") {
        myNextion.buttonToggle(button1State, "b0", 0, 2);
      }
     val = digitalRead(relayaPin);
     Serial.print(val);

      if (val == HIGH) {
        // turn Relay on:
        digitalWrite(relayaPin, HIGH);
      } else {
        // turn Relay off:
        digitalWrite(relayaPin, LOW);
      }

      if (message == "65 0 2 1 ffff ffff ffff") {
        myNextion.buttonToggle(button2State, "b1", 0, 2);
        digitalWrite(relaybPin, HIGH);
      }
      if (message == "65 0 3 1 ffff ffff ffff") {
        myNextion.buttonToggle(button3state, "b2", 0, 2);
        digitalWrite(relaycPin, HIGH);
      }
      if (message == "65 0 4 1 ffff ffff ffff") {
        myNextion.buttonToggle(button3state, "b3", 0, 2);
        digitalWrite(relaydPin, HIGH);
      }
      if (message == "65 0 5 1 ffff ffff ffff") {
        myNextion.buttonToggle(button3state, "b4", 0, 2);
        digitalWrite(relayaPin, HIGH);
        digitalWrite(relaybPin, HIGH);
        digitalWrite(relaycPin, HIGH);
        digitalWrite(relaydPin, HIGH);
      }

    }

這有多個問題:

1)您對“ 65 0 1 1 ffff ffff ffff”的第一次檢查只是在Nextion屏幕上切換按鈕,實際上對relayaPin沒有任何relayaPin 一旦檢查完成,則無論檢查如何,您的代碼都會切換您的中繼a,因為它沒有封裝在if語句中。 您要做的是:

  if (message == "65 0 1 1 ffff ffff ffff") {
    myNextion.buttonToggle(button1State, "b0", 0, 2);

    val = digitalRead(relayaPin);
    Serial.print(val);

    if (val == HIGH) {
      // turn Relay on:
      digitalWrite(relayaPin, HIGH);
    } else {
      // turn Relay off:
      digitalWrite(relayaPin, LOW);
    }
 }

如果您按下按鈕,這只會切換繼電器A。

2)對於所有其他中繼檢查語句,您並沒有像上述那樣檢查其當前狀態。 僅將其再次設置為HIGH不會切換它,如果它已經打開,則只會一直停留在該點上。 沒有退出標准。 您需要像第一個一樣進行檢查。

3)為了愛上帝,請使用#define RELAY_A_MESSAGE "65 0 1 1 ffff ffff ffff"這樣的處理來提高可讀性。 然后,您可以只使用if( message == RELAY_A_MESSAGE )語句來代替此怪異的ascii垃圾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM