Bist du sicher, dass das hier
if(timer<<insp)
tatsächlich ein Links-Schieben sein soll und kein Vergleich auf kleiner?
Persönlich finde ich es immer unklug, wenn man Programmtext so ganz ohne
Leerzeichen Buchstaben an Buchstaben setzt. Man sieht dann so schlecht
die kleinen Feinheiten. Dein Lesezentrum im Gehirn wurde seit du 6 Jahre
alt bist, darauf trainiert, dass zwischen Wörtern ein Leerraum steht und
wenn du etwas liest, dann sucht das Gehirn erst mal diese Leerräume um
dort die gedankliche Trennung der Wörter reinzulegen. Kein Mensch käme
auf die Idee,
deutschenTextkomplettohneLeerzeichenzuschreiben,weildanndasLeseneinfachn
ur
furchtbarermüdendist.
Nur wenn dieselben Leute dann C Programmieren, dann müssen alle
Buchstaben knirsch auf knirsch geschrieben werden, weil das ja beim
Schreiben so wahsinnig viel Zeit spart.
if( timer << insp )
Schon sticht das << heraus und es ist weit schwieriger so etwas beim
Korrekturlesen des Codes irrtümlich als < zu lesen. Gerade in einer
Sprache wie C, in der jedes falsche Zeichen über Sieg oder Niederlage
entscheiden kann, ist es umso wichtiger, dass man seinen Code so
gestaltet, dass er gut lesbar ist. Dazu gehören neben optischen Hilfen
wie Leerzeichen auch korrekte Einrückungen.
Vergleich mal deine Variante
1 | ISR(TIMER1_OVF_vect)
|
2 | {
|
3 | timer++;
|
4 |
|
5 | if(state==1)
|
6 | {
|
7 | if(timer<<insp)
|
8 | {
|
9 | PORTC |= (1<<0);
|
10 | }
|
11 | if((timer<<exsp) && (timer>=insp))
|
12 | {
|
13 | PORTC &= ~(1<<0);
|
14 | }
|
15 | if(timer==exsp)
|
16 | {
|
17 | act++;
|
18 | timer=0;
|
19 | if(act==max)
|
20 | {
|
21 | state=2;
|
22 | }
|
23 | }
|
24 | }
|
25 | }
|
mit der hier
1 | #define ATMEN 1
|
2 | #define OFF 2
|
3 |
|
4 | #define LED_PORT PORTC
|
5 | #define ATEM_LED 0
|
6 |
|
7 | ISR(TIMER1_OVF_vect)
|
8 | {
|
9 | timer++;
|
10 |
|
11 | if( state == ATMEN )
|
12 | {
|
13 | if( timer < EinatemZeit )
|
14 | LED_PORT |= (1 << ATEM_LED);
|
15 |
|
16 | else if( timer < AusatemZeit )
|
17 | LED_PORT &= ~(1 << ATEM_LED);
|
18 |
|
19 | else {
|
20 | timer = 0;
|
21 | ZugNummer++;
|
22 |
|
23 | if( ZugNummer == AnzahlZuege )
|
24 | state = OFF;
|
25 | }
|
26 | }
|
27 | }
|
Denk dir ein paar Füllwörter dazu und der Programmtext der ISR liest
sich schon fast wie deutsche Sätze.
if( timer < EinatemZeit )
Aha. Wenn die Zeitzählung als noch kleiner als die Zeit ist, die fürs
einatmen vorgesehen ist, dann ....
LED_PORT |= (1 << ATEM_LED);
... ja, logisch. Dann soll die LED welche einatmen anzeigt eingeschaltet
werden.
Da brauch ich nur den Programmtext lesen, mir ein paar Wörter dazudenken
und komm zum Schluss: passt. Die Logik kann stimmen.