Serial.read question ? solved; but why? ? (n00b)
hi
i set little 2x2 matrix of leds control "row column scanning".
works great far (in fact i'm proud since i'm new electronics , c programming)
as next step want control led sending serial 4 byte string ("1111" turn them on, "0001" turn off last 1 etc)
first read string code:
wich returned strange results:
1ÿÿÿ
111ÿ
then accidentally added delay (line 5):
what made working.
but why?
thanks mana
i set little 2x2 matrix of leds control "row column scanning".
works great far (in fact i'm proud since i'm new electronics , c programming)
as next step want control led sending serial 4 byte string ("1111" turn them on, "0001" turn off last 1 etc)
first read string code:
code: [select]
void getdata() {
if (serial.available() > 0) {
while (pointer < 4) {
buffer[pointer] = serial.read();
pointer++;
}
pointer = 0;
pxlwrite(buffer[0], buffer[1], buffer[2], buffer[3]);
serial.print(buffer[0]);
serial.print(buffer[1]);
serial.print(buffer[2]);
serial.println(buffer[3]);
}
}
wich returned strange results:
1ÿÿÿ
111ÿ
then accidentally added delay (line 5):
code: [select]
void getdata() {
if (serial.available() > 0) {
while (pointer < 4) {
buffer[pointer] = serial.read();
delay(1); //why necessary?
pointer++;
}
pointer = 0;
pxlwrite(buffer[0], buffer[1], buffer[2], buffer[3]);
serial.print(buffer[0]);
serial.print(buffer[1]);
serial.print(buffer[2]);
serial.println(buffer[3]);
}
}
what made working.
but why?
thanks mana
this problem:
what if "serial.available" returns "1"?
you read single character buffer, , next time call "serial.read" buffer empty, "-1". (the odd ÿ characters)
now, @ 9600 bps, 1 character takes on 1ms transmit.
your delay allows time receive next character before calling "serial.read".
i wouldn't rely on (it won't work if decide reduce line speed), need fix logic of reading available characters.
so, no, not solved, sorry.
code: [select]
if (serial.available() > 0) {
while (pointer < 4) {
buffer[pointer] = serial.read();
pointer++;
}
what if "serial.available" returns "1"?
you read single character buffer, , next time call "serial.read" buffer empty, "-1". (the odd ÿ characters)
now, @ 9600 bps, 1 character takes on 1ms transmit.
your delay allows time receive next character before calling "serial.read".
i wouldn't rely on (it won't work if decide reduce line speed), need fix logic of reading available characters.
so, no, not solved, sorry.

Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > Serial.read question ? solved; but why? ? (n00b)
arduino
Comments
Post a Comment