Ik ben nieuw; hier en met Arduino Uno.
Ik volg daarom de al wat oudere podcasts van jeramy.
Bij podcast 6 komt een simpel serial voorbeeld aan de orde, waarvan de code is:
int ledPin = 13;
void setup()
{
//Create Serial Object
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop()
{
//Have the arduino wait to receive input
while (Serial.available() == 0);
//Read the Input
int val = Serial.read() - '0';
if (val == 1)
{
Serial.println("Led is On");
digitalWrite(ledPin, HIGH);
}
else if (val == 0)
{
Serial.println("Led is Off");
digitalWrite(ledPin, LOW);
}
else
{
Serial.println("Invalid!");
}
Serial.flush();
}
Heel simpel en logisch allemaal, alleen de serial flush werk niet, in die zin als in voer '10gek' krijg ik als uitvoer
led is on
led is of
invalid
invalid
invalid
terwijl ik had verwacht dat na lezing en uitvoer van het eerste karakter de buffer zou worden geleegd, en dus alleen de eerste regel zou worden uitgevoerd.
Op de podcast van Jeramy gaat het - met dezelfde code - wel goed. Ik weet alleen dat Flush() is gewijzigd. Ik gebruik UNO en Arduino 1.0.1.
Hans of is het Piet?
Welkom op het Nederlandstalige arduino forum.
En ja, ...... nieuw en al direct naar een van de grotere pijnpunten van Arduino.
Arduino heeft de functionaliteit van Serial.flush(); veranderd in 1.0. Niet iedereen was daar even tevreden mee.
Als je dus met Arduino 0023 aan de slag zou gaan zal die code werken zoals je verwacht.
Vanaf 1.0 smijt de flush de gegevens niet meer weg. Vandaar dat je
led is on
led is of
invalid
invalid
invalid
krijgt en niet de verwachte
led is on
krijgt.
In de flush documentatie staat
Waits for the transmission of outgoing serial data to complete. (Prior to Arduino 1.0, this instead removed any buffered incoming serial data.)
Ik hoop dat je hiermee bent geholpen.
Met vriendelijke groet
Jantje
Jouw antwoord is overeenkomstig wat ik elders lees. Maar dan houdt het op.
Wat is de oplossing ? Flush is naar mijn mening een absoluut noodzakelijke functie. Er moet wel een vervangende functie zijn, alleen al om de invoer te kunnen stoppen als een stopcode is waargenomen.
Bedankt.
Merk op dat je de seriële invoer niet zomaar kan stoppen. Vergelijk het met je in-bakje op het werk. Jij kan het legen, maar .... anderen (collega's noemen ze dat dan ) vullen het. En die anderen kan je niet (zomaar) stoppen.
Hetzelfde geldt voor seriële communicatie.
Bedankt. Ik zie nu in, dat ik het via de software moet oplossen. Het vervelende is alleen dat je als software maker geen eisen kan stellen aan de invoer zoals dat bij andere talen gaat. Net als op het werk, collega's gooien maar in het bakje IN, het enige wat je dan kan doen is in de stress schieten.
Ik ga nu maar weer verder met een ander projectje.
Kun je overigens een boek aanraden. De boekjes van Massimo Banzi en van Simon Monk heb ik gelezen. Ze waren leuk, maar theoretisch en praktisch toch wel iets te eenvoudig
Hans
Ikzelf ben geen boekenlezer en ervaren programmeur dus ik moet enkel elektronica leren (wat al moeilijk genoeg is)
Het is ook zo dat alles op zich heel eenvoudig is met Arduino en dat het pas moeilijk wordt als je gaat combineren.
Dit betekend dat een uitleg of heel basic is of heel specifiek (iets wat je misschien nooit zal tegenkomen)
Het beste is nog steeds ervaring met anderen delen. Daarvoor is een Jam een ideaal moment.
Er is dit weekend (21 tot 23 september 2012) een Jam in het timelab in gent. http://www.arduino-jam.org/