Hallo Zusammen habe versucht ein ein-tasten-dimmer zu bauen. Code: int main(void) { uint8_t direction = 1; uint8_t pwm=0; PORTB = 0xff; DDRB = (1<<PB1); DDRC = 0x00; PORTC = 0x00; TCCR1A = (1<<WGM11) | (1<<COM1A1); TCCR1B = (1<<WGM13) |(1<<WGM12) |(0<<CS11) | (1<<CS10); ICR1 = 0xFFFF; OCR1A = 0x00; while(1) { if ((!(PINC & (1<<PINC0)) && (direction==1))) { if(++pwm==255) direction=0; } else if ((!(PINC & (1<<PINC0)) && (direction==0))) { if(--pwm==0) direction=1; } OCR1A = pwm; _delay_ms(10); } return 0; } Programm läuft aber nicht, sowie ich wollte. PWM muss immer bis 255 hochgezählt oder bis 0 runtergezählt,erst danach tut die direction toggeln. Wie muss man den Code ändern, damit die direction nach jedem Dimmgang toggelt? Danke für eure Hilfe!
probier das mal
1 | int main(void) |
2 | {
|
3 | ...
|
4 | |
5 | uint8_t pressed = 0; |
6 | |
7 | while(1) |
8 | {
|
9 | if( !(PINC & (1<<PINC0) ) ) |
10 | {
|
11 | pressed = 1; |
12 | if( direction ) |
13 | {
|
14 | if( pwm < 255 ) |
15 | ++pwm; |
16 | }
|
17 | else
|
18 | {
|
19 | if( pwm > 0 ) |
20 | --pwm; |
21 | }
|
22 | |
23 | OCR1A = pwm; |
24 | _delay_ms( 10 ); |
25 | }
|
26 | |
27 | else if( pressed ) |
28 | {
|
29 | pressed = 0; |
30 | direction = 1 - direction; |
31 | }
|
32 | }
|
Taster gedrückt halten -> dimmen
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.