Nabend, Ich möchte enen Taster auswerten und damit Relais schalten. Jetzt blicke ich nicht dadurch, wo ich "oldstate" zurücksetzten muss. Könnt ihr mir helfen? MfG Jonas
kannst du nicht einfach den Quelltext posten, dann könnte man ihn editieren.
[c]bit oldstate; // Merker void main() { DDB0_bit = 0; // Setze Eingang DDB1_bit = 1; // Setzte Ausgang DDB2_bit = 1; // SEtze Ausgang oldstate = 0; do { if (Button(&PINB, 0, 1, 0)) { // Taster abfagen oldstate = 1; } if (oldstate && Button(&PINB, 0, 1, 1)) { PORTB = PORTB | (1 << DDB1); // Relais 1 ein Delay_ms(2000); PORTB = PORTB | (1 << DDB2); // Relais 2 ein Delay_ms(2000); DDB2_bit = 0x00; // Relais 1 aus Delay_ms(2000); DDB1_bit = 0x00; // Relais 2 aus } } while(1); } [c]
ich würde sagen so:
1 | bit oldstate; // Merker |
2 | |
3 | void main() |
4 | {
|
5 | |
6 | DDB0_bit = 0; // Setze Eingang |
7 | DDB1_bit = 1; // Setzte Ausgang |
8 | DDB2_bit = 1; // SEtze Ausgang |
9 | |
10 | oldstate = 0; |
11 | |
12 | |
13 | do { |
14 | if (Button(&PINB, 0, 1, 0)) { // Taster abfagen |
15 | oldstate = 1; |
16 | }
|
17 | |
18 | if (oldstate && Button(&PINB, 0, 1, 1)) { |
19 | |
20 | PORTB = PORTB | (1 << DDB1); // Relais 1 ein |
21 | Delay_ms(2000); |
22 | PORTB = PORTB | (1 << DDB2); // Relais 2 ein |
23 | Delay_ms(2000); |
24 | DDB2_bit = 0x00; // Relais 1 aus |
25 | Delay_ms(2000); |
26 | DDB1_bit = 0x00; // Relais 2 aus |
27 | oldstate = 0; |
28 | }
|
29 | |
30 | } while(1); |
31 | |
32 | }
|
Das klappt nicht. Das programm läuft dann einmal durch und dann ist Ende. Es sollaber öfter klappen.
Jonas W. schrieb: > Das klappt nicht. Das programm läuft dann einmal durch und dann ist > Ende. Es sollaber öfter klappen. keine Ahnung was du Funktion
1 | Button(&PINB, 0, 1, 1) |
macht, gibt es dafür eine Doku? Vermutlich brauchst du nicht mal deinen Merker.
Der Button an Port B0 hat Standartmäßig ein 1 Signal und bekommt ein 0 Signal.
Jonas W. schrieb: > Der Button an Port B0 hat Standartmäßig ein 1 Signal und bekommt ein 0 > Signal. irgendwie ist der code merkwürdig.
1 | PORTB = PORTB | (1 << DDB1); |
wenn du es damit einschaltet, warum wird es dann komplett anders ausgeschalter?
1 | DDB2_bit = 0x00; |
du schaltet damit den Port auf Eingang und nicht den Ausgang aus!!
[c] bit oldstate; // Merker void main() { DDB0_bit = 0; // Setze Eingang DDB1_bit = 1; // Setzte Ausgang DDB2_bit = 1; // SEtze Ausgang oldstate = 0; do { if (Button(&PINB, 0, 0, 1)) { // Taster abfagen oldstate = 1; } if (oldstate && Button(&PINB, 0, 0, 0)) { PORTB = PORTB | (1 << DDB1); // Relais 1 ein Delay_ms(2000); PORTB = PORTB | (1 << DDB2); // Relais 2 ein Delay_ms(2000); PORTB = PORTB | (0 << DDB2); // Relais 1 aus Delay_ms(2000); PORTB = PORTB | (0 << DDB1); // Relais 2 aus oldstate = 0; } } while(1); } [c] So schaltet er garkeine Relais mehr aus. Nurnoch ein.
Jonas W. schrieb: > So schaltet er garkeine Relais mehr aus. Nurnoch ein. ja weil man so auch kein bit löschen kann!
1 | void main() |
2 | {
|
3 | |
4 | DDB0_bit = 0; // Setze Eingang |
5 | DDB1_bit = 1; // Setzte Ausgang |
6 | DDB2_bit = 1; // SEtze Ausgang |
7 | |
8 | do { |
9 | if ( Button(&PINB, 0, 0, 0)) { |
10 | PORTB |= (1 << DDB1); // Relais 1 ein |
11 | Delay_ms(2000); |
12 | PORTB |= (1 << DDB2); // Relais 2 ein |
13 | Delay_ms(2000); |
14 | PORTB &= ~(1 << DDB2); // Relais 1 aus |
15 | Delay_ms(2000); |
16 | PORTB &= ~(1 << DDB1); // Relais 2 aus |
17 | }
|
18 | } while(1); |
19 | }
|
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.