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