Почему мои условия if не работают?Как можно исправить типы переменных? - PullRequest
0 голосов
/ 09 июня 2019

Я хочу изменить параметры с предложениями udp. Я получаю UDP, но мое условие if не работает. Как могут конкурировать 2 переменные?

Я изменил типы переменных и / или тип предложения (например, if (strcmp (UdpMsg, "relay01_off") == 0)).

Настроить переменную предложения IF

String UdpMsg = "12345";...

Получение UDP-сообщения

String UdpMsg ((char *)buffer);...

IF оговорка

if ( UdpMsg == "relay01_off" ) {
  digitalWrite(relay_pin, HIGH);
  Serial.print ("You!\n");
  }

Я ожидал увидеть тебя! когда я отправляю UDP, но он не находит равных.

Полный код для информации:

#include <WiFi.h>
#include <WiFiUdp.h>
#include <cstring>  //For the string functions

const char* wifi_name = "SSID";          // Your Wifi network name here
const char* wifi_pass = "password";     // Your Wifi network password here
WiFiServer server(80);                      // Server will be at port 80

// IP address to send UDP data to.
const char *  udpAddress = "192.168.1.6";
int           udpPort = 4444;

//create UDP instance
WiFiUDP udp;

// relay PINi
int relay_pin = 15;

// UDP Mesajı gelen
String UdpMsg = "12345";

void setup() 
{
  Serial.begin (115200);
  pinMode (relay_pin, OUTPUT);

  Serial.print ("Connecting to ");
  Serial.print (wifi_name);
  WiFi.begin (wifi_name, wifi_pass);     // Connecting to the wifi network

  while (WiFi.status() != WL_CONNECTED) // Waiting for the response of wifi network
  {
    delay (500);
    Serial.print (".");
  }
  Serial.println("");
  Serial.println("Connection Successful");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());           // Getting the IP address
  Serial.println("Type the above IP address into browser search bar"); 
  server.begin();                           // Starting the server
  digitalWrite(relay_pin, LOW);           // switch i AC

  //This initializes udp and transfer buffer
  udp.begin(udpPort);
}

void loop() 
{
  uint8_t buffer[50] = "";
  //processing incoming packet, must be called before reading the buffer
  udp.parsePacket();
  //receive response from server, it will be HELLO WORLD
  if(udp.read(buffer, 50) > 0){
    Serial.print("Recevied UDP: ");
    Serial.println((char *)buffer);
    String UdpMsg ((char *)buffer);
  }

  //////// UDP IF leri ///////////
  if ( UdpMsg == "relay01_off" ) {        // Equal strings
    digitalWrite(relay_pin, HIGH);
    Serial.print ("You!\n");
  }

}

1 Ответ

2 голосов
/ 09 июня 2019

Кажется, вы создаете вторую переменную UdpMsg в:

  if(udp.read(buffer, 50) > 0){
    Serial.print("Recevied UDP: ");
    Serial.println((char *)buffer);
    String UdpMsg ((char *)buffer); // <--- 2nd UdpMsg, released after 'if' clause
  }

Пока UdpMsg в этой строке:

if ( UdpMsg == "relay01_off" )

относится к первому, глобальному, который сохраняет свое начальное значение "12345".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...