- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Probleme bei Programmierung der Snake Vision für ASURO

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2011
    Beiträge
    7
    Ich konnte mein Problem weitgehenst beheben. Allerdings kenne ich keinen Befehl, der den ASURO dazu bringt, nachdem er rückwärts gefahren ist, das gesamte Programm zu unterbrechen und einfach nichts zu tun...

    Code:
    #include "asuro.h"
    
    // Schwellen für die intensitätsabhängige Geschwindigkeit
    
    #define THRESH1 20
    #define THRESH2 80
    #define THRESH3 200
    
    
    void ThermalData(unsigned int *data)
    {
    	// ThermalData() funktioniert genauso, wie LineData(), ...
    	// ... nur dass dabei die interne Spannungsreferenz als ...
    	// ... AD-Wandlerreferenz verwendet wird.
    	
    	// Prozessorinterne Referenz verwenden
    	// Multiplexer auf linken Sensor schalten
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;	
    	// Wandlung starten
    	ADCSRA |= (1 << ADSC);
    	// Warten, bis Wandlung beendet			        
    	while (!(ADCSRA & (1 << ADIF)));	                
    	// ADCIF zurücksetzen
    	ADCSRA |= (1 << ADIF);			        
    	// ADC-Wert auslesen
    	data[0] = ADCL + (ADCH << 8);
    
    	// Prozessorinterne Referenz verwenden
    	// Multiplexer auf rechten Sensor schalten
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
    	// Wandlung starten
    	ADCSRA |= (1 << ADSC);
    	// Warten, bis Wandlung beendet		
    	while (!(ADCSRA & (1 << ADIF)));	
    	// ADCIF zurücksetzen
    	ADCSRA |= (1 << ADIF);
    	// ADC-Wert auslesen
    	data[1] = ADCL + (ADCH << 8);
    }
    
    
    int main(void)
    {
    	// Speicher für die Messwerte bereitstellen
        	unsigned int tdata[2];
    	unsigned int speed;
    	signed int diff,sum;
        	Init();
    	// Motoren immer auf vorwärts
    	MotorDir(FWD,FWD);
    	while(1)
        	{
    		// Messwerte einlesen
            	ThermalData(tdata);
    		// Die Summe der Werte wird für die Berechnung der ...
    		// ... Geschwindigkeit genutzt
    		sum=tdata[0]+tdata[1];
     		// Signal stark genug?
    		if (sum>THRESH1) {
    			
    			speed=140;
    			// Ziemlich stark?
    			if (sum>THRESH2) {
    				
    				speed=140;
    			}
    			// Sehr stark?
    			if (sum>THRESH3) {
    				StatusLED(OFF);
    				speed=140;
    			}
    			// Richtung bestimmen
    			diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
    			if (diff>4) {
    				// Links deutlich wärmer? Nach links fahren!
    				BackLED(ON,OFF); 
    				MotorSpeed(0,speed);
    			}
    			else if (diff<-4) {
    				// Rechts deutlich wärmer? Nach rechts fahren!
    				BackLED(OFF,ON); 
    				MotorSpeed(speed, 0);
    			}
    			else {
    				// Sonst geradeaus!
    				BackLED(OFF,OFF); 
    				MotorSpeed(speed, speed);
    
    				if(PollSwitch()){
    				MotorSpeed(0,0);
    				Msleep(900);
    				MotorDir(RWD,RWD);
    				MotorSpeed(140,140);
    				Msleep(900);
    				StatusLED(GREEN);}
    			}
    		}
    		//else if(PollSwitch()){
    		//MotorSpeed(0,0);
    		//StatusLED(GREEN);}
    		
    		else {
    			// Keine Wärmequelle in Sicht? Stehen bleiben!
    			StatusLED(OFF);
    			BackLED(OFF,OFF);
    			MotorSpeed(0,0);
    
          
    
    		}
        	}     
    	return 0;
    	}

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    bau dir noch eine Variable für den Status ein, je nach Wert lässt du ihn in deiner main-schleife dann die entsprechende Aktion ausführen
    Code:
    switch(Status){
    case(0): {/*hier deine Snakevision in der du bei einem Hindernis den Status auf 1 erhöhst*/ break;}
    case(1): {/*hier dein Rückwärts-fahren bis du fertig bist und dann Status auf 2 erhöhst*/ break;}
    case(2): {/hier das gelangweilte Rumstehen bis du irgendwas machst dass den Status auf 0 zurücksetzt ODER auf 3 erhöht falls du noch was vor hast*/ break;}
    default: {/*default kannst du weglassen, aber solltest du deinem Status nicht vertrauen, kann es nicht schaden eine Fehlerausgabe oder sowas mit einzubauen ^^*/(kein break bei dem letzten Case/default)}
    }
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.05.2011
    Beiträge
    7
    @Ceos,

    vielen Dank für den Tipp. Ich hab versucht deinen Hinweis umzusetzen und bin leider gescheitert... Mein ASURO fährt nach dem Einschalten sturr gerade aus und schaltet die LED auf Grün. Bei einem Tastendruck ändert sich daran auch nichts.
    Hier mein Programm:
    Code:
    #include "asuro.h"
    
    // Schwellen für die intensitätsabhängige Geschwindigkeit
    
    #define THRESH1 20
    #define THRESH2 80
    #define THRESH3 200
    #define STATUS 0
    
    void ThermalData(unsigned int *data)
    {
    	// ThermalData() funktioniert genauso, wie LineData(), ...
    	// ... nur dass dabei die interne Spannungsreferenz als ...
    	// ... AD-Wandlerreferenz verwendet wird.
    	
    	// Prozessorinterne Referenz verwenden
    	// Multiplexer auf linken Sensor schalten
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;	
    	// Wandlung starten
    	ADCSRA |= (1 << ADSC);
    	// Warten, bis Wandlung beendet			        
    	while (!(ADCSRA & (1 << ADIF)));	                
    	// ADCIF zurücksetzen
    	ADCSRA |= (1 << ADIF);			        
    	// ADC-Wert auslesen
    	data[0] = ADCL + (ADCH << 8);
    
    	// Prozessorinterne Referenz verwenden
    	// Multiplexer auf rechten Sensor schalten
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
    	// Wandlung starten
    	ADCSRA |= (1 << ADSC);
    	// Warten, bis Wandlung beendet		
    	while (!(ADCSRA & (1 << ADIF)));	
    	// ADCIF zurücksetzen
    	ADCSRA |= (1 << ADIF);
    	// ADC-Wert auslesen
    	data[1] = ADCL + (ADCH << 8);
    }
    
    
    int main(void)
    {
    	// Speicher für die Messwerte bereitstellen
        	unsigned int tdata[2];
    	unsigned int speed;
    	signed int diff,sum;
    	StatusLED(OFF);
    	
    	
    
        	Init();
    switch(STATUS){
    case(0): {// Messwerte einlesen
            	ThermalData(tdata);
    		// Die Summe der Werte wird für die Berechnung der ...
    		// ... Geschwindigkeit genutzt
    		sum=tdata[0]+tdata[1];
     		// Signal stark genug?
    		if (sum>THRESH1) {
    		    MotorDir(FWD,FWD);
    			speed=140;
    			// Ziemlich stark?
    			if (sum>THRESH2) {
    				speed=140;
    			}
    			// Sehr stark?
    			if (sum>THRESH3) {
    				speed=140;
    			}
    			// Richtung bestimmen
    			diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
    			if (diff>4) {
    				// Links deutlich wärmer? Nach links fahren!
    				BackLED(ON,OFF); 
    				MotorSpeed(0,speed);
    			}
    			else if (diff<-4) {
    				// Rechts deutlich wärmer? Nach rechts fahren!
    				BackLED(OFF,ON); 
    				MotorSpeed(speed, 0);
    			}
    			else {
    				// Sonst geradeaus!
    				BackLED(OFF,OFF); 
    				MotorSpeed(speed, speed);
    
    				if(PollSwitch()){
    				STATUS==1;}
    				break;
    
    			}
    case(1): {      StatusLED(GREEN);
    				MotorSpeed(0,0);
    				Msleep(900);
    				MotorDir(RWD,RWD);
    				MotorSpeed(140,140);
    				Msleep(900);
    				STATUS==2;
    				break;}
    case(2): { StatusLED(YELLOW);
               MotorSpeed(0,0);
    		   if(PollSwitch()){
    		   STATUS==0;}
    		   break;
    		   }
    
    		   }
    }
    
    }
    }
    ich befürchte, dass meine STATUS-deklarierung nicht passt oder die brea-Befehle falsch gesetzt sind. Ich würe mich über weitere Tipps freuen, da ich der Meinung bin, dass ich dieses Projekt so realisieren kann.

    Gruß nooby21

Ähnliche Themen

  1. Projekt: RP6 mit Snake Vision
    Von Thund3r im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 21.09.2011, 19:58
  2. Snake Vision
    Von Mangoon im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 12.05.2010, 17:51
  3. Taster auf ASURO Snake Vision-Platine ansprechen
    Von Zehplusplus im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 04.04.2010, 13:53
  4. Snake Vision will nicht.
    Von Obi-Wan1234 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 18.06.2008, 13:19
  5. Asuro "Snake Vision"
    Von Alina89 im Forum Asuro
    Antworten: 18
    Letzter Beitrag: 21.01.2008, 20:30

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test