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

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

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...

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.