Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Sistemi integrati - problema risposta arduino su serial dopo comando
Forum - Sistemi integrati - problema risposta arduino su serial dopo comando

Avatar
alex1995 (Normal User)
Expert


Messaggi: 294
Iscritto: 27/01/2011

Segnala al moderatore
Postato alle 7:58
Venerdì, 22/03/2019
salve sto cercando di fare 2 arduino mega come slave usando json su seriale ma io scrivo il comando ma arduino non risponde questo è il sorgente come mai?

Codice sorgente - presumibilmente C#

  1. char byteBuffer;
  2. String commandBuffer;
  3.  
  4. void setup()
  5. {
  6.         pinMode(13, OUTPUT);
  7.         Serial.begin(9600);
  8. }
  9.  
  10. void loop()
  11. {
  12.         if((Serial.available()) && (String(Serial.read()) == "["))
  13.         {
  14.                 while(Serial.available())
  15.                 {
  16.                         byteBuffer = (char)Serial.read();
  17.                         if(String(byteBuffer) != String("]"))
  18.                         {
  19.                                 commandBuffer += String(byteBuffer);
  20.                         }
  21.                         else
  22.                         {
  23.                                 break;
  24.                         }
  25.                 }
  26.         }
  27.  
  28.                 if(String(commandBuffer) == String("[01131]"))
  29.                 {
  30.                         digitalWrite(13, HIGH);
  31.                         delay(10);
  32.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  33.                         commandBuffer = "";
  34.                 }
  35.                 if(String(commandBuffer) == String("[01130]"))
  36.                 {
  37.                         digitalWrite(13, LOW);
  38.                         delay(10);
  39.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  40.                         commandBuffer = "";
  41.                 }
  42.  
  43. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:46
Venerdì, 22/03/2019
Ma commandBuffer può contenere di tutto e di più dato che accumuli sempre


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
alex1995 (Normal User)
Expert


Messaggi: 294
Iscritto: 27/01/2011

Segnala al moderatore
Postato alle 9:31
Venerdì, 22/03/2019
dopo aver inviato la risposta lo svuoto comunque ho aggiunto questo e non funziona lo stesso:

Codice sorgente - presumibilmente C#

  1. char byteBuffer;
  2. String commandBuffer;
  3.  
  4. void setup()
  5. {
  6.         pinMode(13, OUTPUT);
  7.         Serial.begin(9600);
  8. }
  9.  
  10. void loop()
  11. {
  12.         commandBuffer = "";
  13.         if((Serial.available()) && (String(Serial.read()) == "["))
  14.         {
  15.                 while(Serial.available())
  16.                 {
  17.                         byteBuffer = (char)Serial.read();
  18.                         if(String(byteBuffer) != String("]"))
  19.                         {
  20.                                 commandBuffer += String(byteBuffer);
  21.                         }
  22.                         else
  23.                         {
  24.                                 break;
  25.                         }
  26.                 }
  27.         }
  28.  
  29.                 if(String(commandBuffer) == String("[01131]"))
  30.                 {
  31.                         digitalWrite(13, HIGH);
  32.                         delay(10);
  33.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  34.                         commandBuffer = "";
  35.                 }
  36.                 if(String(commandBuffer) == String("[01130]"))
  37.                 {
  38.                         digitalWrite(13, LOW);
  39.                         delay(10);
  40.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  41.                         commandBuffer = "";
  42.                 }
  43.  
  44. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:55
Venerdì, 22/03/2019
Oltre al fatto (necessario) di dover svuotare la stringa del comando, devi capire, quando termini di riceverla, cosa hai al suo interno, magari visualizzandola.

Insomma devi fare un po' di debugging.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
alex1995 (Normal User)
Expert


Messaggi: 294
Iscritto: 27/01/2011

Segnala al moderatore
Postato alle 9:12
Lunedì, 25/03/2019
ho provato ma a quanto pare non legge niente comunque ho risolto così:

Codice sorgente - presumibilmente Sistemi integrati

  1. void setup()
  2. {
  3.         Serial.begin(9600);
  4.         pinMode(13, OUTPUT);
  5. }
  6.  
  7. void loop(){
  8.  
  9.   while(Serial.available() > 0 )
  10.   {
  11.         String str = Serial.readString();
  12.             if(str == "[1131]\n")
  13.             {
  14.                 digitalWrite(13, HIGH);
  15.                         delay(10);
  16.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  17.                 }
  18.             if(str == "[1130]\n")
  19.             {
  20.                         digitalWrite(13, LOW);
  21.                         delay(10);
  22.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  23.                 }
  24.         }
  25. }


PM Quote
Avatar
alex1995 (Normal User)
Expert


Messaggi: 294
Iscritto: 27/01/2011

Segnala al moderatore
Postato alle 9:14
Lunedì, 25/03/2019
ho provato ma a quanto pare non legge niente comunque ho risolto così:

Codice sorgente - presumibilmente Sistemi integrati

  1. void setup()
  2. {
  3.         Serial.begin(9600);
  4.         pinMode(13, OUTPUT);
  5. }
  6.  
  7. void loop(){
  8.  
  9.   while(Serial.available() > 0 )
  10.   {
  11.         String str = Serial.readString();
  12.             if(str == "[1131]\n")
  13.             {
  14.                 digitalWrite(13, HIGH);
  15.                         delay(10);
  16.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  17.                 }
  18.             if(str == "[1130]\n")
  19.             {
  20.                         digitalWrite(13, LOW);
  21.                         delay(10);
  22.                         Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
  23.                 }
  24.         }
  25. }


PM Quote