-         

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

Thema: PollSwitch reagiert falsch?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2007
    Beiträge
    6

    PollSwitch reagiert falsch?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo zusammen, vor einigen Tagen habe ich meinen Asuro fertig gelötet, Alle Tests liefen einwandfrei.

    Mein ersten Programm die Lichter blinken zu lassen läuft auch aber nun heng ich sei dgestern mittag an der PollSwitch funktion.

    hier mal mein Programm:

    Code:
    #include "asuro.h" 
    
    int main() 
    { 
    Init();
    
    int ps;
    int ps1;
    int ps2;
    int i;
    
    ps = PollSwitch();
    ps1 = PollSwitch();
    ps2 = PollSwitch();
    
    for (i=1;i<=200;i++) {
    Sleep(255); }
    
    for (;;) {
    
    if ((ps == ps1) && (ps == ps2) && (ps1 == ps2) > 0 ) {
    	StatusLED(RED);
    	MotorDir(FREE,FREE);
    		 for (i=1;i<=350;i++) {
    		 Sleep(255);}
    		 SerWrite("Stop\n\r",20);
    	MotorDir(RWD,RWD);
    	MotorSpeed(200,200);
    		 for (i=1;i<=300;i++) {
    		 Sleep(255);}
    		 SerWrite("zurück\n\r",20);
    	MotorDir(RWD,FWD);
    	MotorSpeed(150,150);
    		 for (i=1;i<=120;i++) {
    		 Sleep(255);}
    		 SerWrite("drehen\n\r",20);
    	}
    else if ((ps == ps1) && (ps == ps2) && (ps1 == ps2) == 0 ){
    	StatusLED(GREEN);
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	SerWrite("Jetzt gehts los\n\r",20);
    	}
    }
    }
    ich schalte ihn ein und er tut nix anderes als das er stoppt, rückwärts fährt, dreht und von vorne. das zeigt er mir auch im hyper terminal durch SerWrtie.

    er fährt nicht einmal vorwärts. im forum habe ich schon gelesen das es wohl am kondensator liegt das de rnoch geladen sei. da witzige ist wenn ich die einzelnen Taster abfrage und bei druck jeweils nur mit einer LED belege funktioniert alles wunderbar, ich drück den taster, die LED geht an und danach wieder aus. wieso geht das hier nicht? ;(

    habe mir die Werte der Taster ausgeben lassen und sie zeigen folgendes an:

    1,2,4,8,16,32

    summe = 63

    das stimmt sobald ich alle auf einmal drücke zeigt er auch 63 an und alle 20sek. vlt mal ein 64.

    kann mir irgendjemand helfen?

    mfg Adler

  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

    Ich denke, deine Logik hat dich überrollt:

    ((ps == ps1) && (ps == ps2) && (ps1 == ps2) > 0 )

    wenn alle ps == 0 sind, ergibt das:

    (true && true && true > 0)

    Ab hier bin ich mir nicht ganz sicher, entweder:

    ((true && true && true) > 0) oder (true && true && (true > 0))

    wobei das erste (true>0) also true ergibt und das zweite

    wäre dann (true && true && true) und ergäbe auch true. Das heist, immer wenn alle drei ps gleich sind, wird der if-Zweig ausgeführt, also auch bei 0(=keine Taste). Btw: Wenn ps==ps1 und ps==ps2 dann muss ps1==ps2 sein.

    Versuche es mal so:

    ((ps == ps1) && (ps == ps2) && (ps > 0) )

    Ist nur true wenn alle gleich sind und größer 0.

    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
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2007
    Beiträge
    6
    danke für die schnelle antwort:

    habe es mal wie folgt abgeändert:

    Code:
    #include "asuro.h" 
    
    int main() 
    { 
    Init();
    
    int ps;
    int ps1;
    int ps2;
    int i;
    
    ps = PollSwitch();
    ps1 = PollSwitch();
    ps2 = PollSwitch();
    
    for (i=1;i<=200;i++) {
    Sleep(255); }
    
    for (;;) {
    
    if ((ps == ps1) && (ps == ps2) && (ps > 0) )  {
    	StatusLED(RED);
    	MotorDir(FREE,FREE);
    		 for (i=1;i<=350;i++) {
    		 Sleep(255);}
    		 SerWrite("Stop\n\r",20);
    	MotorDir(RWD,RWD);
    	MotorSpeed(200,200);
    		 for (i=1;i<=300;i++) {
    		 Sleep(255);}
    		 SerWrite("zurück\n\r",20);
    	MotorDir(RWD,FWD);
    	MotorSpeed(150,150);
    		 for (i=1;i<=120;i++) {
    		 Sleep(255);}
    		 SerWrite("drehen\n\r",20);
    	}
    else if ((ps == ps1) && (ps == ps2) && (ps == 0) ) {
    	StatusLED(GREEN);
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	SerWrite("Jetzt gehts los\n\r",20);
    	}
    }
    }
    doch nun fährt er nur vorwärts^^ egal ob taster gedrückt oder nicht.
    ich glaub ich habe derzeit wirklich ein logik problem, hm.

    was nun?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi,

    bau mal die PollSwitch Funktionen in die for Schleife ein. So werden die Taster ja nur einmal beim Programmstart abgefragt und dann nie wieder.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2007
    Beiträge
    6
    danke euch 2

    *FREUDE*

    er fährt korrekt soweit ich das im trockenlauf beurteilen konnte.

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    So werden die Taster ja nur einmal beim Programmstart abgefragt und dann nie wieder.
    Tatsächlich. Es ist eben nicht einfach, fremden Code zu lesen.

    Glückwunsch zum Erfolg.

    Und herzlich willkommen im RN-Forum.

    mic

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

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    ich glaub du hast die besten taster werte die ich seit langem gesehen habe...
    kleinschreibung ist cool!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2007
    Beiträge
    6
    hrhr also geschummelt habe ich nicht

    mir ist nur aufgefallen, dass wenn bei meinem Asuro die Motoren angehen, dass dann teilweise ein wert zurückgegeben wird, als wenn ein schalter betätigt wäre. deswegen muss ichs immer zichmal einlesen und vergleichen. solange es geht^^

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    ... und trotzdem klappts nicht. Auf PollSwitch() liegt ein Fluch...

    Aber trotz allem "Hut ab". Sehr gut, dass du selbst die meisten Tastenprobleme erkannt und gelöst hast.

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

  10. #10

    Probleme mit Pollswitch???

    Ich habe seid ca. 8 Wochen einen ASURO. Habe die Odomie und die Linienverfolgung schon verwendet, aber mit den Pollswitches klappt es einfach nicht. Kann mir mal jemand ein Musterprogramm zusenden?
    z.B. Wenn ich Pollswitch drücke soll LED leuchten oder Motor stoppen! =D>

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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