Pages: [1]   Go Down
Author Topic: Serial.Flush()  (Read 1893 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1742
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Quote
led is on
led is of
invalid
invalid
invalid
krijgt en niet de verwachte
Quote
led is on
krijgt.
In de flush documentatie staat
Quote
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
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

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

Het is Hans Pieters, dus neem maar wat,

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.
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1742
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hans Pieters
Wat dacht je van
Code:
while (Serial.available()) Serial.read();
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 smiley-wink ) vullen het. En die anderen kan je niet (zomaar) stoppen.
Hetzelfde geldt voor seriële communicatie.

Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

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

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
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1742
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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/

Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Pages: [1]   Go Up
Jump to: