- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Länger zurückfahren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120

    Länger zurückfahren

    Anzeige

    E-Bike
    Hab heute meinen asuro zusammengbaut und wollte dann dieses Programm schreiben:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    Init();
    MotorSpeed(0,255);
    FrontLED(ON);
    while(1)
    {
    if (PollSwitch()==0)
    {
    MotorDir(FWD,FWD);
    BackLED(ON,ON);
    StatusLED(GREEN);
    }
    else
    {
    MotorDir(RWD,RWD);
    BackLED(OFF,OFF);
    StatusLED(RED);
    }
    }
    }
    aber jetzt soll er ja nicht nur solange rückwärts fahren bis der Taster nicht mwhr gedrückt wird sondern noch für ein paar Sekunden länger.
    Hab schon in der Anleitung nachgeschaut aber nicht gefunden wie ich das mache.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    25.05.2007
    Ort
    Giessen und Fulda
    Alter
    39
    Beiträge
    81
    Grüß dich,

    du musst da eine ZeitVerzögerung einbauen, was beseutet, dass wärend der zeit der uC nichts macht, aber seine Ausgänge noch geschaltet bleiben, wie sie vor der ZeitVerzögerung waren.
    Schreib einfach hinter MotorDir(RWD,RWD); Msleep(1000); ->das bewirkt, dass der uC für 1000ms also 1s wartet und er somit 1s rückwerts fährt.

    Die Funktion Msleep() ist keine Standardfunktion, sie basiert aus Sleep() kannst ja mal beides Nachschlagen, bei Sleep musst du nur beachten, dass z.B.: Sleep(216) 3ms sind, warum das so ist kannste nachlesen.


    MfG Mr.Roboto

  3. #3
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.063
    ich bing eigentlich recht überzeugt dass Sleep() in der anleitung drinsteht... wirklich nachlesen!!
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.05.2007
    Ort
    Giessen und Fulda
    Alter
    39
    Beiträge
    81
    ja klar, Sleep() ist drin, aber Msleep() nicht, das is doch ne hinzugefügt Funktion, damit man nicht immer tausende Schleifen die die Sleep()-Funktion für z.B. 1000x1ms aufrufen schreiben muss. sondern nur eine Zeile hat.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120
    Thx

    Ja es stimmt, Sleep steht wirklich in der Anleitung, habs wohl mehrmals überlesen ^^.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.03.2007
    Ort
    Wien
    Alter
    32
    Beiträge
    55
    so hab mal probiert ein programm zu schreiben aber es klappt irgendwie nicht so richtig kann mir mal eben wer helfen wenns am asuro ist wartet er dann nämlich nicht

    Code:
    #include "asuro.h" // NoHit
    
    
    int main(void)
    {
    	char message[]="Asuro starting NoHit\n";
    	char message1[]=".";
    	char message2[]="R";
    	char message3[]="L";
    	char message4[]="B";
    	Init();
    	MotorDir(FWD,FWD);
    	MotorSpeed(255,255);
    	FrontLED(ON);
    	SerWrite(message,sizeof(message));
    	while(1)
    	{
    		if(PollSwitch()==0)
    		{
    			MotorDir(FWD,FWD);
    			MotorSpeed(255,255);
    			BackLED(ON,ON);
    			StatusLED(GREEN);
    			SerWrite(message1,sizeof(message1));
    		}
    		else
    		{
    			if(PollSwitch()<=7)
    			{
    				MotorDir(RWD,FWD);
    				MotorSpeed(255,255);
    				StatusLED(YELLOW);
    				BackLED(OFF,ON);
    				SerWrite(message2,sizeof(message2));
    				Sleep(72*5000);
    			}	
    			else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
    			{
    				MotorDir(FWD,RWD);
    				MotorSpeed(255,255);
    				StatusLED(YELLOW);
    				BackLED(ON,OFF);
    				SerWrite(message3,sizeof(message3));
    				Sleep(72*5000);
    			}
    			else
    			{
    				MotorDir(RWD,RWD);
    				MotorSpeed(255,255);
    				StatusLED(RED);
    				BackLED(OFF,OFF);
    				SerWrite(message4,sizeof(message4));
    				Sleep(72*5000);
    			}
    		}
    	}
    }

    EDIT V0.2 klappt auch ned :
    Code:
    #include "asuro.h" // NoHit
    
    
    int main(void)
    {
    	char message[]="Asuro starting NoHit\n";
    	char message1[]=".";
    	char message2[]="R";
    	char message3[]="L";
    	char message4[]="B";
    	int sleep;
    	Init();
    	MotorDir(FWD,FWD);
    	MotorSpeed(255,255);
    	FrontLED(ON);
    	SerWrite(message,sizeof(message));
    	while(1)
    	{
    		if(PollSwitch()==0)
    		{
    			MotorDir(FWD,FWD);
    			MotorSpeed(255,255);
    			BackLED(ON,ON);
    			StatusLED(GREEN);
    			SerWrite(message1,sizeof(message1));
    		}
    		else
    		{
    			if(PollSwitch()<=7)
    			{
    				MotorDir(RWD,FWD);
    				MotorSpeed(255,255);
    				StatusLED(YELLOW);
    				BackLED(OFF,ON);
    				SerWrite(message2,sizeof(message2));
    				for(sleep=0;sleep<2000;sleep++)
    					Sleep(72);
    			}	
    			else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
    			{
    				MotorDir(FWD,RWD);
    				MotorSpeed(255,255);
    				StatusLED(YELLOW);
    				BackLED(ON,OFF);
    				SerWrite(message3,sizeof(message3));
    				for(sleep=0;sleep<2000;sleep++)
    					Sleep(72);
    			}
    			else
    			{
    				MotorDir(RWD,RWD);
    				MotorSpeed(255,255);
    				StatusLED(RED);
    				BackLED(OFF,OFF);
    				SerWrite(message4,sizeof(message4));
    				for(sleep=0;sleep<2000;sleep++)
    					Sleep(72);
    			}
    		}
    	}
    }

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120
    @so gehts
    Code:
     #include "asuro.h" // NoHit
    
    
    int main(void)
    {
       char message[]="Asuro starting NoHit\n";
       char message1[]=".";
       char message2[]="R";
       char message3[]="L";
       char message4[]="B";
       int sleep;
       int a;
       int e;
       Init();
       MotorDir(FWD,FWD);
       MotorSpeed(255,255);
       FrontLED(ON);
       SerWrite(message,sizeof(message));
       while(1)
       {
          if(PollSwitch()==0)
          {
             MotorDir(FWD,FWD);
             MotorSpeed(255,255);
             BackLED(ON,ON);
             StatusLED(GREEN);
             SerWrite(message1,sizeof(message1));
          }
          else
          {
             if(PollSwitch()<=7)
             {
                MotorDir(RWD,FWD);
                MotorSpeed(255,255);
                StatusLED(YELLOW);
                BackLED(OFF,ON);
                SerWrite(message2,sizeof(message2));
                for(sleep=0;sleep<2000;sleep++)
                   {Sleep(72);}
             }   
             else if(PollSwitch()==8||PollSwitch()==16||PollSwitch()==32)
             {
                MotorDir(FWD,RWD);
                MotorSpeed(255,255);
                StatusLED(YELLOW);
                BackLED(ON,OFF);
                SerWrite(message3,sizeof(message3));
                for(a=0;a<2000;a++)
                   {Sleep(72);}
             }
             else
             {
                MotorDir(RWD,RWD);
                MotorSpeed(255,255);
                StatusLED(RED);
                BackLED(OFF,OFF);
                SerWrite(message4,sizeof(message4));
                for(e=0;e<2000;e++)
                   {Sleep(72);}
             }
          }
       }
    }
    Also für den Inhalt der for schleifen immer ein { davor und ein } dannach.
    Und mehrere Variablen verwenden.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    25.05.2007
    Ort
    Giessen und Fulda
    Alter
    39
    Beiträge
    81
    for(e=0;e<2000;e++)
    {Sleep(72);}
    --------------------------------
    schreib das mal anders, das ist nisht sehr übersichtlich.

    schreib lieber for(e=0;e<2000;e++)
    {
    Sleep(72);
    }
    ODER wenn nur eine Anweisung in der for-schleife steht kannst du die klammern auch weglassen, weil der compiler, nur die nächste zeile nach der for-Schleife als auszuführenden code betrachtet. Ich würde aber Variante 1 benutzen

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    23.03.2007
    Ort
    Wien
    Alter
    32
    Beiträge
    55
    ich hatte es ja ohne die {...} sondern die nächste zeile das hat aber irgendwie nicht geklappt

    merkwürdig fiunde ich das e++ das gibt es doch in ansi C nicht sondern erst in c++ ??? warum ist es da verfügbar kann man dann auch OOP coden Klassen etc.?

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.063
    e++ geht auch in ansi c, das ist nur zur namensgebungvon c++ geworden... das passt schon. zumindest sind die compiler mittlerweile großzügig genug =)

    und so kleine anweisungen kann mal so schreiben:

    for(e=0;e<2000;e++) Sleep(72);
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests