- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Asuro, bestimmte Zeit einstellen (z.b. beim Rückwärtsfahren)

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    Praxistest und DIY Projekte
    Zitat Zitat von Valen
    Edit von radbruch: if (t1==t2)

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von Ollowain
    was ich mir bei der Funktion gedacht habe ist folgendes. In der Anleitung steht:

    Bit0 (1) -> K6
    Bit1 (2) -> K5
    Bit2 (4) -> K4
    Bit3 ( -> K3
    Bit4 (16) -> K2
    Bit5 (32) -> K1

    Wenn ich jetz die werte von K6 bis K2 zusammen zähl komm ich auf 31.
    Deshalb meine überlegung -> alles was über 31 ist muss K1 sein. (selbst wenn alle anderen gleichzeitig gedrückt sind).
    Bin ich soweit richtig?
    Nein, leider nicht ganz. Weil wenn K1,K2 und
    K3 gleichzusammen eingedruckt sind (asuro stosst gegen ein weiches objekt an auf seiner linker seite) ist das gleich an 8+16+32=56. Das ist auch grosser als 31, aber nicht nur K1. Oder zb. K1 mit K6 als störungsignal (K6 ist nicht wirklich eingedrukt aber der analog-digital converter ADC hat ein wenig falsch gemessen wegen den motorrausch) ist das auch grosser als 31: 32+1=33.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    01.10.2009
    Beiträge
    25
    okay jetz hab ichs verstanden. Wie läuft das mit der kalibrierung der Taster?

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Diesen thread habe ich gefunden durch suchen auf 'kalibrieren' im asuro abteilung:

    https://www.roboternetz.de/phpBB2/ze...ht=kalibrieren

    Im dritten bericht steht ein beispiel wie mann das machen kan beim orginalem lib. Die erweiterte lib had einer andere funktion fur PollSwitch, und speichert den kalibrier wert in einer bestimmte datei ("myasuro.h" wenn ich mich nicht irre) Den orginale lib ist gut genug fur anfanger mit Asuro. Den erweiterten lib ist keinen 'muss' wie du sagst. Aber es ist was besser documentiert, und hat einiger fehler im code aufgelost. Den code erweiterungen machen die code aber etwas schwieriger zu verstehen. Weil die code uber mehrere dateien verteilt ist. Ich wurde das nur emphelen wenn du die orginal lib c-code richtig lesen unt verstehen kannst.

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    14.10.2009
    Beiträge
    64
    So, ich hab mich heut endlich mal ran gemacht das mit dem Programmieren etwas zu blicken.
    Geradeaus fährt er schonmal, an der Wand setzt er auch minimal zurück, aber eben nur minimal.
    Die Taster Funktionieren einwandfrei. Solange man sie gedrückt hält fährt er rückwärts und sofort beim loslassen wieder vorwärts.

    Jetzt wollt ich die Schleife
    for(i=0;i<1000;i++){
    Sleep (72);
    }
    ins Programm bringen und auf einmal fährt er nur noch rückwerts im Kreis.
    Linkes Rad flüssig, rechtes Rad stotternd, sobald ich den Taster drück macht er dann das was er soll. (zurücksetzen für ne Zeit)
    Aber warum fährt er dauernd rückwärts ??
    Weiß jemand Rat, oder wie ich die Zeit des Rückwärtsfahrens mit MSleep und ohne schleife hinbekomme?
    Hab schon versucht etwas in die asuro.h zu schreiben, is aber wohl nicht so einfach mit reinschreiben .


    Code:
    #include "asuro.h"
    
    int main(void)
    {
    
    unsigned char t1, t2;
    int i;
    
    Init();
    while(1)
    {
    	t1 = PollSwitch();
        t2 = PollSwitch();
    
    	if (t1 == 0 && t2 == 0)
    	{
    	MotorDir(FWD,FWD);
    	MotorSpeed(175,180);
    	BackLED(OFF,OFF);
    	FrontLED(ON);
    	}
    
    else if( t1 && t2 && t1 == t2)
    {
    
    
    MotorSpeed(0,0);
    StatusLED(RED);
    
    	
                
         
    	if( t1 & 0x07 ) //Tasten links gedrückt??
    	{	
    	     
    	FrontLED(OFF);
    	BackLED(ON,OFF);
    	MotorDir(RWD,RWD);
    	MotorSpeed(100,0);		// linkes rad rückwärts
    	
    		
    	}
    	
    	if( t1 & 0x38) //Tasten rechts gedrückt ?? 
    	{ 
    			         
    	FrontLED(OFF);
    	BackLED(OFF,ON);
    	MotorDir(RWD,RWD);
    	MotorSpeed(0,100);		//rechtes Rad Rückwärts
    			
    	}
          
    ***********hier hatte ich mal die Schleife drin ********************
    	
    	
    	
    	
    }
    return 0;
    }

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Wie hasst du das compiliert gekriegen. Die while-schleife braucht noch einer klammer zum ende. Die anzahl von "{" sind nicht gleich and die anzahl von "}". Auf welchem platz hast du ihn in einer alter version deiner program gesteckt?

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    20.04.2008
    Ort
    Bremen
    Alter
    34
    Beiträge
    85
    Hachja wieso einfach wenns auch kompliziert geht

    Sorry, aber irgendwie macht ihr das alles viel zu kompliziert^^ Erstmal zum MsSleep Hier mal eine Selbstgebaute Funktion die im Grunde genommen das Selbe macht:

    Code:
    void pause (int zeit)
    {
         int t;
         
         for (t=0; t<zeit; t++)
         {
                Sleep (72);
         }
    }
    Einfach die Funktion in dein Programm schreiben (weis nicht ob man das auch einfach so in die "asuro.h" schreiben kann, ich habe dies immer als zusätzliche Datei gespeichert und binde sie dann ein als "pause.h"). Also nach dem include in die nächste Zeile ein
    Code:
    void Pause (int zeit);
    und nach dem Hauptprogramm den oben genannten code Einfügen schon kannst du einfach "pause (1000)" in dein Hauptprogramm eingeben und es wartet 1sek ohne irgendwelche Schleifen

    Zu den Problem mit den Tastern:
    Code:
    #include "asuro.h"
    
    void pause (int zeit);
    
    int main(void)
    {
            Init();
    	int a;
    	
    	while (1)
    	{
    		
    		while (PollSwitch () == 0)
    		{
    			StatusLED (GREEN);
    			
    			MotorDir (FWD, FWD);
    			MotorSpeed (150, 150);
    			
    			pause (50);
    		}
    		
    
    		if ((PollSwitch()==1)||(PollSwitch==2))
    		{
                           BackLed (ON,OFF);
    
                           MotorDir (RWD, RWD);
                           MotorSpeed (120,120);
    
                           pause (1000);
    
                           MotorDir (FWD,FWD);
                           MotorSpeed (120, 0);
    
                           pause (500);
    
                           MotorSpeed (0,0);
                    }
    
    		//Das selbe spiel mit PollSwitch==16/32 nur diesmal andersherum mit den Geschwindigkeiten und den Backleds
    		
    		BackLED (OFF, OFF);
    	}
    	
    	StatusLED (RED);
           return 0;
    }
    
    
    void pause (int zeit)
    {
         int t;
         
         for (t=0; t<zeit; t++)
         {
                Sleep (72);
         }
    }
    So sollte es eigentlich funktionieren^^ Hab aber wie so oft das Problem ich kanns hier nicht testen... Sollte es nicht Funktionieren passt mit dem if und deren Klammersetzung etwas nicht und es muss ein while rein. Bin mir aber nicht ganz sicher dessen^^

    Das Problem bei deinem Programm ist: du hast kein Sleep drinn weswegen der Prozessor nicht eine bestimmte Zeit rückwärts fährt nur eben dann wenn einer der Tasten gedrückt worden ist^^ Aber im grunde genommen sollte dein Programm auch funktionieren fällen eben nur ein paar Pausen drinn

    beste Grüße
    the.speciali

    EDIT: Init hat gefehlt, return 0...
    Und stimmt das mit der While Schleife ist mir garnicht aufgefallen Valen.
    Wer den Himmel auf Erden sucht hat im Erdkundeunterricht geschlafen!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress