comunicazione seriale con matlab

Salve a tutti,
sto facendo comunicare matlab con arduinoDue via seriale. In particolare da matlab inserisco un numero da tastiera che su arduino uso per controllare un motore (MG995 della TowerPro).
La comunicazione va a buon fine se la cifra che digito è solo una scrivendo

int vall;
vall=Serial.read();

Ho provato a leggere più cifre dalla seriale(in particoalre me ne servono 3) con questo codice

int vet[2];
    int val;
    for (int i=0;i<3;i++){
      
    vall=Serial.read();
    vet[i]=vall;
 
    
    }
val=vet[0]+(vet[1]*10)+(vet[2]*100);

Qualcun può dirmi dov’è il problema?
Grazie mille

Buona sera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

... dopo che avrai fatto quanto su richiesto ... prova a dare un'occhiata al metodo available() della classe Serial :wink:

Guglielmo

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
int pulselen;
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

void setup() 
{
  
  Serial.begin(9600);
   pwm.begin();
  
  pwm.setPWMFreq(50);
    yield();
}
uint8_t servonum=0;
void loop() 
{
    
   if(Serial.available()>0) // if there is data to read
   {
    
    pulselen=Serial.read(); // read data
   

     pwm.setPWM(servonum, 0, (pulselen));
     delay(1000);
    pwm.setPWM(servonum, 0, 90);
  }
}

Ho provato a cambiare il codice inserendo anche la funzione available, ma continua comunque a dare problemi :slightly_frowning_face: sapreste aiutarmi?

... guarda che comunque, con la read(), sempre UN byte alla volta leggi, quindi, se spedisci TRE caratteri, devi continuare a girare in un ciclo fino a quando ci sono caratteri availables. E fai anche attenzione a COME li ricevi ... probabilmente come caratteri ASCII ... ::slight_smile:

Perché non dedichi un po' di tempo a studiare meglio i metodi della classe Serial? ... perché è evidente con NON gli hai dedicato il tempo necessario.

Guglielmo

P.S.: E perché NON fai debug? Esempio inserendo una Serial.print() dopo la Serial.read() così vedi esattamente cosa stai ricevendo ...

eh okay ci siamo arrivati, ma il ciclo for ad esempio non funziona… comunque l’essenziale l’abbiamo studiato e molte cose scritte su internet non funzionano. Non è che potresti scriverci un codice per aiutarci?
Non posso fare il debug con la seriale di arduino perchè è occupata dal matlab.

Jhonny1064:
... Non è che potresti scriverci un codice per aiutarci?

Purtroppo qui non funziona così :confused: ... prova a rileggere con attenzione il punto 16.1 del REGOLAMENTO (... che avevo chiesto di leggere con MOLTA attenzione) ... ::slight_smile:

Il "for", come lo avevi fatto prima, certo che NON andava ... non controllavi se c'erano caratteri da leggere ... unendo le varie tecniche si arriva alla lettura.

Poi ... ci sono i metodi per gli "svogliati" che NON hanno voglia di studiare/imparare :smiling_imp: ... basta guardare parseInt(), parseFloat(), readString(), ecc. ecc. e si ha la "pappa fatta" ... :stuck_out_tongue_closed_eyes:

Comunque, se ti sforzi e fai una ricerca su Google per "Arduino leggere seriale" ... escono appena 64'000 e passa risultati ... hai voglia ad esempi ... :smiley:

Guglielmo