Skocz do zawartości

W jaki sposób porównać ze sobą zmienne string?


Pomocna odpowiedź

Napisano

Cześć. Mam problem z poniższym kodem. To urządzenie ma odbierać dane wysyłane przez lorę. Na serial port przychodzą następujące dane: Screenshot_5.thumb.png.b8fe6c88fcbc2c52180de412365bc9f7.png

Wiadomość LED1ON ma uruchomić wbudowaną diodę 13 na arduino.

Wiadomość ta przychodzi w zmiennej (rc.data).

Próbuję porównać tą zmienną z tekstem w taki sposób:

 if (rc.data.equals ("#LED1ON"))
    {
      digitalWrite(LED_BUILTIN, HIGH);
    }
    else
    {
     digitalWrite(LED_BUILTIN, LOW);
    }

Ale to niestety nie działa. W jaki sposób można to zrobić?

Poniżej cały kod:

#define ENABLE_RSSI true 

#include "Arduino.h" 
#include "LoRa_E220.h" 



#include <SoftwareSerial.h> 
SoftwareSerial mySerial(3, 2); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX 
LoRa_E220 e220ttl(&mySerial, 6, 4, 5); // AUX M0 M1 



void setup() { 
  pinMode(LED_BUILTIN, OUTPUT);
  
  Serial.begin(9600); 
  delay(500); 
  

  // Startup all pins and UART 
  e220ttl.begin(); 

  Serial.println("\n""Oczekuje na pierwszą wiadomość!"); 
  } 

void loop() { 

   
  if (e220ttl.available()>1) { 
  //  Serial.println("Wiadomośc odebrana!"); 

    // read the String message 
#ifdef ENABLE_RSSI //s
  ResponseContainer rc = e220ttl.receiveMessageRSSI(); 
#else 
  ResponseContainer rc = e220ttl.receiveMessage(); 
#endif 
  // Is something goes wrong print error 
  if (rc.status.code!=1){ 
    Serial.println(rc.status.getResponseDescription()); 
  }else{ 
    // Print the data received 
  //  Serial.println(rc.status.getResponseDescription()); 
    Serial.println(rc.data);  //tutaj pokazana jest treść wiadomości przychodzącej 
    
    if (rc.data.equals ("#LED1ON"))
    {
      digitalWrite(LED_BUILTIN, HIGH);
    }
    else
    {
     digitalWrite(LED_BUILTIN, LOW);
    }
   
#ifdef ENABLE_RSSI 
    Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
    Serial.print("\n");

    
    
#endif 
{
}
}
}
}

 

(edytowany)

Nie mam dostępu do arduino, żeby przetestować, ale masz racje, program napisany w c# wysyła na port szeregowy: port.Write("#LED1ON\n") i to jest zapewne cała przyczyna wszystkich niepowodzeń. Dam znać jak przetestuję, dzięki kolego 🙂

 

Edytowano przez northrop
Lepsza analiza kodu źródłowego
19 godzin temu, northrop napisał:

Dam znać jak przetestuję

Jeszcze inna możliwość: 

if (rc.data.indexOf("#LED1ON") == 0) ...

 

  • Lubię! 1
  • Pomogłeś! 1

Przetestowane, Twój sposób działa świetnie. Próbowałem to jeszcze zrobić tak:

 commandString = rc.data.substring(1,5);

i też zadziałało. Wielkie dzięki za pomoc 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...