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