-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Eure Meinung bitte

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2011
    Beiträge
    15

    Idee Eure Meinung bitte

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Schönen guten Nachmittag,
    ich habe ein Programm geschrieben (Tischkante erkennen) und wollte nun eure Meinung dazu hören
    - was haltet ihr allgemein von dem Code
    - lässt sich daraus was machen
    - was könnte besser sein
    - was ist bereits in ordnung
    -- Außerdem brauche ich eure Hilfe bei einer Fehlermeldung--:
    test.c:4: error: expected identifier or '(' before '{' token
    bestimmt kennen einige von euch die schon und wissen was zu tun ist.

    Hier nun der Code(Ich hab sehr viele Kommentare verwendet nicht wundern):
    Code:
    #include "asuro.h" 
    #define STOP 80
    int main(void);
    {
    unsigned int lineData[2];
    int ergAL,ergBL,eL;
    int ergAR,ergBR,eR
    
         
       Init(); 
    unsigned char running = TRUE;
    //------------------------------------------------------------------------//
    {StatusLED(GREEN);
    	FrontLED(ON);				//LED wird eingeschaltet|ASURO steht auf dem Tisch
    		Msleep(10);				//Pause bis LED an ist
    	lineData(lineData);			//Speicher bereitstellen
    	Konf0L=  (lineData[0]);	//Ergebnis T9 	(Links)
    	Konf0R=  (lindData[1]);	//Ergebnis T10 	(Rechts)
    	
    //------------------------------------------------------------------------//
    
    {StatusLED(RED);				//Zur Prüfung ob ASURO auf hier misst
    	FrontLED(OFF);				//LED ausschalten|ASURO steht auf dem Tisch
    		Msleep(10);				//Wieder eine kurze Pause
    	lineData(lineData);			//Bereitstellen des Speichers
    	Konf1L= (lineData[0]);	 	//Ergebnis T9 	(Links)
    	Konf1R= (lindData[1]);		//Ergebnis T10 	(Rechts)
    	}
    //------------------------------------------------------------------------//
    
    /*
    Jetzt berechnen wir aus dem beiden eben ermittelten 
    Werten einen Zwischenwert. Dieser gibt an, wann der 
    ASURO auf dem Tisch ist. 
    */
    
    Konf01 = (Konf0-Konf1);
    //------------------------------------------------------------------------//
    /*
    Im nächsten Schritt wird ein Wert ermittelt,
    für den Fall, dass der ASURO sich über der 
    Tischkante befinden. Im Prinzip ist es 
    der gleiche Code wie eben.
    */
    
    
    //------------------------------------------------------------------------//
    {StatusLED(YELLOW);				//Einfach zur Unterscheidung, dass der ASURO HINTER dem Tisch misst
    	FrontLED(ON);				//LED wird eingeschaltet|ASURO steht über der Kante
    		Msleep(10);				//Pause bis LED an ist
    	lineData(lineData);			//Speicher bereitstellen
    	Konf2L=  (lineData[0]);	//Ergebnis T9 	(Links)
    	Konf2R=  (lindData[1]);	//Ergebnis T10 	(Rechts)
    	
    //------------------------------------------------------------------------//
    {StatusLED(RED);				//Zur Prüfung ob ASURO auch hier misst
    		FrontLED(OFF);			//LED ausschalten|ASURO steht über der Kante
    	Msleep(10);					//Wieder eine kurze Pause
    	lineData(lineData);			//Bereitstellen des Speichers
    	Konf3L= (lineData[0]); 	//Ergebnis T9 	(Links)
    	Konf3R= (lindData[1]);		//Ergebnis T10 	(Rechts)
    	
    //------------------------------------------------------------------------//
    
    /*
    Berechnung einiger Zwischenwerte
    */
    
    ZW01l= (Konf0L-Konf1L);		//ASURO auf dem Tisch| Zwischenwert für Links
    ZW01r= (Konf0R-Konf1R);		//ASURO auf dem Tisch| Zwischenwert für Rechts
    
    ZW23l= (Konf2L-Konf3L);		//ASURO über der Kante| Zwischenwert für Links
    ZW23r= (Konf2R-Konf3R);		//ASURO über der Kante| Zwischenwert für Rechts
    
    
    do { 
    	MotorSpeed	(150,150);
    	MotorDIR	(FWD,FWD);
            if ((ZW01l < ZW23l) || (ZW01r < ZW23R)) 
    		{ 
             MotorDir(RWD,RWD);
    		 MotorSpeed(225,225);
    		 Msleep(500);
    		 MotorSpeed(0,0);
             BackLED(ON,ON); 
            
          }       
       } 
       while(1); 
       return 0; 
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    1.
    -- Außerdem brauche ich eure Hilfe bei einer Fehlermeldung--:
    test.c:4: error: expected identifier or '(' before '{' token
    Was das Semikolon hinter main() weg!

    2.
    Ich hoffe die schlechte formatierung deines Codes liegt am kopieren ins Forum.

    3.
    Du überprüfst nur einmal ob die Linien Sensoren und danach fährt er ohne überprüfung immer weiter?!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2011
    Beiträge
    15
    1. Danke
    2. Ja liegt am kopieren
    3. Da liegt noch der Knackpunkt. Ich wollte es so machen, dass der ASURO zuerst "konfiguriert" wird.
    Er soll am Anfang die Werte ermitteln wenn er auf einem Tisch steht und die Werte wenn er über die Kante schaut.
    Natürlich müsste er die Werte immer wieder mit aktuellen Messergebnissen (bei der fahrt) abgleichen. Wenn ich da eine Hilfestellung bekommen
    würde wäre ich nicht ganz undankbar
    Anhand dieser Daten soll er sich besser an verschiedene Umgebungen anpassen können.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2011
    Beiträge
    15
    So, neuer Anlauf!
    Ich habe jetzt die Odometrie mit dem Linienfolger verbunden.
    Dabei dient der Linienfolger zur Erkennung von Tischkanten. Somit soll der ASURO
    Auf verschieden großen Flächen fahren können ohne irgendwo runter zu fallen.
    Code:
    #include "asuro.h" 
    int main(void) 
    {   
    unsigned int data[2];     
    Init();
    while(1)
    {       
    OdometrieData(data);    
    	if (data [0] || data [1] < (70))
        {StatusLED(GREEN);}    
    
    else
    	{StatusLED(RED);}
    
    LineData(data);
    if (data[0] < data[1])
    		{ 
             BackLED(ON,ON); 
    		 }
    else
    	{
    	BackLED(OFF,OFF);
    	}
    }
    }
    Ich habe noch keine Werte o.ä. eingesetzt da ich zuerst testen wollte wie die beiden Programme zusammenarbeiten.
    Meine Frage ist wie man den ASURO über die Odometrie dazu bringt, sich zu drehen und dann weiter zu fahren, wieder zu drehen usw.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2011
    Beiträge
    15
    Mittlerweile habe ich die Vermutung, dass mein ASURO die Programme nicht mehr richtig durchspielt.
    Zum test sollten die LEDs alle abwechselnd blinken, solange bis der ASURO ausgeschaltet wird.
    Nach dem flashen, wie könnte es anders sein, leuchteten alle LED gleichzeitig. Natürlich tat sich dann nichts mehr.
    Ich habe schon verschiedene Möglichkeiten mit return und while ausprobiert(an verschiedenen Stellen im Programm etc.)
    leider blieb der Erfolg des Ganzen auf der Strecke.
    Kann es vielleicht damit zusammen hängen, dass die Batterien leer sind oder kurz davor stehen?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Leider kann die Odometrie nicht Funktionieren wann den BackLEDs angeschaltet werden. Die Schaltungen sind Verknüpft. Die Odometrie LEDS müssen aus weil sonnst die BackLEDs kein minus Potential bekommen an den Kathoden.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Tobias Stosius Beitrag anzeigen
    Mittlerweile habe ich die Vermutung, dass mein ASURO die Programme nicht mehr richtig durchspielt.
    Zum test sollten die LEDs alle abwechselnd blinken, solange bis der ASURO ausgeschaltet wird.
    Nach dem flashen, wie könnte es anders sein, leuchteten alle LED gleichzeitig. Natürlich tat sich dann nichts mehr.
    Ich habe schon verschiedene Möglichkeiten mit return und while ausprobiert(an verschiedenen Stellen im Programm etc.)
    leider blieb der Erfolg des Ganzen auf der Strecke.
    Kann es vielleicht damit zusammen hängen, dass die Batterien leer sind oder kurz davor stehen?
    Ohne dein Programm gesehen zu haben können wir nicht Beurteilen ob es ein Software-Problem ist. Aber es ist möglich das den eingebaute Bootloader Programm eine zu niedrige Batteriespannung misst, und dann den StatusLED auf Rot schaltest. Dann soll auch biss abschalten "VL" gesendet werden über den IR-verbindung. Aber ich kann mich nicht erinnern ob alle der andere LEDs auch gleichzeitig angeschaltet werden. Weil das wurde den Batterie noch schneller leer machen. Das macht mir kein Sinn.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    17.05.2011
    Beiträge
    15
    Also im Grunde ist es egal welches Programm ich schreibe...
    Als test nehmen ich mal ein aktuelles:
    Code:
    #include "myasuro.h"
    #include "asuro.h"
    
    int main()
    {
     	 Init();
     	 EncoderInit();    
    	while (1);
      	{
     	 Go(300,150);
         Turn(90,150);
      	 }
      return 0;
    }
    Bei diesem Beispiel leuchtet die StatusLED vom ASURO Grün und mehr tut sich nicht weder anstumpen noch drohen noch bitten oder betteln hilft. Stur wie ein Panzer der Kollege...

    Bei dieser Form hier bewegt sich der ASURO ein mal nach vorne und dreht sich in die entsprechende Richtung und bleibt dann stehen, wieder leuchtet die LED Grün:
    Code:
    #include "myasuro.h"
    #include "asuro.h"
    
    int main()
    {
     	 Init();
     	 EncoderInit();    
    	
      	
     	 Go(300,150);
         Turn(90,150);
      	
    	while (1);
      return 0;
    }

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Tobias Stosius Beitrag anzeigen
    Also im Grunde ist es egal welches Programm ich schreibe...
    Als test nehmen ich mal ein aktuelles:
    Code:
    #include "myasuro.h"
    #include "asuro.h"
    
    int main()
    {
     	 Init();
     	 EncoderInit();    
    	while (1);
      	{
     	 Go(300,150);
         Turn(90,150);
      	 }
      return 0;
    }
    Bei diesem Beispiel leuchtet die StatusLED vom ASURO Grün und mehr tut sich nicht weder anstumpen noch drohen noch bitten oder betteln hilft. Stur wie ein Panzer der Kollege...
    Doch ein Software Problemm! Also nicht egal:

    while (1);

    Das hier oben ist ein sehr Kompaktes Endloss-schleife. Asuro kommt hier nicht raus. Und weil am ende von den Init-funktion die StatusLED Grün schaltet ist. Macht er nichts weiter und Erklärt deine Erfindungen. Die {}-Klammern haben keine weitere Einfluss mehr auf den Ablauf von das Programm. Lössung: ; weg!

    Bei dieser Form hier bewegt sich der ASURO ein mal nach vorne und dreht sich in die entsprechende Richtung und bleibt dann stehen, wieder leuchtet die LED Grün:
    Code:
    #include "myasuro.h"
    #include "asuro.h"
    
    int main()
    {
     	 Init();
     	 EncoderInit();    
    	
      	
     	 Go(300,150);
         Turn(90,150);
      	
    	while (1);
      return 0;
    }
    Genau so hier. Erst eine strecke mit Go, danach ein Drehung von eine bestimmte Winkel. Danach geht er Fest in ein Endloss-schleife. Diese Variant ist aber gut. Weil Asuro nimmer das Befehl return 0; ausführen soll. Lösung: die Go und Turn Funktion Eindinden in eine weitere While-schleife:
    Code:
    ...
      while (1)
      {
        Go(300,150);
        Turn(90,150);
      } // Ende von den While-endloss schleife
    
      while (1); // Eine weitere, aber überflussige, endloss-schleife zur behebung das ausfuhren der return Befehl.
    
     return 0;
    } //Ende Main-Funktion
    Geändert von Valen (31.05.2011 um 13:05 Uhr)

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    32
    Beiträge
    1.957
    while (1);

    er schleift sich in einer leeren Schleife zu tode!

    das Semikolon sagt ihm dass deine Schleife da beendet ist die geschweiften Klammern ignoriert er einfach!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Ein Neuer braucht Eure Meinung!
    Von cnc-ba im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 11.02.2010, 19:03
  2. Ein Neuer braucht Eure Meinung!
    Von cnc-ba im Forum Umfragen
    Antworten: 1
    Letzter Beitrag: 11.02.2010, 18:04
  3. Schnell: Eure meinung zählt
    Von asurofreak. im Forum Buchempfehlungen
    Antworten: 3
    Letzter Beitrag: 02.07.2009, 08:16
  4. Eure Meinung zum Robo008 Board?!
    Von grind im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 08.06.2007, 00:00
  5. Eure Meinung zum Fahrgestell des RP5
    Von EDatabaseError im Forum Mechanik
    Antworten: 11
    Letzter Beitrag: 22.10.2006, 19:58

Stichworte

Berechtigungen

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