-
        

Ergebnis 1 bis 6 von 6

Thema: Verständnissproblem im Programm

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71

    Verständnissproblem im Programm

    Anzeige

    Hi.
    Aus dem Heft"SPASS MIT ASURO Teil2" habe ich das PRO__""Nur ein Stück geradeaus"abgetippt und compilliert. Hinter gedanke dabei ist , das Programmieren ansatzweise(learnig bei dooing" zu begreifen.
    OK compillieren hat funktioniert, keine Fehler, geflasht, auch keine fehler-und siehe da der ASURO fährt ein STÜCK. jetzt meine Frage:
    woher weis das Programm das es bei case172 anhlten soll?
    Gruß Frank

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Ich denke du solltest mal den Code posten, denn sonst kann dir Niemand helfen der dieses spezielle Heft nicht hat.

    Und damit er gut lesbar ist, setz ihn bitte zwischen
    Code:
     und
    So viele Treppen und so wenig Zeit!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Also hier erstmal der Code:
    Code:
    #include "asuro.h"				// Schwellwert Hell Dunkel
    #define TRIGGERLEVEL 540
    #define HYSTERESIS 10
    #define LOW 0
    #define HIGH 1
    
    int main (void){
    	unsigned int data[2];
    	signed int status [2]={0,0};
    	signed int difference=0;
    	unsigned int distance=0;
    	signed int speed;
    	Init();
    	while(1){
    	switch(distance){                         
    	case 0:MotorDir(FWD,FWD);speed=255;break;
    	case 150:speed=200; break;				
    	case 160:speed=150;break;
    	case 172:MotorDir(BREAK,BREAK);break;
    	}
    OdometrieData(data);
    	if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)){
    	status[0]=HIGH;
    	difference++;
    	distance++;
    	}
    	if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)){
    	status[0]=LOW;
    	difference++;
    	distance++;
    	}
    	if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)){
    	status[1]=HIGH;
    	difference--;
    	}
    	if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)){
    	status[1]=LOW;
    	difference--;
    	}
    	if (difference<-speed)difference=-speed;
    	if (difference>speed)difference=speed;
    	StatusLED(status[0]+status[1]*2);
    	if (difference>0)MotorSpeed(speed-difference,speed);
    	else MotorSpeed(speed,speed+difference);
    	}
    	return 0;
    	}

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo Frank
    Wenn die Variable distance den Wert 172 hat, dann wird die Funktion MotorDir aufgerufen.
    Dies Funktion ist in asuro.h definiert, ebenso der Übergabeparameter BREAK.
    Sie steuert die Drehrichtung der Motoren. Über die Parameter werden die Port – Pins
    zu den beiden H-Brücken gesetzt.
    In diesem Fall werden die Motoren kurzgeschlossen. ( Bremsen )

    MFG
    August Hoffmann

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Und die variabele Distance wird mit 1 inkrementiert (erhöht) bei jede gemessen (OdometrieData) schwarz/weiss ubergang (triggerlevel wert +/- hysteresis wert) auf den beiden geberscheiben.

  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
    ..ob der erkannte Übergang von hell nach dunkel oder von dunkel nach hell war wird für jede Seite getrennt in status[0] und status[1] gespeichert...

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

Berechtigungen

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