-
        

Ergebnis 1 bis 7 von 7

Thema: einfaches programm will nicht

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

    einfaches programm will nicht

    Anzeige

    Code:
    #include "asuro.h"
    int main(void){
    Init();
    while(1){
    char Taster;
    Taster=PollSwitch();
    if (Taster<1){
    StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    }
    else {
    int I;
    for (I=0;I<4000;I=I+1){
    StatusLED(RED);
    MotorDir(RWD,BREAK);
    MotorSpeed(200,0);
    }
    }
    }
    }
    *Funktionsbeschreibung*
    Der Asuro wird abgefragt ob Pollswitch betätigt oder nicht ist .
    Wenn Pollswitch 0 dann geradeausfahren
    Wenn Pollswitch 1 oder höher dann eine bestimmte zeit zurückfahren
    dann mit der while schleifen wieder prüfen welche Wert Pollswitch hat.

    irgendwie ist das da momentan einfach nur so das mein asuro sofort ROT leuchtet und rückwärtsfährt also der eine motor und zwischendurch immer schnell grün blinkt was aber eignetlich gar nicht sein darf

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    561
    Hallo

    Ein viel besprochenes Problem ist dass die Taster beim Asuro nicht besonders zuverlässig sind.
    Aufgrund mehrerer Faktoren wird manchmal ein Wert ungleich 0 zurückgegeben obwohl nichts gedrückt wurde.

    Um dies vorzubeugen gibt es mehrere Möglichkeiten wie mehrfache Abfragen:

    Code:
    ...
    int T,T1,T2;
    T=PollSwitch();
    T1=PollSwitch();
    T2=PollSwitch();
    if (T==0||T1==0||T2==0)
    {
    ...
    }
    ...
    oder indem du einfach auf einen Taster verzichtest und sagst

    Code:
    ...
    if (Taster<2)
    {
    ...
    }
    ...
    oder etwas ausgefallener:

    Code:
    ...
    while(1)
       {
    StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    
       while((PollSwitch()==0) || (PollSwitch()==0) || (PollSwitch()==0));
    
       int I;
    for (I=0;I<4000;I=I+1){
    StatusLED(RED);
    MotorDir(RWD,BREAK);
    MotorSpeed(200,0);
    }
    }
    ...
    Gruß Thund3r

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    7
    okay cool, wahnsinn , ich hab mir durch die ganzen seiten geschaut und nie richtig verstanden ... muss schon sagen super netter support ... interessant wäre noch für mich warum ein ungleicher wert ausgegeben wird? wegen dem programm oder wegen den elektrischen komponenten. und was wird durch die || eigentlic hrealisiert was ist das für eine funktionen ? etwa ein UND ?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    561
    Hallo

    Also der ungleiche Wert entsteht einfach gesagt aufgrund von Bauteilunterschieden. Auch wenn zB 2 Widerstände laut Bezeichnung gleich sein sollten gibt es minimale Unterschiede. Diese Unterschiede summieren sich und können zB in Verbindung mit laufenden Motoren die Stromschwankungen o.ä. hervorbringen zu Ungenauigkeiten führen welche sich zB in falschen Tasterwerten wiederspiegeln.

    Die || sind "oder" && wäre "und"

    In dem Teil hier:

    T==0||T1==0||T2==0

    wird gefragt: Ist T(Taster) oder T2 oder T3 = 0 (nicht gedrückt)
    Also muss nur einer von den 3 mal abgefragten Werten stimmen. So wird der Sensor etwas abgestumpft um solchen bauteilbedingten Schwankungen zu entgehen. Beim drücken eines Tasters wird ein Wert zurückgegeben der immer über 0 ist. Also sind alle 3 Abfragen nicht mehr gleich 0 und der weitere Programmteil wird abgearbeitet

    Gruß Thund3r

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    7
    und nochmal herzlichen dank! mit UND und ODER befehlen kann ich besser umgehen , bin ja schließlich auch elektroniker. und kein informatiker

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    561
    Hallo

    Gern geschehn !
    Ach jeder Anfang ist schwer aber mit der Zeit lernt man.
    Viel Erfolg bei deinen weiteren Projekten und
    wenn du Hilfe brauchst sach bescheid

    Gruß Thund3r

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Die unzuverlässiger taster werten entstehen durch störungen von den elektromotoren. Diese animaition erklärt das ein bisschen.

    http://www.walter-fendt.de/ph14d/elektromotor.htm

    Auf den drehende achse gibt es ein scheibe das die strom mittels kohlebürste uberträgt an dem magnetische spülen. Durch drehen wird abwechselend die stromrichtung geändert damit das magnetische feld die motor nicht wieder abremmst. Aber das umdrehen von den polarität auf einer spule verursacht schwere spannungswechselungen. In dem Asuro sind die motoren leider ganz direkt mit den akkus und analoge messschaltung verbunden. Dadurch werden die spannung schwankungen leicht aufgemerkt bei dem tastertest. Aber ich denke auch die andere analoge messungen.

Berechtigungen

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