Hallo,
Tipp:
... der ADC liest sich nicht von selbst aus!
Du musst in Deiner Hauptschleife noch eine bestimmte Funktion aufrufen... welche genau solltest Du aber besser versuchen selbst rauszufinden (Anleitung)
MfG,
SlyD
hallo, hab grad nach einiger zeit mal wieder meinen rp6 ausgepackt und wieder angefangen zu programmieren.
ich möchte mit den ldr- widerständen etwas programmieren. jetzt hab ich mal mit nem ganz einfachen programm angefangen, aber irgendwie geht da am rp6 noch gar nichts. weder die leds leuchten, wenn ich den linken ldr anleuchte, noch wird über das terminal eine textnachricht ausgegeben. wer kann mir sagen an was das liegt?
hier mein programm:
mfgCode:#include "RP6RobotBaseLib.h" #define RANGE 500 uint16_t left, right; void task_LDRinfo(void) { if(adcLSL >= RANGE) {setLEDs(0b111111); writeString_P("LDR_L: "); writeIntegerLength(adcLSL, DEC, 4); writeChar('\n'); } } int main(void) {initRobotBase(); while(true) {task_LDRinfo(); } return 0; }
Hallo,
Tipp:
... der ADC liest sich nicht von selbst aus!
Du musst in Deiner Hauptschleife noch eine bestimmte Funktion aufrufen... welche genau solltest Du aber besser versuchen selbst rauszufinden (Anleitung)
MfG,
SlyD
danke. jetzt hab ich task_adc(); eingefügt. passiert mir hoffentlich nicht noch einmal. aber warum wird die task_adc(); in dem beispielprogramm lightdetection nie aufgerufen und die adc-kanäle arbeiten trotzdem?
mfg
Hallo,
in dem Beispielprogramm wird task_RP6System() verwendet und diese Funktion enthält schon den Aufruf von task_ADC().
Genau wie alles andere was so benötigt wird (Motorregelung, ACS, IRCOMM, ADCs, Bumper).
Eigentlich musst Du nur immer task_RP6System() in der Hauptschleife aufrufen.
MfG,
SlyD
wo wird denn dann in diesem programm task_RP6System() aufgerufen?Zitat von SlyD
mfgCode:// Uncommented Version of RP6Base_LightDetection.c // written by Dominik S. Herwald // ------------------------------------------------------------------------------------------ #include "RP6RobotBaseLib.h" #define RANGE 15 void task_LDRinfo(void) { uint16_t left, right; if(getStopwatch1() > 200) { writeString_P("LDR_L: "); writeIntegerLength(adcLSL, DEC, 4); writeString_P(" ; LDR_R: "); writeIntegerLength(adcLSR, DEC, 4); writeString_P(" ||"); if(adcLSL >= RANGE && adcLSR >= RANGE) { int16_t dif = ((int16_t)(adcLSL - adcLSR)); if(dif > 160) dif = 160; if(dif < -160) dif = -160; if(dif > 140) setLEDs(0b111000); else if(dif > 75) setLEDs(0b011000); else if(dif > 35) setLEDs(0b001000); else if(dif > -35) setLEDs(0b001001); else if(dif > -75) setLEDs(0b000001); else if(dif > -140) setLEDs(0b000011); else setLEDs(0b000111); if(adcLSL < (adcLSR - RANGE)) writeString_P(" L < R # "); else if(adcLSR < (adcLSL - RANGE)) writeString_P(" # L > R "); else writeString_P(" L = R "); } else { writeString_P(" It is very dark!"); if(adcLSL < adcLSR) { setLEDs(0b010110); writeString_P(" L < R # "); } else if(adcLSR < adcLSL) { setLEDs(0b110010); writeString_P(" # L > R "); } else { setLEDs(0b011011); writeString_P(" L = R "); } } writeString_P(" || UBAT: "); writeIntegerLength(adcBat, DEC, 3); writeChar('\n'); if(adcBat < 600) { writeString_P("WARNING: BAT IS LOW!\n"); writeChar('\n'); } setStopwatch1(0); } } int main(void) { initRobotBase(); writeString_P("\nRP6Loader - LDR Testprogram\n"); writeString_P("___________________________\n\n"); setLEDs(0b111111); mSleep(1000); setLEDs(0b000000); startStopwatch1(); while(true) { task_LDRinfo(); } return 0; }
BUG - aber *NUR* in der *unkommentierten* Version die ja nicht übersetzt wird vom Compiler daher ist das bis gerade eben leider nicht aufgefallen![]()
Schau Dir mal die kommentierte Version an!
So sieht die Hauptschleife da nämlich aus:
MfG,Code:while(true) { task_LDRinfo(); task_RP6System(); }
SlyD
is interessant. hast recht. ich hab bisher immer gedacht, dass das programm egal ob mit oder ohne kommentare immer das selbe ist.
das hier ist jetzt das erste mal, dass ich einen unterschied feststellen kann.
mfg
Das gilt auch für mich - sonst wäre das schon längst behoben ^^das hier ist jetzt das erste mal, dass ich einen unterschied feststellen kann.
dann bin ich ja beruhigt. hab gerade schon gedacht, dass das öfter so ist^^^^
Lesezeichen