PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable in C hochzählen und abfragen



joni8a
08.11.2008, 18:38
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




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

PicNick
08.11.2008, 18:42
Geh'n sie, Herr Kollege, wie soll der jemals zu dem if = 2 kommen ?


if(counter==1)
{

PORTA |= ....
PORTA &=~(0....
if(counter==2)
........



Kann passieren.

joni8a
08.11.2008, 18:45
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.

McJenso
08.11.2008, 19:24
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

joni8a
08.11.2008, 22:52
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