Zehplusplus
04.04.2010, 13:21
Habe meinem Asuro jetzt die Snake Vision gegönnt. Als aller erstes möchte ich mal testen, ob das mit dem Taster (der sich auf der Snake-Vision befindet) überhaupt so klappt, wie ich mir das vorstelle. Dazu habe ich mal ein Programm verfasst, das nichts anderes macht. Das Programm ist schnell erklärt. Bei Betätigen des Tasters soll die Status LED 3 mal grüne blinken, außerhalb der Schalter-Abfrage-Schleife soll sie rot leuchten. Wenn ich ihn einschalte, blinkt sie sofort 3 mal grün, dann leuchtet sie so lange rot, bis ich wieder den Taster drücke. Wieso springt das Programm beim Start in die Blink-Schleife, obwohl ich den Taster noch gar nicht gedrückt habe?
#include "asuro.h"
#include "avr/interrupt.h"
int main(void)
{
// Speicher für die Messwerte bereitstellen
int a,b,c;
Init();
MotorDir(FWD,FWD);
StatusLED(OFF);
DDRD&=~(1<<6); //Pin6 auf "Eingang" schalten ACHTUNG MIT HR MAYER ABSPRECHEN
PORTD|=(1<<6);
while (1)
{
if ((PIND&(1<<6))==0) //Wenn der Taster auf der Snake-Platine gedrückt wird ...
{ //nimmt Pin 6 des Prozessors High-Zustand an
for (c=0; c<=2; c++)
{
for (a=0; a<150; a++)
{
StatusLED(OFF); //0,4 Sekunden soll aus sein
Sleep(216);
}
for (b=0; b<150; b++) //0,4 Sekunden soll grün leuchten
{
StatusLED(GREEN);
Sleep(216);
}
}
}
StatusLED(RED);
}
return 0;
}
(Quellcode eingefügt von radbruch)
#include "asuro.h"
#include "avr/interrupt.h"
int main(void)
{
// Speicher für die Messwerte bereitstellen
int a,b,c;
Init();
MotorDir(FWD,FWD);
StatusLED(OFF);
DDRD&=~(1<<6); //Pin6 auf "Eingang" schalten ACHTUNG MIT HR MAYER ABSPRECHEN
PORTD|=(1<<6);
while (1)
{
if ((PIND&(1<<6))==0) //Wenn der Taster auf der Snake-Platine gedrückt wird ...
{ //nimmt Pin 6 des Prozessors High-Zustand an
for (c=0; c<=2; c++)
{
for (a=0; a<150; a++)
{
StatusLED(OFF); //0,4 Sekunden soll aus sein
Sleep(216);
}
for (b=0; b<150; b++) //0,4 Sekunden soll grün leuchten
{
StatusLED(GREEN);
Sleep(216);
}
}
}
StatusLED(RED);
}
return 0;
}
(Quellcode eingefügt von radbruch)