inviare insieme di caratteri modulo hc05

Salve a tutti,il seguente codice funziona perfettamente però è decisamente limitato,in quanto si limita con un singolo carattere ad attivare i relè d’uscita…quindi la variabile di tipo char dato non può contenere più di un carattere.per esempio anzichè usare il carattere A per abilitare il relè d’uscita,vorrei inviare dal cellulare al modulo hc 05 la parola luce…
un’idea potrebbe essere quella di creare un array di variabili char ( una stringa) e creare un ciclo for per confrontare il singolo carattere ricevuto e se il parsing ha esito positivo,esegue l’azione descritta…secondo voi è fattibile? oppure ci sono altre possibilità? grazie mille

#include <SoftwareSerial.h>


SoftwareSerial mySerial(10, 11); 

void setup()
{
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);


   mySerial.begin(9600); 
   delay(1000);
}


void loop()
{
   while (mySerial.available())
   {
       char dato= mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
       switch(dato)
       {
         case 'A':
         {
  digitalWrite(2, HIGH); // attivo il relè collegato al pin12
            mySerial.println("Relè 1 ON");
           break;
         }
         case 'a': 
         {
  digitalWrite(2, LOW); // Spengo il relè
           mySerial.println("Relè 1 OFF");
           break;
         }    
                  
                  case 'B':
         {
  digitalWrite(3, HIGH);
            mySerial.println("Relè 2 ON");
           break;
         }
         case 'b':
         {
  digitalWrite(3, LOW);
           mySerial.println("Relè 2 OFF");
           break;
         }    


         case 'C':
         {
  digitalWrite(4, HIGH);
            mySerial.println("Relè 3 ON");
           break;
         }
         case 'c':
         {
  digitalWrite(4, LOW);
           mySerial.println("Relè 3 OFF");
           break;
         }    
                  case 'D':
         {
  digitalWrite(5, HIGH);
            mySerial.println("Relè 4 ON");
           break;
         }
         case 'd':
         {
  digitalWrite(5, LOW);
           mySerial.println("Relè 4 OFF");
           break;
         }    
                  case 'E':
         {
  digitalWrite(6, HIGH);
            mySerial.println("Relè 5 ON");
           break;
         }
         case 'e':
         {
  digitalWrite(6, LOW);
           mySerial.println("Relè 5 OFF");
           break;
         }    
                  case 'F':
         {
  digitalWrite(7, HIGH);
            mySerial.println("Relè 6 ON");
           break;
         }
         case 'f':
         {
  digitalWrite(7, LOW);
           mySerial.println("Relè 6 OFF");
           break;
         }    
                  case 'G':
         {
  digitalWrite(8, HIGH);
            mySerial.println("Relè 7 ON");
           break;
         }
         case 'g':
         {
  digitalWrite(8, LOW);
           mySerial.println("Relè 7 OFF");
           break;
         }    
                  case 'H':
         {
  digitalWrite(9, HIGH);
            mySerial.println("Relè 8 ON");
           break;
         }
         case 'h':
         {
  digitalWrite(9, LOW);
           mySerial.println("Relè 8 OFF");
           break;
         }    
       }       
   } 
}

Quello di testare una intera stringa di caratteri è sicuramete fattibile, ma ... a che pro ? ... Solo quello di rallentare la trasmissione (dovendo trasmettere più caratteri) e di complicare inutilmente il codice.

Se l'App sul telefono è fatta bene, i bottoni riporteranno esattamente la funzione in modo chiaro ... ... che poi dietro, il programma, alla pressione, ad esempio, del bottone "Accendi Luce Corridoio", invia una sola 'C' e alla pressione del bottone "Spegni Luce Corridoio", invia solo una 'c' ... cosa ti cambia ? ? ? :o

Guglielmo

La questione è dettata dall'input : sarebbe davvero scomodo dover scrivere una parola lunga per abilitare l uscita,utilizzerei l app BTVoice che farebbe al posto mio l'azione,trasformando le parole dettate in testo con il TTS...spero abbia chiarito il dubbio.grazie!

... contento tu ::)

La risposta è comunque SI, puoi ricevere ovviamente quanti caratteri vuoi, metterli in una stringa e poi farne il parsing per cercare le parole chiavi per capire COSA dover ACCENDERE/SPEGNERE o cosa FARE ... ... una complicazione unica per una cosa che con un carattere avevi risolto :smiling_imp:

Possibile che non si può usare il "riconoscimento vocale" per poi generare un semplice codice di 1 carattere demandando tutta l'analisi al suddetto programma ?

Guglielmo

Quello che tu dici è lecito e sensato,ma se voglio abilitare un carico generico secondo te ricordo quale carattere pronunciare? Sarebbe poco intuitivo,ecco. E un ulteriore sfida per imparare,non sono così pigro da dover necessitare urgentemente questo.

dean9: Quello che tu dici è lecito e sensato,ma se voglio abilitare un carico generico secondo te ricordo quale carattere pronunciare?

... NO, non ci siamo capiti, rileggi bene quello che ho scritto ...

gpb01: Possibile che non si può usare il "riconoscimento vocale" [u]per poi generare[/u] un semplice codice di 1 carattere demandando tutta l'analisi al suddetto programma ?

Guglielmo

In pratica dando al programma android l input vocale sarà lui a dare come output il carattere,giusto?
se fosse così,non saprei dove agire…e nel caso in cui la connessione rallentasse troppo con il metodo che ho proposto,valuterei la tua idea.e teoricamente sarei limitato con il numero dei dispositivi pilotabili visto che il valore attribuito ad un carattere è limitato :smiley:

dean9:
In pratica dando al programma android l input vocale sarà lui a dare come output il carattere,giusto?

Si, intendevo questo … credo che sia possibile, ma ovviamente occorre programmare direttamente su Android con Andoid Studio o un prodotto similare ed interfacciarsi con le API per il riconoscimento vocale ::slight_smile:

dean9:
… sarei limitato con il numero dei dispositivi pilotabili visto che il valore attribuito ad un carattere è limitato

Si, beh … oddio …
… anche tolto qualche carattere di controllo, ti restano comunque oltre 250 possibili combinazioni :smiley: :smiley: :smiley:

Guglielmo