Come da oggetto, vorrei inviare la stringa ABC ad arduino.
Purtroppo Arduino legge solo la prima stringa e si mangai le altre.
Ho provato in mille modi diversi.
Un esempio di codice è:
....
inByte = Serial.read();
if (inByte == '#') {
while (pointer < 2) { // accumulate 6 chars
buffer[pointer] = Serial.read(); // store in the buffer
pointer++; // move the pointer forward by 1
}
Purtroppo buffer[0] e [1] restano vuoti.
Ho provato anche settando la porta in questo modo:
Grande uwefed,
mi hai risolto molto.
Purtroppo ora mi trovo di nuovo incartato.
Utilizzando quest codice:
// Example 08B: Arduino Networked Lamp
//
// Copy and paste this example into an empty Arduino sketch
int val = 0; // variable to store the value coming from the sensor
int btn = LOW;
int old_btn = LOW;
int state = 0;
char buffer[7] ;
int pointer = 0;
byte inByte = 0;
void setup() {
Serial.begin(9600); // open the serial port
}
void loop() {
// If the marker's found, next 6 characters are the colour
do {
if (Serial.available()) {
buffer[pointer] = Serial.read();
pointer++;
}
} while (pointer<4);
pointer = 0;
buffer[4]=0;
val = atof(buffer);
if (val == 1234)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}
e lanciando il comando da terminale
echo "1234" > /dev/ttyUSB0
Il risultato è che intercetta 1234 correttamente ma solo una volta ogni 4
Ho provato ad inviargli delle stringhe diverse e il led non si accende mai.
Ho provato ad inviare stringhe più lunghe (che iniziano sempre per 1234) ma continua ad accendersi sempre una ogni quattro.
Qundi il problema no è nella stringa, bensì nel loop.
ciao jumpingj
A me funziona perfettamente e ogni volta. Devo dire che ho win XP come sistema operativo e uso come terminale quello del IDE.
Il mio dubbio: Il terminale manda come ultimo carattere un "carrige return" e/o un "line feed"?
Hai provato di usare il terminale del IDE o questo non é possibile con Linux?
Per una ricerca di errore rimanda sulla seriale i dati che ti arrivano.
Per incominciare aggiungi dopo la riga
val = atof(buffer);
questo
Serial.println(val);
e vedi che numero Ti ritorna.
Come secondo passo per veder poi i singoli caratteri convertili in numero e spediscili al terminale:
dopo buffer[pointer] = Serial.read();
aggiungi:
val= int( buffer[pointer]);
Serial.print(val); Serial.print(" ");
cosi vedrai il valore ashii del carattere che mandi.
Dovresti trovare: 49 50 51 52 1234
Ciao Uwe
codice completo:
// Example 08B: Arduino Networked Lamp
//
// Copy and paste this example into an empty Arduino sketch
int val = 0; // variable to store the value coming from the sensor
int btn = LOW;
int old_btn = LOW;
int state = 0;
char buffer[7] ;
int pointer = 0;
byte inByte = 0;
void setup() {
Serial.begin(9600); // open the serial port
}
void loop() {
// If the marker's found, next 6 characters are the colour
do {
if (Serial.available()) {
buffer[pointer] = Serial.read();
val= int( buffer[pointer]);
Serial.print(val); Serial.print(" ");
pointer++;
}
} while (pointer<4);
pointer = 0;
buffer[4]=0;
val = atof(buffer);
Serial.println(val);
if (val == 1234)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}
ciao jumpingj
non sono un genio, ho solo un po di esperienza nella ricerca guasti, sopratutto elettronici, elettrotecnici ecc dato dal mio lavoro di tecnico manutentore su tante attrezzature diverse e di tanti produttori diversi.
La cosa piú semplice é che non leggi 4 carateri ma 5.
Poi se ho capito il dato lo dai in questo momento con un terminale ma alla fine l'origine del dato trasmesso sará diverso.
Ciao Uwe