- Labornetzteil AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Seltsamer Taster-Fehler

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Zeig doch bitte mal eine komplette und komplierfähige Version von deinem Kollision-Programm.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2011
    Ort
    Leonberg, Stuttgart
    Beiträge
    11
    Normalerweiße auf 3 Dateien verteilt, hier der Einfachheit halber in einer:

    Code:
    #include "asuro.h"
    
    // Prototypen
    void Kollisionskontrolle (void);
    void Drehung (int Grad,unsigned char Geschwindigkeit);
    
    int main(void)
    {
    
    	Init();
    	
    	MotorDir(FWD,FWD);
    	MotorSpeed(210,210);
    	
    	while(1) 
    	{
    		Kollisionskontrolle ();
    		Msleep(5);
    	}
    	
    
    	return 0;
    }
    
    
    
    
    
    
    void Kollisionskontrolle (void)
    {
    	char Zaehler = 0; // Zaehler für die Kontrolle der Taster
    	int i;
    	
    	// Teste auf Kollision
    	for (i=0; i<5; i++)
    	{
    		if (PollSwitch() != 0)		Zaehler++;
    		
    		Msleep(1);
    	} 
    	
    	// Ist der Zahler größer als 1, so leigt eine Kollision vor
    	// In diesem Fall muss anhand des Pollswitch-Wertes, der auf Zaehler übergeben wird
    	// unterschieden werden wie zu reagieren ist.
    	if (Zaehler > 1)		
    	{
    		Zaehler = PollSwitch();
    		
    		// Unterschiedliche Reaktionen
    		
    		// Stößt ganz links an - Asuro dreht 45° rechts
    		if (Zaehler == 32)
    		{
    			// K1 gedrückt - 45° nach rechts
    			Drehung(45, 150);
    		}
    		
    		// Stößt ganz rechts an - Asuro dreht 45° nach links
    		else if (Zaehler == 1)
    		{
    			// K6 gedrückt - 45° nach links
    			Drehung(-45, 150);
    		}
    		
    		// Stößt anders an - Asuro dreht 180°
    		else
    		{
    			// 90° Drehung
    			Drehung(180, 150);
    		}
    	}
    }
    
    
    
    void Drehung (int Grad,unsigned char Geschwindigkeit)
    {
    	int Faktor = 4;
    	unsigned char Left_Speed;
    	unsigned char Right_Speed;
    	
    	// Ursprüngliche Geschwindigkeit übernehmen
    	Left_Speed = OCR1A;
    	Right_Speed = OCR1B;
    	
    	
    	// Sicherheitshalber kurz zurücksetzen
    	MotorDir(RWD,RWD);
    	MotorSpeed(120,120);
    	Msleep(200);
    	MotorSpeed(0,0);
    	
    	// Unterscheide Links und Rechtsdrehung
    	if (Grad >0) // Rechtsdrehung
    	{
    		MotorDir(FWD,RWD);
    		MotorSpeed(Geschwindigkeit,-Geschwindigkeit);
    		Msleep(Grad * Faktor);
    	}
    	else // Linksdrehung
    	{
    		MotorDir(RWD,FWD);
    		MotorSpeed(-Geschwindigkeit,Geschwindigkeit);
    		Msleep(-Grad * Faktor);
    	}
    	
    	
    	
    	MotorDir(FWD,FWD);
    	MotorSpeed(Left_Speed,Right_Speed);
    	
    }

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    So vielleicht:
    Code:
    void Kollisionskontrolle (void)
    {
    	char Zaehler = 0; // Zaehler für die Kontrolle der Taster
    	char sw[5]; // Speicher für 5 Tastenwerte
    	int i;
    
    	// Teste auf Kollision
    	for (i=0; i<5; i++)
    	{
    		sw[i]=PollSwitch(); // Tastenwert speichern
    		if (sw[i] != 0) Zaehler++; // Wenn eine Taste erkannt wird Zähler erhöht
    
    		Msleep(1);
    	}
    
    	// Wurde fünf mal die selbe Taste erkannt?
    	if ((Zaehler == 5) && (sw[0]==sw[1]) && (sw[0]==sw[2]) && (sw[0]==sw[3]) && (sw[0]==sw[4]))
    	{
    		//Zaehler = PollSwitch();
    		Zaehler=sw[0];
    
    		// Unterschiedliche Reaktionen
    ...
    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
    09.07.2011
    Ort
    Leonberg, Stuttgart
    Beiträge
    11
    Guten morgen

    Ich habe deine Änderung vorgenommen und den Asuro geflasht. Momentan dreht er sich bei einem Aufprall zumindestens nicht mehrfach.
    Dafür kommt es vor, dass er nachdem er gegen einen Schrank oder Ähnliches fährt anschließend nur noch rückwärts fährt.
    Manchmal verändert er nach einer normaler Drehung auch die Geschwindigkeit, was wohl die Geschwindigkeit beim Drehen ist, jedoch nicht die ursprüngliche.
    Ein weiterer Fehler ist, dass er sich manchmal nach einem aufprall endlos dreht. Manchmal beginnen während der Fehler auch LEDs zu leuchten...

    Alle Versuche die ich unternommen hab um nach einem System hinter dem Fehler zu suchen laufen ins leere... der kleine hat wohl nen widerspenstiges Eigenleben entwickelt.
    Geändert von Tausendacht (17.08.2011 um 10:32 Uhr)

  5. #5
    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

    Wenn die LEDs blinken gabs einen Reset oder eine "VL"-Meldung. Beides könnte von schwachen/leeren Akkus kommen, z.B. nach längerer Fahrtdauer, oder von den Erschütterungen beim Aufprall.

    Grundsätzlich muss man bedenken, dass jede Kollision den asuro komplett erschüttert. Die Taster sind fast schon am Ende des Betätigungswegs, wenn der Kontakt durchschaltet. Und sie werden dann bis zum Anschlag gedrückt, weil der asuro nicht schnell genug bremsen kann. Dadurch ist die mechanische Belastung an der Platine recht hoch. Schlechte Lötstellen, Kontaktprobleme im Batteriehalter oder am Schalter, Blockierströme der Antriebe, und was weiß ich noch alles, könnte stören.
    PHP-Code:
    int main(void)
    {
        
    int i;

        
    Init();
        
        for(
    i=1i<10i++) // Reseterkennung
        
    {
           
    StatusLED(3);
           
    Msleep(200);
        }
        
    StatusLED(GREEN);
        
        while(
    1)
        {
            
    MotorDir(FWD,FWD);
            
    MotorSpeed(210,210);

            
    Kollisionskontrolle ();

            
    Msleep(5);
        }
        return 
    0;

    Zusätzlich könntest du die Tastenwerte zur Kontrolle an ein Terminal senden:
    https://www.roboternetz.de/community...ernd-kollision
    https://www.roboternetz.de/community...l=1#post284529
    https://www.roboternetz.de/community...rekt-auslesen?
    https://www.roboternetz.de/community...e-korrigieren?

    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!

Ähnliche Themen

  1. seltsamer ueberlauf ??
    Von goara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 03.02.2008, 22:26
  2. Asuro Taster K1 - Fehler Hilfe
    Von Alex23 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 04.07.2007, 12:42
  3. Seltsamer Sensor
    Von Der_Anfänger im Forum Sensoren / Sensorik
    Antworten: 17
    Letzter Beitrag: 17.06.2007, 13:38
  4. Seltsamer Fehler - wer weiß Rat?
    Von Powell im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 26.11.2006, 20:57
  5. seltsamer IR-Empfänger
    Von StEndres im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 19.02.2006, 18:43

Berechtigungen

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

Labornetzteil AliExpress