Go Down

Topic: Problema , gestione seriale con "Monitor seriale " di arduino (Read 576 times) previous topic - next topic

Frenkj

Salve,
sto cercando di fare un programma su arduino uno rev3, in pratica attraverso l'interfaccia "Monitor seriale" , vorrei scrivere un vettore binario variabile (solo 0 e 1) e salvarlo in una vettore globale su arduino, e poi in base a un certo "comando" ( tipo "get" "set", cmq di lunghezza variabile) sempre dato attraverso "monitor seriale", eseguire delle manipolazioni sul vettore precedentemente acquisito.
Ho fatto questa bozza di codice che ovviamente non funziona :(
Code: [Select]

//variabili globali
int vett[5]; //Array in cui salvo i bit letti
int inBit=0;
int num=5;
char inCommand[10]; // lo faccio un pò più grande

// attivazione HW arduino
void setup() {
   Serial.begin(9600); // apro la seriale
   delay(1000); //attendo
   Serial.println("Pronto,immetti 5 bit:");
}

//programma principale
void loop() {
//variabili locali
int i=0;
int index=0;
   if (Serial.available() >=0) { //controllo se c'è qualcosa (>= 0)in arrivo sulla seriale
   inBit = Serial.read(); //leggo un intero proveniente dalla seriale e lo salvo in inBit
     while (inBit !=2){ // finché inBit è diverso da 2 (e questo finché non lo immetto io da seriale tramite il monitor seriale di arduino)
                        // leggo l'intero proveniente dalla seriale e lo salvo nel posto "i" del vettore "vett"
          inBit = Serial.read();
          vett [i] = int(inBit);  //NB ho messo "int" ma in realtà la stringa che ricevo dal monitor di arduino è una stringa
                          //binaria quindi penso si possa usare anche: "vett [i] = bit(inBit);"
  i=i+1;
     }
     // una volta riempito il vettore lo scrivo sulla seriale in uscita ( e lo dovrei vedere sempre tramite il monitor seriale di arduino)
     Serial.println("la stringa binaria immessa è");
      for (int i=0; i<num; i++){
          Serial.println(vett[i]);
     }
     
Serial.println("ora immetti un comando:"); 

if(index < 6)
char inChar;
       {
           inChar = Serial.read();
           inCommand[index] = inChar;
           index++;
       }
 
     switch (inCommand) { // a questo pto in base a cosa digito sceglie tra uno dei seguenti casi e
                          // manipola il vettore.
         
       case "pippo":
       // mi restituisce il numero di zeri della stringa binaria
         break;
       case "pluto":
       // mi restituisce il numero di uno
         break;
     }
// scrive in uscita il vettore modificato
     Serial.println("il vettore manipolato è");
      for (int i=0; i<num; i++){
          Serial.println(vett[i]);
   }
 
     }
}


Sicuramente il problema è che il lo "switch" non interpreta la stringa letta, potrei fare il tutto (credo) anche con un "if" e una
"strcmp", ma cmq rimangono due problemi:
1) non so come gestire la sequenza delle operazioni da far fare all'arduino ( sono un novizio e questo loop infinito mi crea nn pochi problemi)
2)l'acquisizione da seriale non credo si faccia così come da me implementata poiché non funziona

Scusate se il codice è orribile, ma l'ho scritto solo per far capire cosa vorrei fare cioè per far capire quale dovrebbe essere la sequenza delle operazioni che verrei eseguire.
Cmq se qualcuno mi può dare qualche delucidazione su come acquisire una "parola" o un vettore da Monitor seriale sarebbe già una gran cosa.
Grazie in anticipo
 

leo72

Non puoi usare lo switch in quella maniera, switch..case funziona solo su numeri interi.

Go Up