Hallo liebes Forum
Ich bin noch ein ziemlicher Frischling in Sachen Mikrocontroller hab
aber meine ersten Gehversuche schon unternommen.
Momentan sitze ich schon eine Weile an einer einfachen Tasterabfrage,
welche beim 1. Tastendruck eine LED (LED1) einschalten soll.
Beim 2. Tastendruck wird diese LED ausgeschaltet und eine andere wird
dafür eingeschaltet.
Beim 3. Tastendruck wird schließlich der komplette Port wieder 0 gesetzt
und das ganze kann von vorne beginnen.
Ich habe das ganze mit switch case gelöst, wobei bei jedem Tastendruck
eine Variable um 1 erhöht wird und ich daher in den nächsten case
springe.
Meine erste Frage: Wie hättet ihr das ganze gelöst?? Gibt es vielleicht
noch etwas eleganteres als switch case?
Zusätzlich habe ich zwischen den Abfragen eine Wartezeit eingeplant,
welche ich über 2 andere Taster im Laufenden Betrieb erhöhen und
verkürzen können möchte. Der Kompiler liefert mir dabei aber immer
folgende Fehlermeldung:
main.c:64: error: expected expression before '}' token
main.c:64: error: expected declaration or statement at end of input
Solange ich die oberen if-Abfragen weglasse funktionierts, sobald ich
sie mit rein tu klappt es nicht mehr. Kann mir dabei vielleicht jemand
helfen oder hatte schon ein ähnliches Problem?? Was für eine
Eingabe/Deklaration erwartet denn der Kompiler.
Bereits im Voraus vielen Dank
Hier noch der Code:
#include <avr/io.h>
#include <util/delay.h>
int main(void){
int i,e;
i=1;
e=10;
DDRD = 0b11100000; // Led 1 & LED 2 & Summer als Ausgang
while(1){
if (PIND&(1<<PD3){ // Wenn Taster 2 gedrückt wird dann um 5ms
erhöhen
r=r+5;
}
if ( PIND&(1<<PD4){ // Wenn Taster 3 dedrückt wird dann um 5ms
kürzen
r=r-10;}
switch (i) // Switch für mehrmaliges Drücken des selben
Tasters
{
case 1:
if(PIND&(1<<PD2)){ // 1. mal drücken: LED 1 an
PORTD|=(1<<PD5);
_delay_ms(e);
i=2; // i++ - case 2
}
case 2: //2.mal drücken: LED 2 an
if(PIND&(1<<PD2)){
PORTD&=(0<<PD5); // LED 1 aus machen
PORTD|=(1<<PD6);
_delay_ms(e);
i=3;} // i++ - case 3
case 3: // 3.mal drücken:
if(PIND&(1<<PD2)){
PORTD&=0x00; // PORTD auf o setzen
_delay_ms(e); // springt wieder zu case 1
i=1;
}
}
}
return 0; }