Gewöhn dir Sauberkeit im Code an!
Dazu gehört auch, dass du die Einrückungen korrekt machst.
Bei jedem { wird eingerückt (die meisten machen 2 Leerzeichen
Einrückung), bei jeder } wird wieder ausgerückt.
Das hat auch Konsequenzen darüber, in welcher Spalte Anweisungen stehen
werden.
Nach jeder { müssen die darauffolgenden Anweisungen um 2 Leerzeichen
eingerückt sein.
Die entsprechende schliessende } wird um 2 Spalten ausgerückt und die
darauf folgenden Anweisungen, die in derselben Ebene liegen müssen dann
in genau derselben Spalte anfangen, in der auch die } steht.
So wie in
1 | int main()
|
2 | {
|
3 | while( irgendwas )
|
4 | {
|
5 | if( irgendwas )
|
6 | {
|
7 | abhängige Anweisung
|
8 | noch eine abhängige Anweisung
|
9 | }
|
10 |
|
11 | Anweisungen, die nicht vom if abhängen
|
12 |
|
13 | } // diese } gehört zur öffnenden Klammer vom while. Daher steht sie
|
14 | // wieder in derselben Spalte wie die zugehörige {
|
15 |
|
16 | Anweisungen, die nicht mehr in der while sind
|
17 | } // diese } gehört zur { gleich nach dem Funktionsheader.
|
18 | // da hier die Funktion zu Ende ist, muss das auch so sein, dass diese
|
19 | // } in Spalte 0 steht.
|
Anhand der EInrückungen kann man ganz genau sehen, welche Anweisungen wo
dazu gehören und von welchen darüber liegenden Bedingunen sie abhängen.
Hier in deinem Code
1 | ADCSRA |= (1 << ADSC); // eine ADC-Wandlung ( Dummy Conversion )
|
2 |
|
3 | while (ADCSRA & (1 << ADSC) ) { // auf Abschluss der Konvertierung warten
|
4 | }
|
5 |
|
6 |
|
7 |
|
8 | int main(void)
|
9 | {
|
kann man ganz klar sehen, dass da etwas nicht stimmen kann.
Denn nach der letzten schliessenden } kann der Beginn von 'int main...'
nicht in der Spalte 0 anfangen!
D.h. da fehlt mit Sicherheit eine schliessende }, wenn der Rest sauber,
konsistent und korrekt eingerückt ist.
Wohingegen hier
1 | else
|
2 | {
|
3 | PORTB |= (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4);
|
4 | }
|
5 | }
|
6 |
|
7 |
|
8 | }
|
9 | }
|
es völlig unmöglich ist, dass 2 schliessende } in derselben Spalte
untereinander stehen.
Bei der Funktion hast du die schliessende } vergessen und hier in main
hast du sie wieder dazugeschummelt. Da in deinem Programm danach nichts
mehr passiert, hattest du Glück. Aber das ist nicht immer so.
Das hier
1 | ADC_Init(); // ADC initialisieren
|
2 | while(1)
|
3 | {
|
4 | if (PINB & (1 << PB5)) // Überprüfen ob der Taster gedrückt wurde
|
5 | {
|
kann auch nicht sein.
das 'w' vom while kann nicht in dieser Spalte stehen, sondern muss in
genau derselben Spalte wie das 'A' von ADC_init sein. Die beiden
Anweisungen sind ja logisch gesehen auf der gleichen Stufe.
Genauso wie das 'i' vom if nicht direkt unter der { stehen kann! Nach
einer { wird eingerückt!
Daher: Gewöhn dir eine ordentliche und konsistente Form an! Das ist
nicht einfach nur Selbstzweck sondern kann dir stundenlanges
Fehlersuchen ersparen, wenn es darum geht, wo du eine } vergessen hast
und dein Programm dann nicht das tut, was du denkst das es tun sollte.
Ja ich weiß. Solange deine Programme klein sind, ist das alles noch kein
Thema, das kann man alles auch noch so überblicken. Aber deine Programme
bleiben nicht so klein. Und dann verlierst du mit Sicherheit den
Überblick, wenn du nicht sauber und konsistent einrückst. Irgendwann
musst du also mal anfangen, in deinen Programmen Ordnung zu halten.
Warum also nicht gleich jetzt?