Alexander Ljubizki schrieb:
> bzw. bekamm sie hier nicht so
Das liegt wohl daran, dass
* deine Aufgabenstellung Scheisse beschrieben ist
* dein geposteter Code unnötig kompliziert ist
* mit nichtssagenden Kommentaren gepflastert ist
* über keinerlei Einrückstruktur verfügt
* die Analyse was du da eigentlich getrieben hast für die
vermeintlich einfache Aufgabenstellung zu vielAufwand darstellt
* das Extrahieren, wo du falsch gearbeitet hast bzw. das Formulieren
von Empfehlungen um dich wieder auf den richtigen Pfad zu bringen
im Vergleich zur Aufgabenstellung verdammt viel Aufwand ist, wobei
man auch noch berücksichtigen mus, dass man das Programm wie gepostet
am besten wegschmeisst und in einem Drittel der Zeilen neu schreibt.
* Immer noch nicht klar ist, was du eigentlich genau willst: Eine Aktion
bei Tastemdruck machen, oder eine Aktion machen solange eine Taste
gedrückt ist. Das sind 2 verschiedene Paar Schuhe. Deine Beschreibung
klingt nach ersterem, du implementierst aber letzteres mit einem
Haufen _delay_ms dazwischen.
Mag sein, dass das genau das ist, was du willst. Auf meiner Seite
des Bildschirms geht das aus der dürftigen Beschreibung der
Funktionalität nicht hervor und die 'seltsamen' Variablennamen
bringen auch keine Klarheit.
Aber rein aus Analogiegründen, ohne eine Analyse gemacht zu habe, denke
ich, das das hier
1 | else
|
2 | {
|
3 | R22 = R1*1000;
|
4 | R22 = R11 + R2*100;
|
5 | R22 = R11 + R3*10;
|
6 | R22 = R11 + R4*1;
|
nicht stimmen kann. Du berechnest R22 neu, benutzt aber auf der rechten
Seite laufend R11. Ein Flüchtigkeitsfehler, zugegeben. Aber den könntest
du auch alleine finden, wenn du dein Programm zb im Debugger einfach mal
durchgehst und dir die Variablen ansiehst.
So wie du auch noch viele andere Dinge im Debugger gesehen und gefunden
hättest. Ein besonderes Bonmont ist ja das hier
1 | bool Post = 1;
|
2 | int a = 4;
|
3 | while(Post)
|
4 | {
|
5 | if(a == 4) if((PINC & ( 1 << PC2 )) == 0) { LED(1); _delay_ms(300); LED(0); a=3;}
|
6 | if(a == 3) if((PINC & ( 1 << PC3 )) == 0) { LED(1); _delay_ms(300); LED(0); a=2;}
|
7 | if(a == 2) if((PINC & ( 1 << PC4 )) == 0) { LED(1); _delay_ms(300); LED(0); a=1;}
|
8 | if(a == 1) if((PINC & ( 1 << PC5 )) == 0) { LED(1); _delay_ms(300); Post = 0; }
|
9 | }
|
10 | LED(0); _delay_ms(100);
|
Mit der while-Schleife und der a-Variablen ist das ja die schon fast
maximal komplizierte und verschleiernde Art zu schreiben:
1 | ...
|
2 |
|
3 | if( (PINC & ( 1 << PC2 )) == 0 )
|
4 | {
|
5 | LED(1);
|
6 | _delay_ms(300);
|
7 | LED(0);
|
8 | }
|
9 |
|
10 | if( (PINC & ( 1 << PC3 )) == 0 )
|
11 | {
|
12 | LED(1);
|
13 | _delay_ms(300);
|
14 | LED(0);
|
15 | }
|
16 |
|
17 | if( (PINC & ( 1 << PC4 )) == 0 )
|
18 | {
|
19 | LED(1);
|
20 | _delay_ms(300);
|
21 | LED(0);
|
22 | }
|
23 |
|
24 | if( (PINC & ( 1 << PC5 )) == 0 )
|
25 | {
|
26 | LED(1);
|
27 | _delay_ms(300);
|
28 | LED(0);
|
29 | }
|
30 |
|
31 | LED(0);
|
32 | _delay_ms(100);
|
33 |
|
34 | ...
|
wozu das allerdings gut sein soll? Man weiß es nicht. Sinn ergibt das
alles nicht viel. Die LED leuchtet für jede gedrückte Taste 300ms. Aber
welche Taste gerade gedrückt ist, lässt sich daraus nicht ableiten. Aber
ok. Wenn dir die Anzahl der Tasten schon reicht.