Pages: [1]   Go Down
Author Topic: Invio e ricezione seriale  (Read 483 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve ragazzi,

vorrei usare arduino come scheda di acquisizione dati, ma allo stesso tempo avrei bisogno di inviare alla scheda comandi di "attuazione".

Ho caricato il seguente codice sulla board:

int inByte=255;

void setup()
{
  pinMode(9,   OUTPUT);
  analogWrite(9,inByte);
  Serial.begin(9600);
}

void loop()
{
if (Serial.available()>0)
{
inbyte=Serial.read();
analogWrite(10,inByte);
}
Serial.println(inByte);

}

Ora finchè uso processing, o minicom è tutto ok.. accendo e spengo il led e mi torna indietro il valore corrente di inByte.
Se uso matlab al primo dato inviato la scheda smette di inviare dati via seriale.
Qualcuno sa darmi una risposta?
(non sono interessato ad usare lo sketch di Matlab per arduino).

Su matlab c'è il seguente codice:

Seriale = serial('/dev/ttyUSB0');
set(Seriale,'BaudRate', 9600);
fopen(Seriale);

una volta aperta la comunicazione da command window lancio:
fscanf(Seriale);

ricevo il valore di inbyte ed i led sulla board lampeggiano.

appena invio
fwrite(Seriale,10);

il led cambia stato, ma in ricezione non leggo più nulla. La scheda continua a ricevere segnali in ingresso, ma non invia nulla.

Attendo vostre risposte!

Ciao ciao

Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20296
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
void loop()
{
if (Serial.available()>0)
{
inbyte=Serial.read();
analogWrite(10,inByte);
}
Serial.println(inByte);
}
Cósí mandi l' ultimo dato ricevuto in una ricezione multipla (piú byte uno dopo l' altro) e la ripeti finche arriva un nuovo dato sulla seriale. È voluto?
Il LED lo hai messo sul pin 9 o sul pin 10 o su entrambi?
Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Uwe,

ho incollato solo una parte del programma... ed ho sbagliato.. comunque è tutto sulla porta 9 comandata in pwm.
Il flusso continuo di dati in uscita dall'arduino è voluto.
Mettiamola così, facciamo che Serial.println(inByte) debba inviarmi dei dati rilevati da un trasduttore.
L'elaborazione dei dati prelevati dal trasduttore deve poi controllarmi l'accensione di un led.
Ora il codice postato non fa questo ovviamente, però rende l'idea delle prove fatte, e sopratutto dello scopo!

Grazie della risposta.
Sei sempre gentilissimo!
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I comandi in arrivo dal PC sono a singolo byte o possono essere multibyte ?

nel primo caso è semplicissimo:

if ci sono caratteri disponibili
    ch = leggi carattere
    esegui il comando in base al carattere (usa l'istruzione switch)
endif

Per ogni comando previsto scrivi una funzione che lo esegue.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao tuxduino,

il problema è un'altro. La seriale si blocca nel momento in cui invio un dato.. non riesco a ricevere più dati da arduino.. riesco solo ad inviarglieli!
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao tuxduino,

il problema è un'altro. La seriale si blocca nel momento in cui invio un dato.. non riesco a ricevere più dati da arduino.. riesco solo ad inviarglieli!

Se stai usando questo

Quote
void loop()
{
    if (Serial.available()>0)
    {
        inbyte=Serial.read();
        analogWrite(10,inByte);
    }
    Serial.println(inByte);
}

lo credo bene!

Apri il serial monitor e capirai... smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se apro il serial monitor funziona tutto bene... è matlab che non funziona!
Logged

Pages: [1]   Go Up
Jump to: