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; }
Lesezeichen