Pages: 1 [2]   Go Down
Author Topic: inviare parole ad Arduino in rete [RISOLTOOOO]  (Read 1591 times)
0 Members and 1 Guest are viewing this topic.
ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4802
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

my name is IGOR, not AIGOR

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4802
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

my name is IGOR, not AIGOR

0
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4802
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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();
Logged

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10463
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
  }
}
Logged

Pages: 1 [2]   Go Up
Jump to: