Parlare con Arduino attraverso il monitor seriale

Allora ragazzi...sto imparando solo ora a capire Arduino...e in questi giorni mi è venuta l'idea di parlare con Arduino attraverso il monitor seriale...invece che installare un display che mi sembra ora una cosa troppo difficile per adesso..visto che sto ancora imparando..ho iniziato a scrivere un codice...e prima di iniziare a fare delle vere e proprie conversazioni volevo iniziare con delle semplici operazioni..anche basilari senza radice quadrata..o %...questo è il codice che ho iniziato a scrivere...

//parlare e fare operazioni con arduino attraverso il monitor seriale
char numero = 0;
char numero2 = 0;
char segno = 0;



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //apro le connessioni tra arduino e il pc
  

}

void loop() {
  // put your main code here, to run repeatedly:
  numero = Serial.read();
  Serial.print("Ciao inserisci un numero");
  Serial.println(numero);
  delay(500);
  Serial.println("Ora inserisci un segno");
  segno =

Ho iniziato a intopparmi con l'uso del Serial.read, questo perche quando gli ho detto che la variabile numero è uguale al numero digitato da tastiera mi è sorto un dubbio...dopo io volevo riusare il serial Read per far inserire da tastiera il secondo numero e il segno...però se il primo numero è = al serial read...e anche il secondo(che dovrebbe essere il segno)..è uguale al serial Read...di conseguenza anche il primo numero mi diventa uguale al segno...e quando impostero il terzo numero...saranno tutti e 3 uguali...o sbaglio?..perfavore mi sto incasinando aiutatemi!!

mi sono perso nell' ultima frase.

allora...io ho creato una variabile "numero"..che sarà uguale al numero inserito sulla tastiera...quello che volevo fare io è che dopo aver messo quel numero..ci fosse stato anche un segno e un secondo numero..seguito da un risultato...cosi ho creato una variabile "segno"...che fosse uguale al segno inserito da tastiera...ascoltami però...se "numero"= a numero inserito da tastiera....e segno = a segno inserito da tastiera...grazie alla funzione serial read...queste variabili diventato uguali...perche pensaci...prima gli dico che numero= a qualcosa messo dalla tastiera...poi gli dico che segno = qualcosa inserito da tastiera...quindi diventano uguali...e quando gli andrò a dire che il secondo numero sarà uguale a qualcosa messo dalla tastiera..mi ritroverò 3 variabili con nomi diversi...e stesso valore...o sbaglio?...pensaci.

Facciamo un po' di chiarezza. Quando inserisco un valore, o meglio un char dal monitor seriale e premo invio questo viene inviato ad Arduino che si occuperà di archiviare il valore in un buffer che funziona come una coda. Quando eseguo Serial.read() questo mi restituisce si un byte ma allo stesso tempo lo elimina dal buffer. Per essere più precisi mi restituisce il primo valore arrivato disponibile, cioè che non sia ancora stato prelevato con un Serial.read().

quindi una volta che ho usato serial read posso tranquillamente riusarlo dopo senza che mi si incasinino le variabili?

Assolutamente, bisogna prestar attenzione all'effetto contrario, se arrivano troppi dati e il buffer si satura, Arduino inizierà a buttar via i successivi byte in arrivo.

okay..mi potresti dare qualche consiglio per il programma?..sono alle prime armi.

@skizzo, mi sorge un dubbio. Leggo che stai imparando la programmazione in C.
Stai seguendo un testo che insegna a programmare in C e stai facendo i primi esempi ?
Di solito quegli esempi sono pensati per un compilatore C che crea programmi per un computer con la console (terminale) e non per Arduino.
Se è così, per Windows puoi scaricare il free DevC++: Home - Dev-C++ Official Website

no volevo semplicemente creare un programma con cui fare operazioni o rispondere a semplici domande attraverso il monitor seriale di Arduino giusto per prenderci confidenza e in seguito passare a un display

NOoooooooooooooooooooo
Come cavolo si fa a consigliate DEV-CIOFECA++, esistono milioni di IDE più aggiornati e funzionanti! e diamine siamo nel 2015 e cerchiamo ancora di resciuscitare i morti! e che caspiterina!!!!

Per Windows esiste solo la retta via MS express, al massimo se siamo masochisti possiamo usare C::B + minGW.
Per i più smaliziati c'è il Borland o volendo direttamente l'Intel con l'ausilio di un editor di testo a proprio piacimento ed il tutto senza sborsare una lira! tutti! gratis!

vbextreme:
Per Windows esiste solo la retta via MS express, al massimo se siamo masochisti possiamo usare C::B + minGW.
Per i più smaliziati c'è il Borland o volendo direttamente l'Intel con l'ausilio di un editor di testo a proprio piacimento ed il tutto senza sborsare una lira! tutti! gratis!

Non posso che essere d'accordo, sicuramente i migliori compilatori C/C++ per windows sono quelli di Microsoft e di Borland, ora Embarcadero, tutto il resto è "spazzatura" :slight_smile:

Quindi, per un ragazzino che inizia e che deve fare solo dei piccoli programmini console per imparare le basi del C, gli si chiede di scaricare un visual studio microsoft pesante da 2 gb ?

nid69ita:
Quindi, per un ragazzino che inizia e che deve fare solo dei piccoli programmini console per imparare le basi del C, gli si chiede di scaricare un visual studio microsoft pesante da 2 gb ?

MS Visual C++ Express sono meno di 200 Mega complessivi.

io per adesso non mi voglio prolungare su C e C++ sul pc..voglio continuare con Wiring sul Arduino comunque grazie.

Skizzo, qui non si parla di linguaggio, qui si parla di imparare a programmare, il linguaggio passa in secondo piano.
Come ti è stato ricordato in altri topic non si impara cosi da un libro a programmare, ci vuole esperienza, esperienza nel battere la testa contro il ferro, e Arduino di ferro ne ha poco (se capisci cosa intendo). Se il tuo obbiettivo è imparare a programmare nulla di meglio del C su PC come linguaggio su cui sperimentare. Volendo potresti anche solo rifarti allo pseudo-codice e imparare un po' di logica matematica, ma lo pseudo codice rimane un codice non interpretabile, non avresti riscontri sugli errori. Il C è il linguaggio di piu basso livello ed essenziale ancora in largo uso oggi (escludiamo l'assembly, col quale prima di imparare a programmare si impara ad essere molto volgari). Quindi se ci tieni ad imparare a programmare dedicati al C, se invece la tua necessità didattica si ferma a saper far girare un motorino su Arduino rifatti agli sketch e dalle guide che trovi in giro e cerca di imparare da quelli, ma non credere che bastino per potersi ritenere un programmatore.

