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; }
"expected declaration" sagt doch schon was aus... Wo ist denn Dein "r" deklariert?
1 | while(1){ |
2 | |
3 | |
4 | if (PIND&(1<<PD3){ // Wenn Taster 2 gedrückt wird dann um 5ms |
5 | erhöhen |
6 | r=r+5; |
7 | }
|
8 | |
9 | if ( PIND&(1<<PD4){ // Wenn Taster 3 dedrückt wird dann um 5ms |
10 | kürzen |
11 | r=r-10;} |
Ich würde eher sagen du hast zwei Klammern vergessen. wie schon pi über mir gesagt hat Fehler lesen.´Gedanken machen wo könnte der Fehler sein. Fehler finden ;-)
1 | if (PIND&(1<<PD3) ) {..... |
genauso bei deiner 2ten if abfrage.
Danke euch beiden für die schnelle Beantwortung. Es lag wirklich nur an den Fehlenden 2 if Klammern. Naja weiter unten hab ich sie fleißig gesetzt aber oben fehlten sie. Ich hab einfach bei der Fehlermeldung an der total falschen Stelle rumprobiert aber nun läufts fantastisch. Muss mich wohl noch ein wenig an die Sprache meines Kompilers gewöhnen :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.