- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Front LED tot?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2007
    Beiträge
    26

    Front LED tot?

    Anzeige

    Praxistest und DIY Projekte
    Sers!
    Zuerst mal mein Problem, ich glaube ich hab irgendwie meine Rote Front LED getötet. :/
    Vor einiger Zeit hab ich mal ein Programm gesehen, das einen Int wert, in nen Char String umsetzt (nicht das PrintInt aus der neuen lib). Auf jedenfall, hat er für den einen Linienfolger klasse Werte zurück, der andre aber nichts.
    Ich hab dann mal auf Verdacht einmal die beiden Transistoren (und vorsorglich die Leuchtdiode auch) nachgelötet.
    Jetzt habe ich mir mal die neue lib geladen und folgenden Code geflasht:
    Code:
    #include "asuro.h"
    
    	
    int main(void)
    { int linedaten[2];
    
    
    
    FrontLED(ON);
    SerWrite("Los",3);
    while(1)
    	{
    	SerWrite("\n",1);
    	LineData(linedaten);
    	PrintInt(linedaten[0]);
    	SerWrite(" ",1);
    	PrintInt(linedaten[1]);
    	}
      
      return 0;
    }
    Soweit, so gut. Aber leider schreibt mir mein Asuro nur am Anfang "Los" und ist dann still. :/
    Außerdem glimmt die FrontLed nur noch. Also ein schwaches Leuchten.
    Ich habe mal Probeweise ne Grüne Led (die funktioniert garantiert) parallel auf die Lötaugen gehalten. Die leuchtet auch ned. :/

    Hat jemand ne Idee?
    (Ich komme an mein Werkzeug leider erst wieder am Montag, hab nur ne Lötstation zur Hand.)

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo ace,

    'Init();' sollte noch zugefugt sein.

    Code:
    int main(void)
    { 
      Init();
      int linedaten[2];
    Die Atmega8L bootloader startet immer zuerst und wartet 3 Sekunden bis das Anwender Program gestartet wird.
    Im bootloader wird dass Atmega8L USART/RS232 Teil schon benutzt und initialisiert aber nicht ganz korrekt fur das Anwender Program. Deshalb wird unglucklicherweise die erste String 'Los' ausgestrahlt aber nicht den Rest. Durch ausfuhren von 'Init()' wird alles richtig initialisiert.

    Gruss,

    Henk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2007
    Beiträge
    26
    OMG, danke!
    Da wär ich jetzt nie drauf gekommen. :D
    Ist mir auch noch nie passiert, ich dachte eigentlich, wenn man Init() nicht aufruft, dann tut der Asuro gar nichts.
    Danke für die Aufklärung des (peinlichen ^^') Fehlers.

    Ich editier gleich rein, obs nun klappt.

    [edit]:
    Yeah! :)
    Es funktioniert.
    Immer diese Kleinigkeiten. *grml*


    [edit2]:
    Achja, muss man die Variablen vor Init() initialisieren, oder danach?
    Oder ist es egal in welcher Reihenfolge?

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    davor.

    *textfüller*textfüller*
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2007
    Beiträge
    26
    Zitat Zitat von damaltor
    davor.
    Ok. :) (Warum? ;P)

    Dadurch, das das ned so leer wirken soll. Poste ich mal meinen Code zum Linienverfolgen. :)
    Code:
    #include "asuro.h"
    #define TRUE 1
    #define FALSE 0
    
    void pollswitch_richten(unsigned int a)
        {int b;
        for (b=0;b<=a;b++)
            {
            PollSwitch();              
            }             
        }
    
    
    int vornefrei(void)  //sry fuers abkupfern, is aber ne gute idee so.. habs trotzdem kombiniert
    	{
    	char data[3];
    	data[0]=PollSwitch();
    	data[1]=PollSwitch();
    	data[2]=PollSwitch();
    	if ((data[0] == data[1]) && (data[1] == data[2]))
    		{return data[0];}
    	else return 0;
    	}
    	
    void kollision(void)
    	{unsigned int i;
    	BackLED(ON,ON);
    	MotorDir(BREAK,BREAK);
    	for (i=0;i<=1000;i++)  //zu dem zeitpunkt, hatte ich noch ned die neue lib..
    		{Sleep(72);}
    	MotorDir (FWD,FWD); //motorkabeln verpolt..
    	MotorSpeed (120,120);
    	for (i=0;i<=1000;i++)
    		{Sleep(72);}
    	MotorDir(FREE,FREE);
    	for (i=0;i<=200;i++)
    		{Sleep(72);}
    	MotorDir(BREAK,BREAK);
    	for (i=0;i<=200;i++)
    		{Sleep(72);}
    	BackLED(OFF,OFF);
    	
    	}
    	
    	
    	
    int main(void)
    { int linedaten[2],diffR,diffR1,diffR2,diffR3;
      char flagL=FALSE;
      char flagR=FALSE;
        
        
      Init();
      StatusLED(RED);
      Msleep (2000);
      pollswitch_richten(20); //zum kondensator entladen
      StatusLED (YELLOW); 
      FrontLED (ON);
      while (vornefrei()==0) //hier den asuro auf ein weißes blatt stelln, damit man die liniendingsda kalibriern kann
            {
            LineData(linedaten); //irgendne taste drücken, wenn er dort war und beginnen kann
            diffR1= linedaten[0]-linedaten[1];
    		diffR2= linedaten[0]-linedaten[1];
    		diffR3= linedaten[0]-linedaten[1];
    		diffR=(diffR1+diffR2+diffR3)/3;
    		PrintInt(diffR);
            }
      Msleep(1000);
      while (1)           //jetz auf die linie stellen (asuro muss von linie "wegstarten")
            {
            StatusLED (GREEN);
            MotorDir (RWD,RWD); //motrenkabln sind falschherum angelötet.. ^^
            MotorSpeed (150,150);
            if ((linedaten[0] < (linedaten[1]+diffR)) && (flagL == FALSE))
               {
               MotorSpeed (200,150);
               flagL = TRUE;
               }
            if ((linedaten[0] < (linedaten[1]+diffR)) && (flagL == TRUE))
               {
               MotorSpeed (150,100);
               flagL = FALSE;
               }
            if (((linedaten[1]+diffR) < linedaten[0]) && (flagR == FALSE))
               {
               MotorSpeed (150,200);
               flagR= TRUE;                      
               }
            if (((linedaten[1]+diffR) < linedaten[0]) && (flagR == TRUE))
               {
               MotorSpeed (100,150);
               flagR= FALSE;                      
               }
    		while (vornefrei()!=0)
    			{
    			kollision();
    			}
    		}
      
      return 0;
    }
    Verbesserungsvorschläge? :)

    Nachtrag:
    Das Programm ist Mist. *gg*
    Werde mich mal drannsetzen.

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    das ist in allen c-programmen so.
    zuerst werden die variablen deklariert (in jeder funktion), und dann kommen anweisungen. eine ausnahme bietet die funktion malloc(), in der bei vielen architekturen auch später speicher reserviert werden kann.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Berechtigungen

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

Labornetzteil AliExpress