-         

Ergebnis 1 bis 5 von 5

Thema: Variable in C hochzählen und abfragen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.06.2006
    Beiträge
    71

    Variable in C hochzählen und abfragen

    Anzeige

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

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Geh'n sie, Herr Kollege, wie soll der jemals zu dem if = 2 kommen ?
    Code:
                if(counter==1)
                {
                   
                   PORTA |= ....
                   PORTA &=~(0....
                   if(counter==2) 
                       ........
    Kann passieren.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.06.2006
    Beiträge
    71
    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.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.06.2006
    Beiträge
    71
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •