-         

Ergebnis 1 bis 4 von 4

Thema: kommunikationsproblem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.01.2010
    Beiträge
    18

    kommunikationsproblem

    Anzeige

    hallo
    ich möchtemeinem asuro beibringen je nach taste auf der tastaur einen anderen modus auszuführen also ein anderes programm ab zu spielen
    die inzelnen programme habe ich auch zusammenkopiert nur leider speichert sich die gedrückte taste nicht in der variable daten

    --später will ich das noch mit vb ergänzen
    aber erstmal sollte es mit ht funktionieren ....

    ich hoffe ihr könnt mir helfen ...
    hier der quellcode:

    Code:
    # include "asuro.h"
    # define sin_d(x) (sin((x)*M_PI/180)) 
    int main(void)
    {
    Init();
    
    
    char Ende=1;
    char DatenEmpfangen=1;
    int r=100;
    int l=100;
    int g=45;
    int h;
    int helligkeit=100;
    int u=150;
    int v=100;
    int i;
    const int DAUERGELB1=500;
    const int DAUERGELB2=1000;
    const int DAUERGRUEN=5000;
    const int DAUERROT=3000;
    
    unsigned char LINIE='1';
    unsigned char ABGRUND='2';
    unsigned char AMPEL='3';
    unsigned char KREIS='4';
    unsigned char ECK='5';
    unsigned char FF='6';
    unsigned char STOPP='0';
    
    unsigned char Winkel;
    unsigned char Geschwindigkeit=100;
    unsigned char Distanz;
    unsigned char Radius=100;
    unsigned char p;
    unsigned int n[1];
    unsigned char N;
    unsigned char daten[1];
    unsigned int info;
    unsigned int data[2];
    unsigned int end[1];
    unsigned char E;
    
    EncoderInit();
    LineData(data);
    
    
    while(1)
    {
    	beginn:
    	if(DatenEmpfangen == 1 && Ende == 1)
    	{
    		SerRead(&daten, 1, 0);
    		info = daten;
    		Ende=0;
    		StatusLED(YELLOW); 
    		if(info ==  '1')
    		{
    		SerWrite("Zeichen empfangen !!\r\n",25);
    		}
    	}
    	else if(Ende == 0)
    	{
    	//Linie:L
    		if(info == LINIE)
    		{
    			while(Ende == 0)
    			{
    				LineData(data);
    				StatusLED(GREEN);	
    
    				if(data[0]<data[1])
    					{
    					BackLED(OFF,ON);
    					r=r+g;
    					l=l-g;
    					MotorDir(FWD, FWD);
    					MotorSpeed(l, r);
    					}
    			
    				if(data[1]<data[0])
    					{
    					BackLED(ON,OFF);
    					l=l+g;
    					r=r-g;
    					MotorDir(FWD, FWD);
    					MotorSpeed(l, r);
    					}
    			
    				if(data[1]=data[0])
    					{
    					MotorDir(FWD, FWD);
    					MotorSpeed(l, r);
    					}
    					l=100;
    					r=100;
    				SerRead (&end, 1, 1);
    				E=end[0];	
    				if(E == STOPP)//STOPP
    					{
    					Ende=1;
    					DatenEmpfangen=1;
    					}
    			}
    		}
    		
    		//Abgrund:G
    		else if(info == ABGRUND)
    		{
    			while(Ende == 0)
    			{	
    				LineData(data);
    				StatusLED(GREEN);
    
    
    				if((data[0]>helligkeit && data[1]>helligkeit) || Ende == 1)
    					{
    					StatusLED(RED);
    					Msleep(1);
    					MotorDir(FWD, FWD);
    					MotorSpeed(BREAK, BREAK);
    					}
    				else
    					{
    					StatusLED(GREEN);
    					MotorDir(FWD, FWD);
    					MotorSpeed(u, u);
    					}
    				SerRead (&end, 1, 1);
    				E=end[0];	
    				if(E == STOPP)//STOPP
    					{
    					Ende=1;
    					DatenEmpfangen=1;
    					}
    			}
    				
    		}
    
    		//Ampel:A
    		else if(info == AMPEL)
    		{
    			while(Ende == 0)
    			{
    				StatusLED(GREEN);
    				for(i = 1; i<=40; i++) //Initialisierung; Bedingung; Reinitialisierung
    				{
    					StatusLED(RED);
    					Msleep (DAUERROT);
    					StatusLED (YELLOW);
    					Msleep (DAUERGELB1);
    					StatusLED (GREEN);
    					Msleep (DAUERGRUEN);
    					StatusLED (YELLOW);
    					Msleep (DAUERGELB2);
    					
    				}
    			
    				BackLED(OFF, OFF);
    				StatusLED(GREEN);
    				Ende=1;
    				DatenEmpfangen=1;
    			}
    		}
    		
    		//Kreis:K
    		else if(info == KREIS)
    		{
    			while(Ende == 0)
    			{
    			StatusLED(GREEN);
    			MotorDir(FWD, FWD);
    			MotorSpeed(200, 100);
    			Msleep(6000);
    				SerRead (&end, 1, 1);
    				E=end[0];	
    				if(E == STOPP)//STOPP
    				{
    				Ende=1;
    				DatenEmpfangen=1;
    				}
    			}
    			Ende=1;
    			DatenEmpfangen=1;
    		}
    		
    		//n-Eck:N
    		else if(info == ECK)
    		{
    			StatusLED(YELLOW);
    			SerRead(&n, 1, 1);
    			N=n[0];
    			Winkel=(N-2)+180;
    			p=N;
    			Distanz=(sin(Winkel))*Radius;
    			StatusLED(GREEN);
    			for(p; p<N;p++)
    				{
    				GoTurn(Distanz, Winkel, Geschwindigkeit);
    				}
    			SerRead (&end, 1, 1);
    				E=end[0];	
    				if(E == STOPP)//STOPP
    				{
    				Ende=1;
    				DatenEmpfangen=1;
    				}
    		}
    		
    		//Feuerwehr:F
    		else if(info == FF)
    		{
    		p=0;
    		StatusLED(GREEN);
    		for(p; p<100; p++)	
    			{
    			StatusLED(RED);
    			BackLED(OFF, ON);
    			MotorDir(FWD, FWD);
    			MotorSpeed(200, 200);
    			Msleep(300);
    			BackLED(ON, OFF);
    			MotorSpeed(200, 200);
    			SerRead (&end, 1, 1);
    				E=end[0];	
    				if(E == STOPP)//STOPP
    				{
    				Ende=1;
    				DatenEmpfangen=1;
    				MotorSpeed(0, 0);
    				StatusLED(OFF);
    				BackLED(OFF, OFF);
    				}
    			}
    			MotorSpeed(0, 0);
    			StatusLED(OFF);
    			BackLED(OFF, OFF);
    			Ende=1;
    			DatenEmpfangen=1;
    		}
    		else 
    		{
    		}
    	}
    	else
    	{
    	goto beginn;
    	}
    }
    
    	while(1);
    return(0);
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    562
    Hallo

    Ich mach das in der main methode inetwa so:

    Code:
    ...
    while(1)
    {
    int b,c;
    if(c==0) // Wenn Zählvariabel noch nicht übernommen wurde s.u.
    {
    if(PollSwitch()==2 && PollSwitch()==2) b++; //Drücke diese Taste erhöhe Variabel
    if(PollSwitch()==4 && PollSwitch()==4) b--; //Drücke diese Taste verkleiner Variabel
    if(b<=1) b=1; // damit die Variabel nicht kleiner als 1 wird
    	if(PollSwitch()==8 && PollSwitch()==8) c=b; // Wenn die Taste gedrückt wird wir die Variable zur Auswahl übernommen
    	Sleep(200);Sleep(200);Sleep(200);Sleep(200);Sleep(200);
    	}
    	if(PollSwitch()==16 && PollSwitch()==16) {b=1;c=0;} //Beende Methode bzw setze wieder alles auf 0
    	if(c==1) Methode1(); // Wenn zB Zahl 1 ausgewählt wurde
    	if(c==2) Methode2(); // Wenn zB Zahl 2 ausgewählt wurde
            if(c==3) Methode3(); // Wenn zB Zahl 3 ausgewählt wurde
            ...
    }
    ...
    Kurz : Wenn man zB 3 mal den 2er Taster drückt und dann mit dem 8ter Taster bestätigt wird das (vorher bestimmte zu der Zahl zugeordnete) Programm ausgeführt. Mit dem 16er Taster wird wieder alles zum Ursprung gebracht. 2er Taster um Variabel zu erhöhen und 4er Taster um zu verkleiner (nicht <1 möglich)

    (Benutze ich so bei meinem RP6 beim Asuro noch nicht getestet)

    Gruß Thund3r
    Dein Gott sei mein Zeuge!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.01.2010
    Beiträge
    18
    danke für den vorschlag aber eig meinte ich eie taste auf der tastatur ...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    562
    Hallo

    Kannst du ja auch für die Tastatur Taster umschreiben^^

    Gruß Thund3r
    Dein Gott sei mein Zeuge!

Berechtigungen

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