-         

Ergebnis 1 bis 7 von 7

Thema: Am Abgrund umkehren

  1. #1

    Unglücklich Am Abgrund umkehren

    Anzeige

    Hallo liebe Community,

    ich steh noch ziemlich am Anfang der C Programmierung...
    Hab mich jetz mal an einem Programm versucht, dass ASURO solange geradeaus fahren lässt, bis der Untergrund um 20 dunkler wird, als der eingelesene Wert...
    Dann soll er mit voller Kraft zurückfahren, ein stück nach Rechts drehen und dann wieder gerade aus.

    Hier mal der Code:
    Code:
    #include "asuro.h" 
    int main(void) 
    {
    
    FrontLED(ON);					//Front LED an
    unsigned int Data2;
    LineData(Data2);
    
    int STOP = Data2-20;			//STOP wert Berechnen
      	
    	while(1)
    	{
    		unsigned int lineData[2]; 	
    			
    			
    			LineData(lineData); 
    			while (((lineData[0] < STOP) && (lineData[1] < STOP)) || ((lineData[0]+lineData[1]) < (2*STOP))) 	//solange bis der eingelesene wert dunkler wird als STOP
    			{
    			MotorDir(FWD,FWD);
    			MotorSpeed(180,180);
    			BackLED(ON,ON);
    			}
    			
    		MotorDir(RWD,RWD);
    		MotorSpeed(255,255);
    		BackLED(ON,ON);
    		Msleep(5000);
    		MotorSpeed(180,0);
    		Msleep(2000);
    		MotorSpeed(0,0);
    	}
    
       return 0; 
    }
    Es lässt sich fehlerfrei kompolieren, jedoch tut asuro gar nichts, nichtmal die frontLED geht an?!
    Kann sich das mal jemand anschauen?
    Hab schon im forum gesucht, aber keine lösung im forum gefunden -.-

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Ich habe die "Fehlersuche" beim fehlenden Init() abgebrochen:

    int main(void)
    {
    Init();
    ....

    Gruß

    mic


    P.S.:
    Also da möchte ich doch mal ein großes Lob aussprechen. Dein Startbeitrag ist ja wirklich vorbildlich:

    - Info zur eigenen Befähigung
    - Funktion des Programms
    - Kompilierbarer Quellcode
    - Beschreibung der erreichten Funktion
    - Eigeninitiative bei der Suche nach einer Lösung

    Leserlich formuliert und alles drin was man für eine vernünftige Antwort benötigt. Klasse, Glückwunsch, willkommen im RN-Forum.
    Geändert von radbruch (09.03.2012 um 19:53 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Hallo
    danke, schön zu hören

    Dann darf ich eure Hilfe bestimmt noch einmal in anspruch nehmen =P
    Hier mal der verbesserte Code. Btw. danke für den Init(); Hinweis ^^

    Code:
    include "asuro.h" 
    int main(void) 
    {
    Init();
    
    FrontLED(ON);					//Front LED an
    int Data2[2];
    LineData(Data2);				//STOP wert einlesen
    
    int STOP = Data2 - 10;			//STOP wert speichern und eine Toleranz von 10 abziehen
      	
    	while(1)
    	{
    		unsigned int lineData[2];
    
    
    			LineData(lineData); 
    			while (lineData[0] < STOP) 	//solange bis der eingelesene wert dunkler wird als STOP
    			{
    			MotorDir(FWD,FWD);
    			MotorSpeed(180,180);
    			BackLED(ON,ON);
    			}
    
    		MotorDir(RWD,RWD);					//Zurück und nach rechts drehen
    		MotorSpeed(255,255);
    		Msleep(5000);
    		MotorSpeed(180,0);
    		Msleep(2000);
    		MotorSpeed(0,0);
    	}
    
       return 0; 
    }
    Er fährt jedoch nur geradeaus, ohne den Untergrund zu beachten.
    Mein verdacht ist, dass irgendwas beim einlesen des STOP Wertes falsch läuft.. Ich weiß jedoch nicht was <.<
    (btw. ich habe die bedingung für die while schleife mal vereinfacht, um dort einen Fehler auszuschließen.)
    LG Juli =)

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Ich habe es schnell mal überflogen , kann sein das ich mich täusche aber einmal "LineData" und dann "lineData" ..C macht schon einen Unterschied zwischen Line.. und line... ich meine lineData bei ..


    LineData(lineData);
    while (lineData[0] < STOP)...

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Ungetesteter Vorschlag:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	unsigned int lineData[2], STOP[2]; // Stopwert seitenabhängig verwalten
    
    	FrontLED(ON); // Front LED an
    	Sleep(10); // auch eine LED leuchtet nicht schlagartig
    
    	LineData(lineData); // Dummylesung, weil die erste Lesung meist fehlerhaft ist
    	LineData(lineData);
    
    	STOP[0] = lineData[0]-20; // STOP wert Berechnen (links)
    	STOP[1] = lineData[1]-20; // STOP wert Berechnen (rechts)
    
    	while(1)
    	{
    		MotorDir(FWD,FWD); // vorwärts cruisen...
    		MotorSpeed(180,180);
    		BackLED(ON,ON);
    		do
    			LineData(lineData);
    		while ((lineData[0] > STOP[0]) && (lineData[1] > STOP[1])); //solange bis der eingelesene wert dunkler wird als STOP
    
    		MotorDir(RWD,RWD); // zurücksetzen
    		MotorSpeed(255,255);
    		BackLED(OFF,OFF);
    		Msleep(5000);
    		MotorSpeed(180,0);
    		BackLED(OFF,ON);
    		Msleep(2000);
    		MotorSpeed(0,0);
    	}
       return 0;
    }

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Danke
    funktioniert wunderbar =)

    Ich schätze mal das mit dem fehlenden Init(); war nen test =P

    LG Juli

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Ups, ne, das war kein Test. Das hab ich irgendwie rausoptimiert. Sorry :)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Stopp am Abgrund
    Von Andrew7 im Forum Asuro
    Antworten: 13
    Letzter Beitrag: 12.03.2011, 15:35
  2. Bei Abgrund umkehren
    Von RoboRalf im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 29.06.2009, 20:03
  3. Byte umkehren
    Von Nordi^ im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 21.07.2007, 21:14
  4. LDR-Funktion umkehren???
    Von Mc_Loyd im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 20.10.2006, 13:18
  5. Abgrund Sensor, wie gemacht ?
    Von Ritchie im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 18.03.2006, 11:27

Stichworte

Berechtigungen

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