- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: Antikolisionsprogramm mit Tastern

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von JensK
    Registriert seit
    27.02.2007
    Ort
    Hamburg
    Alter
    32
    Beiträge
    254

    Antikolisionsprogramm mit Tastern

    ich habe mal ein programm mit meine Vater entworfen, wo der Asuro, wenn er irgendwo gegen fährt dem hinderniss ausweicht.

    nur jetzt haben wir ein problem... alle Taster senden immer verschieden signale von sich an den hyperterminal... wie kann man das programm optimieren, so dass es funktioniert?
    ich hoffe ihr könnt uns helfen

    schonmal vielen dank für eventuelle Hilfe

    MfG

    JensK
    wenn ihr die .hex braucht um es zu testen.. dann fragt einfach nach
    Code:
    /**************************************************************************************
    *
    * File Name:   test.c
    * Project  :   ASURO
    *
    * Ver.     Date         Author   Comments
    * -------  ----------   ------   ------------------------------
    * 1.00	   17.04.2006   mko		 build
    * 1.10	   17.04.2006   mko		 erweiterte asuro.h vom 27. September 2005 eingebunden
    * 1.20	   20.04.2006   mko		 erweitert um Odometriedaten und doppeltes Auslesen der 
    *								 Schalter
    * 1.30	   02.03.2007   mko		 erweitert "geradeausfahren"
    *
    ****************************************************************************************/
    
    
    #include "asuro.h"
    #define LA 0x20   // Taster links aussen
    #define LM 0x10   // Taster links mitte
    #define LI 0x8    // Taster links innen
    #define RI 0x4    // Taster rechts innen
    #define RM 0x2    // Taster rechts mitte
    #define RA 0x1    // Taster rechts aussen
    #define LRI 0xC   // Taster links und rechts innen
    #define LAM 0x30  // Taster links aussen und mitte
    #define LRM 0x12  // Taster links und rechts mitte
    #define RAM 0x3   // Taster rechts aussen und mitte
    
    #define LMIN 0x60 // Links läuft der Motor früher an als rechts
    #define RMIN 0x60 // rechts etwas höher beginnen
    #define LMAX 0x64 // Maximal 200, gleiche maximal Umdrehung für beide Seiten
    #define RMAX 0x64 // Maximal 200
    
    unsigned int i, j;
    unsigned int lspeed, rspeed;
    unsigned char taste1, taste2;
    unsigned int odata[1];
    
    int NachLinksAusweichen(void)
    {
    // LED einschalten
    	BackLED(OFF,ON);
    // Motor stoppen
    	MotorSpeed(0,0);
    // Rechtskurve zurück
    	MotorDir(RWD,BREAK);
    	MotorSpeed(120,0);
    	Msleep(1000);
    	MotorSpeed(0,0);
    // LED ausschalten
    	BackLED(OFF,OFF);
    // Weiterfahren
    	MotorDir(FWD,FWD);
    	lspeed=LMIN;
    	rspeed=RMIN;
    	return 0;
    }
    
    int NachRechtsAusweichen(void)
    {
    // LED einschalten
    	BackLED(ON,OFF);
    // Motor stoppen
    	MotorSpeed(0,0);
    // Linkskurve zurück
    	MotorDir(BREAK,RWD);
    	MotorSpeed(0,120);
    	Msleep(1000);
    	MotorSpeed(0,0);
    // LED ausschalten
    	BackLED(OFF,OFF);
    // Weiterfahren
    	MotorDir(FWD,FWD);
    	lspeed=LMIN;
    	rspeed=RMIN;
    	return 0;
    }
    
    int ZurueckSetzen(void)
    {
    // LED einschalten
    	BackLED(ON,ON);
    // Motor stoppen
    	MotorSpeed(0,0);
    // Linkskurve zurück
    	MotorDir(RWD,RWD);
    	MotorSpeed(LMAX,RMAX);
    	Msleep(1000);
    	MotorSpeed(0,0);
    // LED ausschalten
    	BackLED(OFF,OFF);
    // Weiterfahren
    	MotorDir(FWD,FWD);
    	lspeed=LMIN;
    	rspeed=RMIN;
    	return 0;
    }
    
    int Aufgeben(void)
    {
    // LED einschalten
    	BackLED(ON,ON);
    // Motor stoppen
    	MotorSpeed(0,0);
    // LED ausschalten
    	BackLED(OFF,OFF);
    // Status LED ausschalten
    	StatusLED(OFF);
    }
    
    int main(void)
    {
    	Init();
    	
    	// Vorwärts fahren
    	MotorDir(FWD,FWD);
    	// mit minimaler Geschwindigkeit beginnen
    	lspeed = LMIN;
    	rspeed = RMIN;
    	do
    	{
    		// Eine Sekunde mit dieser Geschwindigkeit fahren 
    		Msleep(1000);
    		// Solange Geschwindigkeit erhöhen, bis maximal Geschwindigkeit erreicht ist
    		if (lspeed < LMAX) lspeed++;
    		if (rspeed < RMAX) rspeed++;
    		MotorSpeed(lspeed,rspeed);
    		OdometrieData(odata);  // Auslesen der Umdrehung
    		PrintInt(odata[0]);    // Ausgabe auf serielle Schnittstelle
    		PrintInt(odata[1]);    // Ausgabe auf serielle Schnittstelle
    		taste1 = PollSwitch(); // Taster einmal abfragen
    		taste2 = PollSwitch(); // Taster zweitesmal abfragen
    		PrintInt(taste1);
    		PrintInt(taste2);
    		if (taste1 == taste2)  // beide Tastedrücke vergleichen
    		{
    			// Entscheiden, was zu tun ist
    			if (taste1 == LA) 
    				NachRechtsAusweichen();
    			else if (taste1 == LM) 
    				NachRechtsAusweichen();
    			else if ((taste1 == LI) || (taste1 == RI))
    				ZurueckSetzen();
    			else if (taste1 == RM) 
    				NachLinksAusweichen();
    			else if (taste1 == RA) 
    				NachLinksAusweichen();
    			else
    				Aufgeben();
    		}
    	} while (1);
    	return 0;
    }
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress