Code:
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>
#define run_fwd (PINA&(1<<PA0)) // Start/Stop
#define run_rwd (PINA&(1<<PA1)) // Vorwärts/Rückwärts
#define DDR_LED DDRB // PORTB (LED)
#define DDR_INP DDRA // PORTA (Taster)
#define p_INP PORTA // PORTA für Taster
void fwd(){ // Vorwärts
PORTB<<=1;
if(!PORTB) PORTB=1;
}
void rwd(){ // Rückwärts
PORTB>>=1;
if(!PORTB) PORTB=128;
}
int main (void) {
DDR_LED = 0xff; // Ausgänge EIN für LED
DDR_INP = 0x00; // Eingänge EIN für Taster
p_INP = 0xFF; // PullUp EIN
char auswahl='s'; // Default
while(1) { // MAINSCHLEIFE
if((run_rwd)&&(auswahl=='f')) auswahl='r'; // Run RWD, war FWD
else if((run_rwd)&&(auswahl=='r')) auswahl='f'; // Run FWD, war RWD
else if((run_fwd==1)&&(auswahl=='f')) auswahl='x'; // Stop FWD, war FWD
else if((run_fwd==1)&&(auswahl=='r')) auswahl='y'; // Stop RWD, war RWD
switch(auswahl){
case 'f': // VORWÄRTS FWD
fwd();
break;
case 'r' : // RÜCKWÄRTS RWD
rwd();
break;
case 'x' : // STOP FWD, setze danach FWD (war FWD)
loop_until_bit_is_set(PINA, PA0);
auswahl='f';
break;
case 'y' : // STOP RWD, setzte danach RWD (war RWD)
loop_until_bit_is_set(PINA, PA0);
auswahl='r';
break;
case 's' : // Default Stop, Start drücken zum Starten
loop_until_bit_is_set(PINA, PA0);
auswahl='f';
break;
}
} // MAINSCHLEIFEN ENDE
return 0;
}
So besser? Wenn ich die Variablen mit <pre>#define</pre> Deklariere, funktioniert alles wunderbar. Wenn ich es hingegegen mit <pre>uint8_t</pre> mache Funktioniert es nicht. Genauso: Schreibe ich statt <pre> if((run_rwd)&&(auswahl=='f')) auswahl='r';</pre> dieses <pre> if((run_rwd==1)&&(auswahl=='f')) auswahl='r';</pre> Funktioniert das Rückwärts Shiften auch nicht. Er ändert die Variable dann nicht. Bei <pre>run_fwd</pre> ist es egal wie ichs mach ^^ Irgendwie ... weis nich.
Das AVR Studio bietet dort ein kleines Kuriosum. Genauso wie <pre>_delay_ms(>10)</pre> nicht Funktioniert. Er Springt dann in der delay.h rum, macht aber nichts. Ergo kann ich auch keine debounce Funktion einbauen, bzw den "vorgekauten" Code benutzen.
Ich hoffe auf Lösung und verbleibe mit Freundlichen Grüßen
Lesezeichen