Cruscotto in MitAPP Inventor

Comisworld

Nuovo Utente
8 Lug 2016
4
0
1
34
Salve a tutti, sono nuovo del forum.

Ho un grosso problema.
Con Arduino e Mit App inventor, sto cercando di realizzare una piccola domotica.
In sostanza su arduino ho installato vari sensori, temperatura, umidità, luminosità, fumo, controllo carichi ecc, e poi ho realizzato una app Android, con la quale vedere i valori di questi sensori.
Ma ecco il problema.
Non riesco a collocare nelle etichette i singoli valori.
Es: Lettura sensore 1 (sensore umidità) = 20% - Lettura sensore 2 = 15°C ecc.

upload_2016-7-8_17-13-17.png


Vi mostro come ho costruito il sistema

1) Sezione Arduino:
più o meno per tutti i sensori ho realizzato una stringa simile:

Serial.print("Consumo" ); // STAMPA VALORE CONSUMI
Serial.print(Amps,2); // MOSTRA IL VALORE IN A
Serial.print("A - ");
Serial.print(volts,1); // MOSTRA IL VALORE IN A
Serial.print("V");
Serial.println ();
delay(100); // RITARDO TRA UNA LETTURA E L'ALTRA

La stringa dovrebbe risultare Consumo xA - xV ed essere scritta in una di quelle etichette viste prima.

Sezione MitApp:
Ho realizzato un blocco come questo:

upload_2016-7-8_17-10-12.png


Ma le cose non mi tornano. Non riesco a dividere la stringa dei segnali in ingresso in tante piccole sezioni per compilare le etichette.
upload_2016-7-8_17-10-12.png
upload_2016-7-8_17-13-17.png


Potete Aiutarmi?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
suggerimento da "amatore" non da "conoscitore",

(arduino) stai inviando il messaggio del sensore in piccole parti, con successive "Serial.print"
(client) la ricezione potrebbe attivarsi e terminare prima che l'intera stringa "Consumo xA - xV"+ln sia stata ricevuta interamente
(ciascuna "Serial.print" potrebbe aprire il dialogo con un "inizio tx" e chiudere con un "fine tx", se così fosse parte del messaggio sarebbe perso)
mi sembra che il client sia impostato per ricevere 1 sensore specifico (salvo menu a tendina) cerca di verificare la completezza della stringa ricevuta

hai messo "dividi testo" prima della sua ricezione ... non mi convince, anche qui cercherei di capire come agisce "RiceviTesto", legato anch'esso alla completezza della stringa ricevuta

spero di non sprecare il tuo tempo avendo scritto qualche stupidata



 

Comisworld

Nuovo Utente
8 Lug 2016
4
0
1
34
Ciao e grazie per la risposta.
Ho provato alcune tue soluzioni, ma non sono riuscito a risolvere il problema.
Purtroppo ho 13 "Serial.print" sparsi per il codice e devo riportarli su 13 etichette diverse.
La questione del dividi testo prima della ricezione, purtroppo è un passaggio obbligato che devo fare.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
non è importante che tu abbia 13 "serial.print" per riempire altrettante etichette,
ma è importante inviare ciascuna "etichetta" con una sola "serial.print"
ovvero evitare lo "spezzettamento" come hai fatto con questa etichetta
Codice:
Serial.print("Consumo" ); // STAMPA VALORE CONSUMI
Serial.print(Amps,2); // MOSTRA IL VALORE IN A
Serial.print("A - ");
Serial.print(volts,1); // MOSTRA IL VALORE IN A
Serial.print("V");
Serial.println ();
proverei a costruire l'intera stringa e solo dopo la invierei all'app con una sola "serial.print"
 

Comisworld

Nuovo Utente
8 Lug 2016
4
0
1
34
Escludendo questa parte del software/firmware, per le altre come posso risolverle?
Sono incartato in questo punto fondamentale del progetto.
Ti scrivo una parte del codice

(Serial.print ("AVVIO CICLO"); Serial.println ( );
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
prova ad inserire "etichette" semplici nel programma di arduino, per esempio
Serial.println ("AVVIO CICLO");
Serial.println ("Consumo 1.23A - 230.0V");
ecc. ...
in modo da verificare che il dialogo "seriale" sia corretto

verifica che su arduino i parametri della "seriale" e del "Bluetooth", se devono essere inseriti separatamente, siano congrui tra di loro, ho visto che esiste
Serial.begin(9600);
forse in questa istruzione è necessario inserire, oltre alla velocità, anche il numero di bit ed il bit di stop
 

Comisworld

Nuovo Utente
8 Lug 2016
4
0
1
34
Si abbiamo già testato il collegamento seriale e quello funziona correttamente. L'unico problema che abbiamo è capire come dividere
Serial.println ("AVVIO CICLO");
Serial.println ("Consumo 1.23A - 230.0V");
ecc. ...

in varie caselle all'interno della app.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ok, superata la trasmissione seriale,

sto cercando di capire la logica dello schema (MitApp) che hai postato e come si "allaccia" alla trasmissione di arduino,

prendendo questo esempio,
Serial.println("Consumo 1.23A - 230.0V");

non riesco a farlo "combaciare" all'app

in particolare alla riga 3, "imposta lettura sensore 3", sensore 3 (riferito all'esempio) è "consumo" o "1.23A" o "230.0V" ?

perchè, seppur ben ricevuto attraverso la seriale, "ln" sta alla fine del messaggio, che se preso come "consumo" può andare bene, ma se presi singolarmente i valori, questi non sono contemplati dalla logica della app

così come alla riga 7 e successive, "imposta lettura sensore 1", non lo vedo seguito dalle operazioni di lettura

scusa, da profano, non vedo similitudine nella sequenza delle operazioni

la logica della app, mi farebbe pensare che, sia meglio inviare i valori dei sensori uno alla volta
Serial.println("Device1, corrente 1.23A");
Serial.println("Device1, tensione 230.0V");
che con "ln" alla fine, verrebbero ben identificati
 

Discussioni simili