Go Down

Topic: inviare parole ad Arduino in rete [RISOLTOOOO] (Read 1 time) previous topic - next topic

nid69ita

Logica: prova a metterti nei panni dei computer. Invii un comando e lo riconosce, perciò stringa="Accendi".
Come hai intuito, non azzeri la stringa perciò al prossimo carattere ricevuto, stringa sarà "Accendi"+altro carattere.
Non conosco bene classe String di Arduino. Credo che stringa="" dovrebbe azzerarla.
Code: [Select]

   if (stringa=="accendi"){
    digitalWrite(13, HIGH);
   stringa="";
    }
    else if(stringa=="spegni"){
    digitalWrite(13, LOW);
   stringa="";
    } 


In linea generale poi sarebbe anche bene avere un contatore per evitare di aggiungere caratteri a stringa fino ad esaurire la memoria.
Se non mandi mai un comando valido, stringa diventerà sempre + grande fino ad esaurire la poca memoria di Arduino.
Se contatore>10 per esempio azzeri comunque la stringa.
my name is IGOR, not AIGOR

nid69ita

Sei tu a stabilire le regole dei comandi tra chiamante e ricevente?
Se si, in linea generale, secondo me, sarebbe meglio usare un singolo carattere. 1 char = 255 comandi possibili.
Molto più pratico che non delle parole. A meno che non sia un umano a scrivere i comandi (per cui dovresti anche fare attenzione
alle maiuscole/minuscole)
my name is IGOR, not AIGOR

matt-korban

ok adesso proverò a resettare le stringhe... provo proprio ora...

no, aspetta.... con un solo char posso inviare 255 valori diversi e quindi 255 comandi diversi???? ma dai....cioè allora nelle prove che avevo fatto devo aver sbagliato qualcosa!

matt-korban

appena provato con stringa=" "; ma niente... non cambia ancora di stato... vorrei fare anche il contatore come mi hai detto tu... poi magari ci provo. Deve contare i caratteri o cosa?  perchè se metto  if(stringa>10)  non gli piace...

nid69ita

Si, naturalmente devi contare i caratteri. C'e' anche il comando length() per sapere la lunghezza di stringa. 
if(stringa.length()>10) //allora azzero la stringa
Per azzerare la stringa, non sò come fare. Hai provato comunque a fare stringa="" e poi a stamparla sul monitor?
Code: [Select]

if (stringa=="accendi"){
digitalWrite(13, HIGH);
Serial.println(stringa);  //stampa "accendi"
stringa="";
Serial.print(stringa);
Serial.println("***");  //non dovrebbe esserci nulla tra accendi e ***
}


Forse per azzerare la stringa:
stringa=String();
my name is IGOR, not AIGOR

lesto


appena provato con stringa=" "; ma niente... non cambia ancora di stato... vorrei fare anche il contatore come mi hai detto tu... poi magari ci provo. Deve contare i caratteri o cosa?  perchè se metto  if(stringa>10)  non gli piace...


attento non " " (con lo spazio) ma "" (senza spazio)
altrimenti ti ristrovi
" accendi" che è diverso da "accendi"
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

matt-korban

ho provato sia con lo spazio che senza... ora faccio le altre prove che mi avete consigliato.... tra poco l'esito...
zon von zon von zon von (violini da suspance)...

matt-korban

HAAAAAAA HAHAHAHAH   SEEEEEEEEEEEE   FUNZIOOOOONAAAAAA  " SIII  PUòòò  FAREEEEEE"

ok dopo questo breve momento di panico vi ringrazio per tutto l'aiuto dato, siete mitici... limando un tantino i vostri consigli e facendo varie prove ecco finalmente il codice FUNZIONANTE!!!   :smiley-mr-green: :smiley-mr-green: :smiley-mr-green:

adesso devo provare a inviare il comando premendo un pulsante... pulsante A=accendi, pulsante B=spegni     oppure   premo una volta=accendi
premo un altra volta = spegni... ci proverò... grazie mille ragazzi!

Code: [Select]

#include <Wire.h>
String stringa;


void setup()
{
  Wire.begin();       
  Serial.begin(9600);
  pinMode(13, OUTPUT); 
}


void loop()
{
  Wire.requestFrom(2, 10);          // richiesta da slave (indirizzo, e numero byte)
  while(Wire.available())             // se sono disponibili dati allora:
  {
    char A=Wire.read();              // leggi dal Wire
    stringa += A;                        // aggiungili alla stringa di char creata in precedenza
    if (stringa=="accendi")  {        // se la stringa è uguale ad "accendi" allora:
    digitalWrite(13, HIGH);         // accendi il led
    }
    else if(stringa=="spegni")  {     // altrimenti se la stringa è uguale a "spegni"
    digitalWrite(13, LOW);          // spegni il led
    }
  }
  stringa=String();                    // azzera il contenuto della stringa
  if(stringa.length()>10)  {        // (solo per sicurezza) se la stringa contiene più
  stringa=String();                   // di 10 caratteri allora azzerala comunque
  }
}

Go Up