Hallo Dirk,
vielen Dank für den Tip, so in der Art müsste es eigentlich funktionieren. Aber irgendwie krieg ich es nicht hin. Hab mich erstmal auf 2 LED´s konzentriert (Port 7 und 5).
Code:
void task_LDRinfo(void) //LDR für Suchscheinwerfer auswerten
{
writeString_P("LDR_L: ");
writeIntegerLength(adcLSL, DEC, 4);
writeString_P(" ; LDR_R: ");
writeIntegerLength(adcLSR, DEC, 4);
writeString_P(" ||");
if(adcLSL <400)
PORTC |= IO_PC3;
if(adcLSL >450)
PORTC &= ~IO_PC3;
}
void eigenefunktion(void)
{
PORTC &= ~IO_PC7; //IO´s erstmal auf LOW schalten
PORTC &= ~IO_PC6;
PORTC &= ~IO_PC5;
PORTC &= ~IO_PC4;
startStopwatch3(); //Stopwatch Nr. 1 starten
if (getStopwatch3() > 100) //Stopwatch 1 auswerten
PORTC |= IO_PC7; /Wenn Stopwatch über 100-> Ports High
PORTC |= IO_PC5;
setStopwatch1(0); //Stopuhr zurückstellen auf 0
if (getStopwatch3() > 100) //Stopwatch 1 auswerten
PORTC &= ~IO_PC7; // Wenn Stopwatch über 100--> Ports LOW
PORTC &= ~IO_PC5;
setStopwatch3(0); //Stopuhr wieder zurück
int main(void) //Hauptprogramm
{
initRP6Control();
initLCD();
DDRC |= IO_PC7; //erstmal Ports festlegen
DDRC |= IO_PC6;
DDRC |= IO_PC5;
DDRC |= IO_PC4;
DDRC |= IO_PC3;
PORTC &= ~IO_PC3; /*Den Port für den Suchscheinwerfer auf LOW /*
while(true) //Endlos-Schleife starten
{
task_LCDHeartbeat();
task_checkINT0();
task_I2CTWI();
behaviourController();
eigenefunktion(); /*Hier sollten nun eigentlich die Ports nach je 100ms high/Low-Schalten /*
task_LDRinfo(); /*Abfrage für Suchscheinwerfer
}
return 0;
}
Was ich nicht ganz verstehe: Der Port 3 für den Suchscheinwerfer ist am Anfang immer aktiv ebenso die für die LED´s. Port 3 schalte ich im Hauptprogramm ja aktiv ab (PORTC &= ~IO_PC3; ) die 4 anderen nicht. Diese sind aber nach einmaligen aufleuchten ebenfalls auf Low???
Lesezeichen