-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Problem bei if-Abfrage

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2007
    Beiträge
    7

    Problem bei if-Abfrage

    Anzeige

    Hallo,
    ich habe ein Problem bei der if-Abfrage der Taster.
    Wenn bei if zwischen den geschweiften Klammern mehr als ein Befehl steht, dann führt der ASURO immer diese aus, obwohl die Bedingung nicht erfüllt ist.
    Steht zwischen den geschweiften Klammern nur ein Befehl dann klappt alles, wie es soll.
    Ich habe schon alle Möglichkeiten, die ich kenne ausprobiert,
    Ich hoffe auf baldige Hilfe.

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

    Wenn du nicht nur irgendwelche Glaskugelsprüche lesen möchtest solltest du uns dein Programm zeigen.

    Gruß

    mic

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

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Zeig mal her die fraglichen Zeilen. Beim C gibt's nix esoterisches, da hast du irgendeinen formalen Hund drinnen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2007
    Beiträge
    7
    so hier ist der code
    Code:
    #include "asuro.h"
    
    void RWD(void)
    {
    MotorDir(RWD,RWD);
    MotorSpeed(200,200);
    Msleep(1000);
    }
    
    int main(void)
    {
      unsigned char t1, t2; 
    
      Init();
      while (1)
      {
        PollSwitch();
    	PollSwitch();
        t1 = PollSwitch();
        t2 = PollSwitch();
    	MotorDir(FWD,FWD);
    	MotorSpeed(250,250);
    	if(t1 && t2 && t1 ==t2){
    		if(t1>0x00) {
    			RWD;
    		}
    	}
      }
      return 0;
    }

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Hallo sebwolf,

    if(t1 && t2 && t1 ==t2)

    Was willst du genau? Arbeite evtl. mit mehr Klammern (eindeutig)

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2007
    Beiträge
    7
    Da frag ich ab ob beide Variablen die gleichen Tasterwerte liefern.
    Und ich will dass der ASURO, wenn ein Taster gedrückt wird, rückwärts fährt(die Funktion RWD ausführt)

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Meinst du " if (t1==t2) " ?

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2007
    Beiträge
    7
    Ja, aber selbst wenn ich es so ändere,fährt er trotzdem immer rückwärts

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Habe mir mal die Anleitung durchgelesen:
    wieso führst du 2x Pollswitch gleich nacheinander aus (evtl. kurze Pause durch warten oder besser per IRQ) und speicherst das Ergebnis in 2 unterschiedliche Variablen?

    Laut Anleitung bekommst du ein Byte mit dem Ergebniss zurück und kannst dies auswerten.

    Somit brauchst du eigentlich keine Variable sondern einfach nur if (PollSwitch()>0){} (Anleitung S.60)

    Wenn du wie oben direkt nacheinander das Ergebnis in unterschiedliche Variablen abspeicherst und vergleichst, wird dies wahr ergeben und die nächste Abfrage, sofern ein Taster gedrückt wurde ebenfalls.

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Die Überprüfung von PollSwitch() ist sinnvoll, vor allem bei laufenden Motoren "lügt" die Funktion recht häufig. RWD ist ein reserviertes Wort weil es in asuro.h definiert ist. Mir ist schleierhaft wie ihr solchen Mist fehlerfrei kompilieren könnt:

    Code:
    #include "asuro.h"
    
    void xRWD(void)
    {
    MotorDir(RWD,RWD);
    MotorSpeed(200,200);
    Msleep(1000);
    }
    
    int main(void)
    {
      unsigned char t1, t2;
    
      Init();
      while (1)
      {
       //PollSwitch();
       //PollSwitch();
        t1 = PollSwitch();
        t2 = PollSwitch();
       MotorDir(FWD,FWD);
       MotorSpeed(250,250);
       if(t1 ==t2){
          if(t1>0x00) {
             xRWD();
          }
       }
      }
      return 0;
    }
    Gruß

    mic
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fehlermeldungen.jpg  

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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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