- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: Hindernisausweichprogramm-Asuro fährt nur rükwerz

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

    Hindernisausweichprogramm-Asuro fährt nur rükwerz

    Anzeige

    Powerstation Test
    Hallo leute,

    ich habe ein Programm zum Hindernisausweichen geschriben. Dieses programm funktionirt aber nicht.
    WARUM?
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	
    	Init();
    	int zaeler;
    	
    	StatusLED(YELLOW);
    	MotorDir(FWD,FWD);
    	while(1){
    	
    	    if (PollSwitch()>0) {
    		  if (PollSwitch()>0){
    			MotorDir(RWD,RWD);
    		        for (zaeler=0; zaeler<300; zaeler++) {
    			    Sleep(255);}
    			    for (zaeler=0; zaeler<30; zaeler++) {
    		            FrontLED(ON);
    			        MotorSpeed(140,140);
    		            Sleep(250);}
    			        MotorSpeed(0,0);
    		        for (zaeler=0; zaeler<100; zaeler++) {
    		            MotorDir(FWD,RWD);
    			        MotorSpeed(250,250);
    			        Sleep(250);}}}
    		  else {FrontLED(OFF);}
    		else {MotorDir(FWD,FWD);
    		MotorSpeed(140,140);}
    	}
    	return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    38
    Beiträge
    246
    Vielleicht solltest du etwas genauer beschreiben, was nicht funktioniert?
    Kompiliert es nicht oder macht er nicht das, was du erwartest?

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

    willkommen im RN-Forum.

    Irgendwie bist du über deine Klammern gestolpert, ich konnte dein Programm nicht fehlerfrei übersetzen:

    avr-gcc -mmcu=atmega8 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb -c -DF_CPU=8000000UL -Wa,-acdhlmns=temp.lst temp.c -o temp.o
    temp.c: In function `main':
    temp.c:28: error: syntax error before "else"
    temp.c: At top level:
    temp.c:31: error: syntax error before "return"
    make: *** [temp.o] Error 1
    2
    Nachdem ich deinen Code etwas umgestellt habe (ich finde das so übersichtlicher, aber jeder kann's machen wie er will!) funktioniert es fast:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int zaehler;
    
    	StatusLED(YELLOW);
    	MotorDir(FWD,FWD);
    	while(1)
    	{
    		if (PollSwitch()>0)
    		{
    			if (PollSwitch()>0)
    			{
    				StatusLED(YELLOW);
    				MotorDir(RWD,RWD);
    				for (zaehler=0; zaehler<300; zaehler++)
    				{
    					Sleep(255);
    				}
    				for (zaehler=0; zaehler<30; zaehler++)
    				{
    					FrontLED(ON);
    					MotorSpeed(140,140);
    					Sleep(250);
    				}
    				MotorSpeed(0,0);
    				for (zaehler=0; zaehler<100; zaehler++)
    				{
    					MotorDir(FWD,RWD);
    					MotorSpeed(250,250);
    					Sleep(250);
    				}
    			}
    			else
    			{
    				FrontLED(OFF);
    			}
    		}
    		else
    		{
    		StatusLED(GREEN);
    		MotorDir(FWD,FWD);
    		MotorSpeed(140,140);
    	}
    }
    return(0);
    }
    Da mein asuro zur Zeit keine Räder hat weiß ich allerdings nicht, ob er sich wie gewünscht bewegt. Das FrontLED(OFF) muss wohl in den else-Zweig der ersten if-Abfrage, sonst geht die LED nie mehr aus. (Außer man läßt den Taster genau nach dem ersten if los ;)

    Die zusätzlichen StatusLED-Befehle dienen dem debuggen, damit man sieht, was er grad treibt.

    Noch ein Tipp: Möglicherweise stört ein zu häufiges MotorSpeed(x,x); die PWM, deshalb sollte man solche Dinge:
    Code:
    				for (zaehler=0; zaehler<100; zaehler++)
    				{
    					MotorDir(FWD,RWD);
    					MotorSpeed(250,250);
    					Sleep(250);
    				}
    besser so formulieren:
    Code:
    				MotorDir(FWD,RWD);
    				MotorSpeed(250,250);
    				for (zaehler=0; zaehler<100; zaehler++)
    				{
    					Sleep(250);
    				}
    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. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2008
    Beiträge
    6
    Danke jetzt funktionirz!

Berechtigungen

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

Labornetzteil AliExpress