Geh'n sie, Herr Kollege, wie soll der jemals zu dem if = 2 kommen ?
Kann passieren.Code:if(counter==1) { PORTA |= .... PORTA &=~(0.... if(counter==2) ........
Hi Leute, ich habe ein kleines problem in c. Ich haben einen taster, der bei einem druck eine variable hochzählen soll. Wenn die variable 1 ist soll der motor angehen. Wenn die variable 2 ist soll eine led angehen und die variable wieder auf 0 gesetzt werden. Leider geht es nicht. Hoffe ihr könnt mir helfen.
joni8a
Code:#include <avr/io.h> #include <stdint.h> #include <avr/delay.h> inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) { if ( ! (*port & (1 << pin)) ) { /* Pin wurde auf Masse gezogen, 100ms warten */ _delay_ms(1); // max. 262.1 ms / F_CPU in MHz _delay_ms(1); if ( *port & (1 << pin) ) { /* Anwender Zeit zum Loslassen des Tasters geben */ _delay_ms(10); return 1; } } return 0; } int main(void) { DDRA |= (1<<PA0);//Pin A0 als ausgang aktiviert;LED DDRA |=(1<<PA2);//Pin A2 als ausgang aktiviert;MOTOR STEUERUNG DDRA |=(1<<PA3);//Pin A3 als ausgang aktiviert;MOTOR STEUERUNG DDRA |=(1<<PA4);//Pin A4 als ausgang aktiviert;MOTOR AN/AUS DDRA &=~(1<<PA1);//Pin A1 als eingang aktiviert;Taster PORTA |=(1<<PA1);//Pull-up wiederstände aktiviert;Taster uint8_t counter=0; while(1) { PORTA |=(1<<PA4);//Pina A4 auf high gesetzt;MOTOR AN/AUS if(debounce(&PINA,PA1)) { counter=counter+1; if(counter==1) { PORTA |= (1<<PA2);//Pina A2 auf high gesetzt;MOTOR STEUERUNG;BEWEGEN PORTA &=~(0<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BEWEGEN if(counter==2) { //PORTA &=~ (1<<PA2);//Pina A2 auf low gesetzt;MOTOR STEUERUNG;BREMSEN //PORTA &=~(0<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BREMSEN PORTA |= (1<<PA0);//Pin A0 auf high gesetzt;LED //counter=0; } } } //PORTA &=~ (1<<PA2);//Pina A2 auf low gesetzt;MOTOR STEUERUNG;BREMSEN //PORTA &=~(0<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BREMSEN //_delay_ms(120); //PORTA |=(0<<PA2);//Pina A2 auf high gesetzt;MOTOR STEUERUNG;BEWEGEN //PORTA |=(1<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BEWEGEN //_delay_ms(120); //PORTA &=~(1<<PA2);//Pina A2 auf low gesetzt;MOTOR STEUERUNG;BREMSEN //PORTA &=~(1<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BREMSEN //_delay_ms(120); //} //else // { // PORTA |= (1<<PA2);//Pina A2 auf high gesetzt;MOTOR STEUERUNG;BEWEGEN // PORTA &=~(0<<PA3);//Pina A3 auf low gesetzt;MOTOR STEUERUNG;BEWEGEN // } } return 0; }
Geh'n sie, Herr Kollege, wie soll der jemals zu dem if = 2 kommen ?
Kann passieren.Code:if(counter==1) { PORTA |= .... PORTA &=~(0.... if(counter==2) ........
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
An dieser stelle:
if(debounce(&PINA,PA1))
{
counter=counter+1;
Zähle ich die variable doch jedes mal hoch wenn ich den taster drücke. Sry wenn mich mein problem falsch geschildert habe.
Hallo,
schau dir das Posting von Robert noch einmal genau an. Counter wird unzweifelhaft hochgezählt, aber wann fragst du Counter auf 2 ab?
Gruß
Jens
Wenn Dummheit wehtuen würde...
Ist mir fast schon extrem peinlich diese frag gestellt zu haben. Habe den fehler gefunden, danke für eure hilfe.
joni8a
Lesezeichen