- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: While-Schleife geht nicht!!!

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Anzeige

    Praxistest und DIY Projekte
    naja ich hab halt nur
    if ... geschrieben damit die topic-ersteller auch noch bissl was zu denken hat

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich hoffe ich habe nicht noch mehr Verwirrung gestiftet
    Nein, ganz im Gegenteil. Mit Mehrfachabfrage und Return() außerhalb der While-Schleife würde es dann etwa so aussehen:
    Code:
    while(1){
      taste1=PollSwitch();
      taste2=PollSwitch();
      if((taste1 > 0) && (taste1 == taste2)) {StatusLED(RED);}     // Wird eine Taste gedrückt --> LED = Rot
      else {StatusLED(GREEN);}    // Keine Taste --> LED = Grün
    }
    return 0;
    Und mit nur einem (langsamen) PollSwitch() und einer "Entprellung" durch die IF-Abfrage:
    Code:
    while(1){
      taste1=PollSwitch();
      if((taste1 > 0) && (taste1 == taste2)) {StatusLED(RED);}     // Wird eine Taste gedrückt --> LED = Rot
      else {StatusLED(GREEN);}    // Keine Taste --> LED = Grün
      taste2=taste1;
    }
    return 0;
    Das ist übrigens mein persönlicher Favorit, mit drei Abfragen auch sehr sicher.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    standardmäßig passiert ebi einem mikrocontroller nichts. auch die statusled wird nicht rot.

    im gegenteil, man sollte darauf achten dass das programmende nie erreicht wird; ansonsten steht de prozessor n einem sogenannten undefinierten zustand in dem (theoretisch) alles mögliche passieren könnte.

    die beste lösung ist vermutlich tatsächlich eine endlosschleife, in der mit if abgefragt wird.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    30.10.2007
    Ort
    Meensen
    Alter
    35
    Beiträge
    77
    hallo radbruch,
    zwei sachen:
    1. ist taste1=PollSwitch(); die deklaration von taste1 oder nur eine zuweisung? wenn ja: wie wird taste1 deklariert?

    2. muss im zweiten code von dir nicht auch taste2=PollSwitch(); stehen?

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Weiti

    taste1 sollte natürlich zuvor deklariert sein, als Byte bzw. Char weil der Rückgabewert von PollSwitch() so aussieht:
    unsigned char PollSwitch (void)

    taste2 speichert den letzten mit PollSwitch() ermittelten Wert (der ja in taste1 steht) und wird am Ende der Schleife zugewiesen (und muss natürlich auch zuvor als Char deklariert sein):

    taste2=taste1

    Dann kann man in der If-Abfrage die zwei nacheinander ermittelten Tastenwerte vergleichen. taste1 aus der aktuellen Schleife und taste2 aus der vorhergehenden Schleife. Dadurch spart man sich einen Aufruf von PollSwitch(). Zur Erhöhung der Zuverlässigkeit des Tastenwertes kann man dann noch einen dritten Tastenwert aus der vorletzen Schleife abfragen (if((taste1 > 0) && (taste1 == taste2) && (taste1 == taste3) den man mit

    taste3=taste2;
    taste2=taste1;

    auch am Ende der Schleife gespeichert hat. Das funktioniert natürlich nur, wenn die Tasten halbwegs genau kalibriert sind und bei Betätigung (meistens) den ihnen zugewiesenen Wert erzeugen (1,2,4,8,16 und 32)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress