PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : frage zu programm



proevofreak
16.10.2008, 18:55
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:


#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;
}




mfg

SlyD
16.10.2008, 19:21
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

proevofreak
17.10.2008, 14:57
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

SlyD
17.10.2008, 15:37
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

proevofreak
17.10.2008, 16:56
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?



// 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;
}


mfg

SlyD
17.10.2008, 17:03
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:


while(true)
{
task_LDRinfo();
task_RP6System();
}


MfG,
SlyD

proevofreak
17.10.2008, 17:41
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

SlyD
17.10.2008, 18:05
das hier ist jetzt das erste mal, dass ich einen unterschied feststellen kann.


Das gilt auch für mich - sonst wäre das schon längst behoben ^^

proevofreak
17.10.2008, 18:09
dann bin ich ja beruhigt. hab gerade schon gedacht, dass das öfter so ist^^^^