-
        

Ergebnis 1 bis 5 von 5

Thema: Liniensensor funktioniert nicht.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2008
    Beiträge
    6

    Liniensensor funktioniert nicht.

    Anzeige

    Hallo,

    ich habe meinen Asuro zusammen gelötet. War das erste Mal das ich was gelötet habe. Um den Asuro ein wenig zu "debuggen" habe ich mir ein Programm geschrieben. Das Problem ist nun, dass mir mein Programm "sagt" das der Linke Liniensensor (T10) immer 0-3 ist, T9 aber zwischen 800 und 30 schwankt je nach Beleuchtung. Nun habe ich schon die Widerstände kontrolliert und auch die Pins 25 und 26 nachgemessen. Da kommen bei beiden ähnliche Spannungswerte raus. Ich messe doch von GND(Pin "zu" Pin 25/26 oder?

    Die Frage ist nun was läuft schief? Programm falsch?, IC Kaputt? Vermessen?

    Hier noch mein Programm, falls dieses Falsch ist:
    Ich benutze die Original Asuro "Bibliothek".

    Vielen Dank im Vorraus.

    Higgi

    Code:
    #include "asuro.h"
    
    char* to_Char(int number, int expected_size)
    {
    	char buffer[expected_size];
    	int i;
    	for(i=expected_size-1;i>=0;i--)
    	{
    		buffer[i] = (number%10)+48;
    		number = number / 10;
    	}
    	return buffer;
    }
    
    
    void print_Data_To_IR(char* data)
    {
    	SerWrite(to_Char(data[0],4),4);
    	SerWrite(";",1);
    	SerWrite(to_Char(data[1],4),4);
    	SerWrite("\r\n",4);
    }
    
    
    void debug_Odo(void)
    {
    	int data[2];
    	OdometrieData(data);
    	print_Data_To_IR(data);
    
    
    }
    
    
    void debug_Line(void)
    {
    	int data[2];
    	FrontLED(ON);
    	LineData(data);
    	print_Data_To_IR(data);
    }
    
    
    void debug_Switch(void)
    {
    	unsigned char pressed_switch;
    	pressed_switch = PollSwitch();
    	SerWrite(to_Char(pressed_switch,2),2);
    	SerWrite(";",1);
    	
    }
    
    
    int main(void)
    {
    	Init();
    	//FrontLED(ON);
    	while(1){
    	//debug_Switch();
    	debug_Line();
    	int i;
    	for(i = 0;i<1000;i++)
    	{
    		Sleep(255);
    	}
    	}
    	return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Dein to_Char ist murks. Du kannst keinen Zeiger auf eine lokale Variable zurückgeben, mit verlassen einer Funktion verlieren alle nichtstatischen lokalen Variablen mit sofortiger Wirkung ihre Gültigkeit.

    Nimm doch einfach printf oder itoa für solche Zwecke, wenn du Fehler in deinem Debugging-Code nicht ausschließen kannst, wie willst du dann echte Fehler finden?

    mfG
    Markus

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2008
    Beiträge
    6
    Hallo,

    Dass das mit dem Rückgabewert so in C nicht geht wusste ich nicht. Ich komme eher aus der Java Richtung und dort ist das der Weg wenn man will, das eine Funktion etwas zurückgibt.

    Bei itoa habe ich nur Compilerfehler bekommen. Deswegen habe ich die to_Char Funktion überhaupt geschrieben. Könntest du mir sagen was ich für itoa einbinden muss?


    mfg Christoph

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Du kannst in C durchaus etwas so zurückgeben, aber nichts worauf ein Pointer zeigt. Deshalb hat Java keine Pointer sondern Referenzen, und in Java erzeugte Objekte liegen auf dem Heap und nicht auf dem Stack. Könntest du in Java einen Zeiger auf eine lokale Variable erzeugen, würde die genauso ungültig mit verlassen der Funktion.

    itoa wird in stdlib.h deklariert. Details dazu gibt es in der Doku der avr-libc, entweder online oder im Doku-Ordner deiner WinAVR-Installation, oder (unter Linux) in /usr/share/doc/avr-libc

    Anwendungsbeispiel:

    Code:
    char buf[7]; // Vorzeichen + 5 Ziffern + \0 am Ende
    itoa(-12345, buf, 10); // Schreibt die Zahl -12345 Dargestellt zur Basis 10 in das Array buf
    mfG
    Markus

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2008
    Beiträge
    6
    Hallo,

    anscheinend war es echt ein Programmierfehler. Als ich nun itoa anstatt meiner to_Char verwendet habe, hatte ich richtige Werte in der Konsole. Ich verstehe nur nicht warum es bei den Odometriesensoren funktioniert hat. Naja vllt war es auch was anderes, da ich den IC einige mal gezogen und gesteckt hatte zwecks manuellem Messens.


    Aber danke dir markusj.

    mfg Christoph

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 29.08.2011, 18:17
  2. USB ISP funktioniert nicht
    Von chris@franke im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 18.01.2010, 21:07
  3. Antworten: 20
    Letzter Beitrag: 15.07.2008, 19:07
  4. I²C funktioniert nicht
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 21
    Letzter Beitrag: 31.08.2006, 14:27
  5. LCD funktioniert nicht
    Von quad im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 30.09.2005, 23:55

Berechtigungen

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