P.S. Si, Dev-C++ fa proprio schifo!

Vabbene capito.

@nid69ita:
gli si chiede di scaricare un visual studio microsoft pesante da 2 gb

Assolutamente no, ho indicato i migliori e un mio thread che linka una FAQ dove sono scritti innumerevoli compilatori e IDE.
Si potrebbe benissimo scaricare anche solo l'Intel e usare il comunissimo notepad, in alternativa anche il validissimo Digital Mars.
Oppure se si vuole rimanere nell'ambito del GCC si può scegliere Code::Blocks + il tdmmingw, anche se quest'ultima scelta non è proprio "salutare", il GCC è nato per sistemi nix e nonostante il fantastico porting che hanno fatto qualche problema lo risente.
Perché dunque non usare i giusti attrezzi?
Usare il minGW sotto windows è come svitare una vite torx con il cacciavite a stella, si fa ma non è l'attrezzo giusto.
È decenni che i compilatori sono COMPLETAMENTE GRATUITI ed esistono innumerevoli IDE che possono semplificare la vita, ad esempio C::B + il compilatore Intel sarebbe una buona scelta.

Non da dimenticare che esistono distro GNU/linux di dimensioni sotto al GB con già tutto l'occorrente, lo dico solo perché se si vuole imparare il c è un passo obbligatorio, ci si fanno le ossa....