Skocz do zawartości

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


northrop

Pomocna odpowiedź

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 
{
}
}
}
}

 

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

19 godzin temu, northrop napisał:

Dam znać jak przetestuję

Jeszcze inna możliwość: 

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

 

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.