Hallo,
ich bin Anfänger, habe mir jetzt ein Buch zu gelegt. Und wollte hier
einen Thread eröffnen in dem ich verschiedene Fragen stellen kann. Damit
ich nicht jedes mal einen neuen eröffnen muss. Wäre euch dankbar, wenn
ihr mir die ein oder andere Frage beantworten würdet. Auch nochmal ein
Dank die mir die letzten wochen versucht haben zu helfen.
nun wird hier ein Speedbutton behandelt. der zwischen gedrückten Zustand
und loslassen die Zeit misst, und je nachdem eine Led einschaltet, eine
bei 100ms, eine bei 200ms und eine bei 300ms. Und wenn man den Button
1sec. lang drückt (löscht er alles wieder) und es kann wieder von vorne
losgehen.
am Anfang des Kapitels steht das die pin im Polling verfahren alle 10ms
abgefragt werden. Aber ich komme nicht darauf wie sich das mit den
zeiten zb. 100ms mit X in den if abfragen decken. Oder
1 | else if (x > 300000) // wenn x > 300000 (Langer Tastendruck -> Neues Spiel)
|
300000 soll eine Sekunde sein, wie kommt man denn auf diese werte ich
dachte immer 1000ms = 1Sec.
1 | /*
|
2 | * speed_button_1.c
|
3 | * Controller: ATmega88 @ 8MHz
|
4 | */
|
5 | #define F_CPU 8000000UL
|
6 | #include <avr/io.h>
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | DDRB = 0xFF; // Richtungsregister PORTB auf Ausgang
|
11 | DDRD &= ~(1<<PD2); // Richtungsregister PORTD PinD2 auf Eingang
|
12 | PORTD = (1<<PD2);
|
13 |
|
14 | uint8_t tastenzustand = 0; // Flag für Tastenzustand definieren
|
15 | uint32_t x=0; // Datentyp für x = unsigned long (Wertebereich 0 bis 4 294 967 295)
|
16 |
|
17 | while(1)
|
18 | {
|
19 | if (!(PIND & (1<<PD2))) // wenn PinD2 = low (gedrückt)
|
20 | {
|
21 | PORTB |= (1<<PB0); // LED1 ON
|
22 | x++; // Zählvariable x um 1 erhöhen
|
23 | tastenzustand = 1; // Flag für "Taster wurde gedrückt" setzen
|
24 | }
|
25 |
|
26 | else if ((PIND & (1<<PD2)) && (tastenzustand == 1)) // wenn PinD2 = high und Taster losgelassen
|
27 | {
|
28 | PORTB &= ~(1<<PB0); // LED1 OFF
|
29 | tastenzustand = 0; // Flag für den Tastenzustand zurücksetzen
|
30 |
|
31 | if ((x > 5000) && (x <= 40000)) // wenn x > 5000 (Tasterprellen abwarten) und <= 40000
|
32 | {
|
33 | PORTB |= (1<<PB7); // LED4 ON (Anzeige für Superschnell!)
|
34 | x=0; // Zählvariable x zurücksetzen
|
35 | }
|
36 |
|
37 | else if ((x > 40000) && (x <= 60000)) // wenn x > 40000 und <= 60000
|
38 | {
|
39 | PORTB |= (1<<PB2); // LED3 ON (Anzeige für Schnell!)
|
40 | x=0; // Zählvariable x zurücksetzen
|
41 | }
|
42 |
|
43 | else if ((x > 60000) && (x <= 80000)) // wenn x > 60000 und <= 80000
|
44 | {
|
45 | PORTB |= (1<<PB1); // LED2 ON (Anzeige für Langsam!)
|
46 | x=0; // Zählvariable x zurücksetzen
|
47 | }
|
48 |
|
49 | else if (x > 300000) // wenn x > 300000 (Langer Tastendruck -> Neues Spiel)
|
50 | {
|
51 | x=0; // Zählvariable x zurücksetzen
|
52 | PORTB &= ~((1<<PB7)|(1<<PB2)|(1<<PB1)); // Bit 1,2 und 7 löschen (LED 2,3 und 4 OFF)
|
53 | }
|
54 | }
|
55 | }
|
56 | }
|