- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: ASURO Vorführung

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Anzeige

    E-Bike
    ich meinte nur weil du geschrieben hast ich soll mehr über den Asuro und den RP6 und soetwas erzählen
    mfG Andy

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Hab jetzt mal ein Programm geschrieben, bei dem er zuerst einfach der Linie folgen soll und nach einem Tastendruck dann den 2ten Teil des Programms ausführen soll, also auf Kollisionsfahrt gehen.

    Habe jetzt nur Problem, das ich das mit dem bis zu Tastendruck irgendwie nicht hinbekomme, lest es euch bitte mal durch un schlagt mal vor wie es gehen müsste. Danke.
    Code:
    #include "asuro.h"
    
    
    int main(void){
    
        unsigned int data[2], i;
        unsigned char b1, b2, taste;
    
        Init();
    
        FrontLED(ON);
        MotorDir(FWD,FWD);
        MotorSpeed(255,255);
    	
    	taste = PollSwitch();
    
    /*Linienfolger bis Tastendruck*/
        while(taste == 0){
    		
    		LineData(data);
    		
            if ((data [0] < 20) && (data [1] > 20 )){
                MotorDir(RWD,FWD);
                MotorSpeed(0,255);
                BackLED(OFF,ON);
                StatusLED(RED);
            }
    		
            if ((data [1] < 20) && (data [0] > 20 )){
                MotorDir(FWD,RWD);
                MotorSpeed(255,0);
                BackLED(ON,OFF);
                StatusLED(RED);
            }
    		
            if ((data [1] < 20) && (data [0] < 20 )){
                MotorDir(FWD,FWD);
                MotorSpeed(255,255);
                BackLED(ON,ON);
                StatusLED(GREEN);
            }
        }
    	
    	FrontLED(OFF);
    	MotorSpeed(0,0);
    	for (i=0;i<1024;i++){Sleep(255);}
    
    /*Kollision bis zum bitteren Ende*/
    	while (1){
    		
    		b1 = PollSwitch();
    		b2 = PollSwitch();
    		
            if (b1 == 0 && b2 == 0){
                MotorDir(FWD,FWD);
                MotorSpeed(255,255);
                BackLED(OFF,OFF);
                StatusLED(GREEN);
            }
    		
            else if (b1 && b2 && b1 == b2){
                MotorDir(BREAK,BREAK);
    			
                if (b1 > 7){
                    MotorDir(RWD,RWD);
                    MotorSpeed(100,255);
                    BackLED(ON,OFF);
                    StatusLED(RED);
                }
    			
                if (b1 < 8){
                    MotorDir(RWD,RWD);
                    MotorSpeed(255,100);
                    BackLED(OFF,ON);
                    StatusLED(RED);
                }
    			
                for (i=0;i<200;i++){Sleep(255);}
            }
        }
    
        return 0;
    }
    mfG Andy

  3. #23
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    taste = PollSwitch();

    /*Linienfolger bis Tastendruck*/
    while(taste == 0){
    ....
    Wie kann taste hier jemals ungleich 0 werden, wenn die while-Schleife erstmal betreten wurde? Auch in der Liniensuchschleife sollte zur Entstörung der PollSwitch()-Wert überprüft werden.

    Gruß

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

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Jetzt wo du es sagst: Gute Frage

    Also muss ich einfach in die Schleife taste=PollSwitch() integrieren und das ganze geht oder? (Hab grad keine Zeit um es zu probieren)

    Mal vielen Dank für diese Denkhilfe
    mfG Andy

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Hab das jetzt mal probiert, aber jetzt wird der Teil noch nicht mal einmal ausgeführt. Außerdem habe ich dann mal taste komplett weg gelassen und dafür "while(PollSwitch() == 0)" probiert, dabei war jedoch auch das Problem, das es dann nicht ausgeführt wurde.
    Wo könnte das Problem sein?
    Könnte mir vielleicht jemand eine komplett richtige Version nach meiner Vorlage schreiben?
    mfG Andy

  6. #26
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Die Linienverfolgung wird übersprungen und sofort der Kollisionsteil abgearbeitet? Macht er das:

    if (b1 == 0 && b2 == 0){ ?

    Wenn nicht, dann stimmt vielleicht, wenn keine Taste gedrückt ist, der Rückgabewert von PollSwitch() nicht. Stichwort wäre dann: Tasten kallibrieren.

    Notlösung wäre vielleicht eine tolerantere Abfrage:

    while(PollSwitch() < 3)

    Gruß

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

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Das Programm wird ausgeführt, als ob es den Teil mit der Linienverfolgung gar nicht gäbe.

    DEr 2te Teil funktioniert Problemlos. Also macht er:
    if (b1 == 0 && b2 == 0){

    Selbst bei einer sehr toleranten Abfrage, habe mal 17 genommen kommt es nach einer immer unterschiedlichen Zeit dazu das er plötzlich anhält, also das Programm weiter abläuft, als ob der Taster gedrückt worden wäre. Jedoch ist um so höher sie Zahl die Zeit länger. Was könnte da das Problem sein?

    Kann man den Wert von PollSwitch() über die IR-Schnittstelle immer an den PC senden? Dann könnte man das mal anschauen.
    mfG Andy

  8. #28
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Klar kann man die Daten von PollSwitch() auch an das Terminal senden:
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=35598

    :)

    Gruß

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

  9. #29
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Hab das mal ausprobiert. Es kamen immer die richtigen Werte.

    Hab jetzt mal noch weiter mit dem Programm probiert. Dabei ist folgendes Programm rausgekommen und es funktioniert soger
    Code:
    #include "asuro.h"
    
    int main (void)
    {
    	
    	unsigned int data[2], i;
    	unsigned char b1, b2;
    	int speed;
    
        Init();
    	
    	speed = 160;
    
        FrontLED(ON);
        MotorDir(FWD,FWD);
        MotorSpeed(speed,speed);
    	
    	while (1){
    		
    		b1 = PollSwitch();
    		b2 = PollSwitch();
    		
    		if (b1 == 0 && b2 == 0){
    		
    		LineData(data);
    		
            if ((data [0] < 20) && (data [1] > 20 )){
                MotorDir(RWD,FWD);
                MotorSpeed(0,speed);
                BackLED(OFF,ON);
                StatusLED(RED);
            }
    		
            if ((data [1] < 20) && (data [0] > 20 )){
                MotorDir(FWD,RWD);
                MotorSpeed(speed,0);
                BackLED(ON,OFF);
                StatusLED(RED);
            }
    		
            if ((data [1] < 20) && (data [0] < 20 )){
                MotorDir(FWD,FWD);
                MotorSpeed(speed,speed);
                BackLED(ON,ON);
                StatusLED(GREEN);
            }
    		}
    		
    		else if (b1 && b2 && b1 == b2){
    		
    		while(1){
    		
    		b1 = PollSwitch();
    		b2 = PollSwitch();
    		
            if (b1 == 0 && b2 == 0){
                MotorDir(FWD,FWD);
                MotorSpeed(255,255);
                BackLED(OFF,OFF);
                StatusLED(GREEN);
            }
    		
            else if (b1 && b2 && b1 == b2){
                MotorDir(BREAK,BREAK);
    			
               
                    MotorDir(RWD,RWD);
                    MotorSpeed(255,100);
                    BackLED(OFF,ON);
                    StatusLED(RED);
                
    			
                for (i=0;i<200;i++){Sleep(255);}
            }}
        }
    
        }
    	return 0;
    }
    Könnte mir vielleicht mal jemand das Blockschaltbild des AVR Prozessors erklären? (Ist das aus der ASURO-Anleitung)
    Danke
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken blockschaltbild_avr_prozessor.jpg  
    mfG Andy

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    21.10.2009
    Beiträge
    36
    Hab jetzt meine Präsentation rum und eine 1 bekommen *freu*
    Er hat zum Glüch nicht nach dem Schaltbild gefragt
    mfG Andy

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

12V Akku bauen