Hi leute, ich weiss gerade nicht weiter. Ich habe mir eine Schlatung zusammen gebaut wofür ich nun den Code erstellen muss. Eine Art "test" Code klappt auch so teilweise aber ich weis nicht wie ich z.b. delay_ms umgehen kann da, wenn der delay ja ausgeführt wird der chip erstmal nichts weiter macht. Derzeit löse ich das so: http://nopaste.info/524f0c214e.html Das ganze klappt auch so aber wie schon erwähnt, wenn z.b. beide gleichzeitig schalten sollen dann schaltet erst der eine dann der andere wegen dem delay_ms, wie kann ich das umgehen/verändern? Dann will ich noch Zählungen vornehmen aber das ganze klappt garnicht: http://nopaste.info/b505bb7f84.html Das ganze klappt garnicht. Das eingangssignal beträgt 5V also jedesmal wenn 5V anliegen und halt wieder weg gehen soll er zählen aber da passiert garnichts. Ich hoffe mir kann jemand helfen.
Mit externen Links sind wir hier gar nicht glücklich. Wenn du Code zum herzeigen hast, dann poste ihn entweder direkt oder häng ihn als Attachment an. So geht er nicht verloren, selbst wenn du in 3 Jahren deinen externen Webhoster wechselst.
1 | //////////////////////
|
2 | // Türtasterfunktion//
|
3 | //////////////////////
|
4 | |
5 | // Links
|
6 | |
7 | if (tuerlinkstasterstrom == 1) {} else { |
8 | |
9 | if (!(PIND & 1<< PD0)) |
10 | {
|
11 | tuerlinkstaster = 1; |
12 | } else { |
13 | tuerlinkstaster = 2; |
14 | }
|
15 | }
|
16 | |
17 | if (tuerlinkstaster == 1) |
18 | {
|
19 | if (tuerlinkstasterstatus == 1) {} |
20 | else
|
21 | {
|
22 | if (tuerlinkstasterset == 1) {} |
23 | else
|
24 | { tuerlinkstastertime = 0; tuerlinkstasterset = 1; } |
25 | tuerlinkstastertimer = 3; |
26 | tuerlinkstasterstrom = 1; |
27 | PORTC |= (1<<PC5); |
28 | _delay_ms(300); |
29 | PORTC &= ~ (1<<PC5); |
30 | tuerlinkstasterstrom = 0; |
31 | tuerlinkstasterstatus = 1; |
32 | }
|
33 | |
34 | }
|
35 | |
36 | if (tuerlinkstaster == 2) |
37 | {
|
38 | if (tuerlinkstasterstatus == 2) {} |
39 | else
|
40 | {
|
41 | if (tuerlinkstasterset == 2) {} |
42 | else
|
43 | { tuerlinkstastertime = 0; tuerlinkstasterset = 2; } |
44 | tuerlinkstastertimer = 2; |
45 | tuerlinkstasterstrom = 1; |
46 | PORTC |= (1<<PC4); |
47 | _delay_ms(600); |
48 | PORTC &= ~ (1<<PC4); |
49 | tuerlinkstasterstatus = 2; |
50 | tuerlinkstasterstrom = 0; |
51 | }
|
52 | |
53 | }
|
54 | |
55 | // Rechts
|
56 | |
57 | if (tuerrechtstasterstrom == 1) {} else { |
58 | |
59 | if (!(PIND & 1<< PD1)) |
60 | {
|
61 | tuerrechtstaster = 1; |
62 | } else { |
63 | tuerrechtstaster = 2; |
64 | }
|
65 | }
|
66 | |
67 | if (tuerrechtstaster == 1) |
68 | {
|
69 | if (tuerrechtstasterstatus == 1) {} |
70 | else
|
71 | {
|
72 | if (tuerrechtstasterset == 1) {} |
73 | else
|
74 | { tuerrechtstastertime = 0; tuerrechtstasterset = 1; } |
75 | tuerrechtstastertimer = 3; |
76 | tuerrechtstasterstrom = 1; |
77 | PORTC |= (1<<PC3); |
78 | _delay_ms(300); |
79 | PORTC &= ~ (1<<PC3); |
80 | tuerrechtstasterstrom = 0; |
81 | tuerrechtstasterstatus = 1; |
82 | }
|
83 | |
84 | |
85 | }
|
86 | |
87 | if (tuerrechtstaster == 2) |
88 | {
|
89 | if (tuerrechtstasterstatus == 2) {} |
90 | else
|
91 | {
|
92 | if (tuerrechtstasterset == 2) {} |
93 | else
|
94 | { tuerrechtstastertime = 0; tuerrechtstasterset = 2; } |
95 | tuerrechtstastertimer = 2; |
96 | tuerrechtstasterstrom = 1; |
97 | PORTC |= (1<<PC2); |
98 | _delay_ms(600); |
99 | PORTC &= ~ (1<<PC2); |
100 | tuerrechtstasterstatus = 2; |
101 | tuerrechtstasterstrom = 0; |
102 | }
|
103 | |
104 | }
|
105 | |
106 | //////////////////////////
|
107 | //Türtasterfunktion ende//
|
108 | //////////////////////////
|
2. Teil
1 | if ((PIND & 1<< PD3)) |
2 | {
|
3 | blinking = blinking + 1; |
4 | // Setze Timer zurück
|
5 | Timer1_Reset(); |
6 | }
|
7 | |
8 | if (blinkingtime == 2) |
9 | {
|
10 | // Wenn Zählungen der ZV vorhanden
|
11 | if (blinking > 0) |
12 | {
|
13 | |
14 | // Prüfe ZV Blinker zählungen
|
15 | if (blinking == 1) |
16 | {
|
17 | alarm = 1; // Schalte Alarmvar. ein |
18 | //kfzschliessen = 1; // Schalte KFZ Schliessenfunktion ein
|
19 | blinking = 0; // Setze blinking auf 0 |
20 | }
|
21 | |
22 | if (blinking == 2) |
23 | {
|
24 | alarm = 0; // Schalte Alarmvar. aus |
25 | blinking = 0; // Setze blinking auf 0 |
26 | }
|
27 | |
28 | if (blinking == 3) // Fenster öffnen / schliessen |
29 | {
|
30 | //zvfenster = 1; // Schalte zvfenstervar. auf 1
|
31 | blinking = 0; // Setze blinking auf 0 |
32 | }
|
33 | |
34 | if (blinking == 4) // Kofferraum öffnen |
35 | {
|
36 | //kofferraummotor = 1; // Setze Kofferraummotorvar. auf 1
|
37 | blinking = 0; // Setze blinking auf 0 |
38 | }
|
39 | }
|
40 | blinkingtime = 0; |
41 | }
|
42 | |
43 | if (blinking > 4) { blinking = 0; } |
Konkret zum Code: Was soll das eigentlich machen? Das kommt mir heftig viel Code vor, dessen Funktion nicht wirklich klar ist. Und ich bin mir fast sicher, dass man das auch einfacher lösen kann. Deine _delay_ms scheinen beispielsweise nur die eine Aufgabe zu haben, eine LED nach einer bestimmten Zeit wieder abzuschalten. Das macht man mit einem Timer. LED einschalten, Timer starten und wenn der Timer abgelaufen ist, schaltet der die LED wieder ab.
Also der Taster code soll folgendes machen (geschaltet wird auf masse) Wenn der Taster gedrückt wird soll er 600 ms schalten und wenn er wieder losgelassen wird soll er 300 ms schalten. Rechts sowie links, also das sind die Taster die an den Türen vom Auto sind. Wird die Tür zu gemacht soll das fenster 600 ms hoch fahren, wird die tür auf gemacht dann 300ms runter. das klappt ja auch soweit nur halt wenn man beide türen gleichzeitig öffnet geht erst die eine, dann die andere seite runter. Der Zähler Code soll folgendes machen. Wenn man per Funk ZV (Zentralverriegelung) Blinken die Blinker halt 1mal oder 2 mal oder 3 mal etc. und anhand des "blinkens" soll der Zählen wie oft es war, danach 2 sek. warten (vom ersten bis zum zweiten blinken dauert es jeweils 1 sek.) dann soll der jenachdem wie oft das blinken war etwas schalten, ein relai o.ä. Das Signal kommt direkt von den Blinkern und wird mittels 7805er auf 5V und dann mittels 1k widerstand an den Chip gegeben. Einen Timer habe ich auch, dieser lässt alle 3 sek eine LED in der Tür blinken. Ich hatte mit C noch nicht viel zu tun deswegen wird der Code vll. etwas umständlich sein aber vorerst geht es mir darum das es geht.
Dein Tasten/Schaltzeiten Problem ist eine Variation hiervon Beitrag "Re: Arduino Keypad und Multitasking"
Wenn dein Programm mehrere Sachen (quasi) gleichzeitig machen soll, lohnt es sich das gcc-Tutorial durchzuarbeiten. Das hat auch den Vorteil, daß man nicht jedem alles wieder von vorne erklären muß, obwohl es schon tausendmal durchgekaut wurde und genau deshalb ins Tutorial kam. Wenn du das mit Verstand durch hast, sollte dein Problem auch gelöst sein. Wenn nicht, lohnt es sich konkret zu fragen wo es hakt.
Klaus Wachtler schrieb: > Wenn nicht, lohnt es sich konkret zu fragen wo es hakt. Wo's hakt? Wie immer: "Ich muss auf etwas warten" ----> _delay_ms
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.