bergowitch
12.09.2005, 08:47
Hallo,
nach dem interessanten Beitrag über PD-Regler habe ich mich auch mal heran gemacht und versuche selbst einen Regler zu programmieren. Zuerst habe ich mal versucht mit FrontLED on und off zu arbeiten und diese Procedur geschrieben (und zum Teil bei andun abgeguckt =D> )
Daraus ist folgendes geworden:
void ueber_linie (void) // Ist der Asuro noch über der Linie
{
unsigned int lineData[2];
unsigned int li_seite;
unsigned int re_seite;
unsigned char li[4]; // Variablen für Ausgabe
unsigned char re[4];
unsigned char newLine = 10;
unsigned char cR = 13;
FrontLED(ON); // LED an
LineData(lineData); // Liniensensor auslesen
li_seite = lineData[0]; // Werte zwischenspeichern
re_seite = lineData[1];
FrontLED(OFF); // LED aus
LineData(lineData); // Liniensensor auslesen
li_seite = li_seite - lineData[0]; // Differnz zwischen den beiden
re_seite = re_seite - lineData[1]; // Messungen (hell-dunkel) berechnen
if (li_seite > 30) {
if (re_seite > 30) {StatusLED (RED);
MotorSpeed(0,0);}
else {StatusLED (GREEN);}}
else {StatusLED (GREEN);
MotorSpeed(0,0);}
itoa(li_seite,li,10); // Ausgabe der Liniendaten an PC
itoa(re_seite,re,10);
SerWrite(li,strlen(li));
SerWrite(" | ", 3);
SerWrite(re,strlen(re));
Sleep(100);
SerWrite(&newLine,1);
SerWrite(&cR,1);
}
tuts auch soweit so gut. Aber die Ergebnisse machen mich stutzig.
Über schwarz:
linker Sensor - 19 rechter Sensor 9
über grau:
linker Sensor - 32 rechter Sensor 34
über weiß:
linker Sensor - 58 rechter Sensor 110
Ich verstehe nicht wo der Unterschied zwischen den Sensoren herkommt. Ebenso verstehe ich das "-" beim linken Sensor nicht.
Hat jemand eine Idee? (Daran dass die Sensoren nicht abgeschirmt sind liegt es nicht, da ich den ASURO drehen und wenden kann wie ich will und die Ergebnisse weitgehend gleich bleiben.)
Gruß
Stefan
nach dem interessanten Beitrag über PD-Regler habe ich mich auch mal heran gemacht und versuche selbst einen Regler zu programmieren. Zuerst habe ich mal versucht mit FrontLED on und off zu arbeiten und diese Procedur geschrieben (und zum Teil bei andun abgeguckt =D> )
Daraus ist folgendes geworden:
void ueber_linie (void) // Ist der Asuro noch über der Linie
{
unsigned int lineData[2];
unsigned int li_seite;
unsigned int re_seite;
unsigned char li[4]; // Variablen für Ausgabe
unsigned char re[4];
unsigned char newLine = 10;
unsigned char cR = 13;
FrontLED(ON); // LED an
LineData(lineData); // Liniensensor auslesen
li_seite = lineData[0]; // Werte zwischenspeichern
re_seite = lineData[1];
FrontLED(OFF); // LED aus
LineData(lineData); // Liniensensor auslesen
li_seite = li_seite - lineData[0]; // Differnz zwischen den beiden
re_seite = re_seite - lineData[1]; // Messungen (hell-dunkel) berechnen
if (li_seite > 30) {
if (re_seite > 30) {StatusLED (RED);
MotorSpeed(0,0);}
else {StatusLED (GREEN);}}
else {StatusLED (GREEN);
MotorSpeed(0,0);}
itoa(li_seite,li,10); // Ausgabe der Liniendaten an PC
itoa(re_seite,re,10);
SerWrite(li,strlen(li));
SerWrite(" | ", 3);
SerWrite(re,strlen(re));
Sleep(100);
SerWrite(&newLine,1);
SerWrite(&cR,1);
}
tuts auch soweit so gut. Aber die Ergebnisse machen mich stutzig.
Über schwarz:
linker Sensor - 19 rechter Sensor 9
über grau:
linker Sensor - 32 rechter Sensor 34
über weiß:
linker Sensor - 58 rechter Sensor 110
Ich verstehe nicht wo der Unterschied zwischen den Sensoren herkommt. Ebenso verstehe ich das "-" beim linken Sensor nicht.
Hat jemand eine Idee? (Daran dass die Sensoren nicht abgeschirmt sind liegt es nicht, da ich den ASURO drehen und wenden kann wie ich will und die Ergebnisse weitgehend gleich bleiben.)
Gruß
Stefan