-
        

Ergebnis 1 bis 9 von 9

Thema: Programmierprobleme mit den Kollisionsschaltern

  1. #1

    Programmierprobleme mit den Kollisionsschaltern

    Anzeige

    Hallo,
    ich habe meinen Asuro fertiggestellt und er hat den Selbsttest nun auch fehlerfrei bestanden
    Nun möchte ich ihn programmieren. Auch dies funktioniert soweit. Allerdings hat er scheinbar Probleme mit den Schaltern.
    Folgendes Programm geht:
    #include "asuro.h"

    int main(void)
    {
    Init();
    MotorDir(FWD,FWD);
    while(1){
    MotorSpeed (150,150);
    }
    while(1);
    return 0;
    }


    Nachfolgendes allerdings nicht:

    #include "asuro.h"

    int main(void)
    {
    Init();
    MotorDir(FWD,FWD);
    while(PollSwitch==0){
    MotorSpeed (150,150);
    }
    MotorSpeed (0,0);
    while(1);
    return 0;
    }

    Hier fährt er garnicht erst los so als würde er die Schleife überspringen da PollSwitch != 0 was allerdings nicht der Fall ist.
    Auch bei einem Programm, welches ich hier aus dem Forum geladen habe wo er immer Forwärtsfahren sollte bis er wo gegenstößt, dann kurz Rückwärts und dann wieder Forwärts bis zum gegenstoß usw. ist er immer nur Rückwärtsgefahren als würden die Schalter dauerhaft gedrückt sein......

    Was kann ich nur machen damit es geht??
    Wäre nett wenn ihr mir helfen könntet.

    MFG
    Christian

  2. #2
    Hallo,
    hier noch weitere Ergänzungen da mir ja bisher leider noch niemand helfen konnte :
    Also bei folgendem Programm leuchtet die StatusLED dauerhaft rot egal welche Taster ich drücke:

    #include "asuro.h"

    int main(void)
    {
    Init();
    unsigned char taste;
    taste = PollSwitch();
    if (taste=32)
    StatusLED (RED);
    else if (taste=16)
    BackLED (ON,ON);
    else
    FrontLED (ON);
    while(1);
    return 0;
    }


    Der Selftest hingegen läuft einwandfrei. Jeder Taster macht genau das, was er soll und auch nix von alleine, wohingegen bei meinen selbstgeschriebenen Programmen es ja den Anschein hat als würde Asuro denken ein Taster würde gedrückt werden.
    Sind denn die Selbstgeschriebenen Programme richtig???
    Bitte helft mir!!!

    MFG
    Christian

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Ort
    Berlin
    Alter
    38
    Beiträge
    11
    Tach schön,

    ich habe mir den quellcode des selbsttestes angeschaut und mir dieses programmchen gebastelt um die taster mal abzufragen:

    #include "asuro.h"

    int main(Void)

    {

    Init();
    unsigned char sw;
    BackLED (OFF,OFF);
    StatusLED (GREEN);
    MotorSpeed (0,0);
    for ( ; ; )
    {
    sw = PollSwitch();
    if (sw == 0x01) {MotorDir (FWD,FWD); MotorSpeed (170,200);BackLED (OFF,ON);}
    if (sw == 0x02) {MotorDir (RWD,RWD);MotorSpeed (180,150);StatusLED (RED);}
    if (sw == 0x04) {MotorDir (FWD,FWD);MotorSpeed (160,220);BackLED (ON,ON);}
    if (sw == 0x0 {MotorDir (FWD,FWD);MotorSpeed (220,160);BackLED (ON,ON);}
    if (sw == 0x10) {MotorDir (RWD,RWD);MotorSpeed (150,180);StatusLED(RED);}
    if (sw == 0x20) {MotorDir (FWD,FWD); MotorSpeed (200,170);BackLED(ON,OFF);}
    }

    }

    Da ich auch erst seit kurzem daran bastle, verstehe diesen beitrag bitte nur als stütze und nicht als die lösung deines problems

    @der Dashfinder

  4. #4
    Also da die Tests alle korekt funktionieren gehe ich davon aus, daß ich einen Programmierfehler habe doch welchen?????
    Was mich auch wundert ist daß es bei mir manchmal zu Fehlermeldungen kommt obwohl ich Dinge 1:1 aus der Anleitung kopiert habe. In der Anleitung ist z.B.: nach dem Init() am Anfang nie ein ; bei mir muß aber eins stehen.
    Was mache ich also beim Programmieren falsch (Beispiele siehe oben)??

    MFG
    Christian

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Ort
    Berlin
    Alter
    38
    Beiträge
    11
    hmm...der Wert den du als taste abfragst ist in deinem fall 32 bzw. 16. ich habe das anfangs auch so probiert -allerdings ohne erfolg. daher habe ich aus dem selbsttest-code die werte für jeden einzelnen taster rauskopiert (von li nach re 0x01, 0x02, 0x04, usw.). das sind die hex-werte der einzelnen taster. und immer wenn ein taster auslöst folgt eine reaktion des asuro. allerdings endet dieser vorgang erst wenn ein anderer taster betätigt wird

  6. #6
    Aber auch jener Befehl geht nicht, obwohl er so (ähnlich) in der Anleitung steht:

    #include "asuro.h"

    int main(void)
    {
    Init();
    MotorDir(FWD,FWD);
    while(PollSwitch==0){
    MotorSpeed (150,150);
    }
    MotorSpeed (0,0);
    while(1);
    return 0;
    }

    Kann mir bitte jemand sagen wie dieser Befehl richtig lauten muß und was sonst noch so falsch ist.

    MFG
    Christian

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    14.05.2005
    Beiträge
    42
    Also was mir auf die Schnelle aufgefallen ist ein typsicher "Schusselfehler"

    Zitat Zitat von Christian 25
    {
    if (taste=32)
    StatusLED (RED);
    else if (taste=16)
    }
    Du musst == statt = benutzen, denn sonst weist du der Variablen taste in der if-Abfrage den Wert 32 zu
    If (a=32) bewirkte das a den Wert 32 bekommt und da das klappt, ist die if-abfrage auch gleich "true"

    Zitat Zitat von Christian 25
    while(PollSwitch==0){
    Hier muss PollSwitch() stehen (mit Klammern!!)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Ort
    Berlin
    Alter
    38
    Beiträge
    11
    Tach schön,

    ich habe mir das Programm

    #include "asuro.h"

    int main(void)
    {
    Init();
    MotorDir(FWD,FWD);
    while(PollSwitch==0){
    MotorSpeed (150,150);
    }
    MotorSpeed (0,0);
    while(1);
    return 0;
    }
    mal ausprobiert und es funzt bei mir auch nicht.

    Allerding sind da auch Fehler drin. Wie Jango schon geschrieben hat fehlen bei PollSwitch die Klammern. Auch der Wert 0 für die Schalter führt zu Problemen (zumindest bei mir). Ich hab das Prog etwas umgeschrieben und dabei kam dieses funzende Stück heraus.

    int main(void)
    {
    Init();

    while(PollSwitch()<=0X02)
    {
    StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(200,200);
    }
    StatusLED (RED);
    MotorSpeed (0,0);
    while(1);
    return 0;

    Keine Ahnung warum die ==0 bei PollSwitch nich funktioniert. Aber so geht es auch.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.09.2004
    Ort
    Hamburg
    Alter
    37
    Beiträge
    37
    hängt vielleicht mit dem rückgabewert der Funktion Pollswitch zusammen. Pollswitch liefert dir einen Wert zurück, welcher dann wahrscheinlich nur Hexadez. interpretiert werden kann oder gar andere Werte als 0. Man müßte in dem Azuro Header nachschauen was zurückgegeben wird.

    so long...

Berechtigungen

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