Also ich programmiere zwar in C und auf einem ATmega88 aber ich habe auch einen Roboter mit zwei Reflexkopler Sensoren und zwei Taster vorne drann.
Also ich weis nicht wie das bei dir ist, aber ich glaube du brauchst eine Schaltung, die Dir ein High und ein Low Signal gibt, ich glaube man nennt das eine "Pull up/down Schaltung"
Die Schaltung sieht bei mir so aus:
http://netzdateien.ne.funpic.de/Schaltung1.bmp
Ich habe den Roboter mit den Schaltern so programmiert, allerdings in C. Du kannst den Code so nicht verwenden du müstest ihn ein bisschen umschreiben.
Hier der Code:
Code:
#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>
#define STATSLED0_ON (PORTC |= 1<<PC0)
#define STATSLED0_OFF (PORTC &= ~(1<<PC0))
#define STATSLED1_ON (PORTC |= 1<<PC1)
#define STATSLED1_OFF (PORTC &= ~(1<<PC1))
#define STATSLED2_ON (PORTC |= 1<<PC2)
#define STATSLED2_OFF (PORTC &= ~(1<<PC2))
#define STATSLED3_ON (PORTC |= 1<<PC3)
#define STATSLED3_OFF (PORTC &= ~(1<<PC3))
#define SWITCH_RIGHT (PIND & 1<<PD1)
#define SWITCH_LEFT (PIND & 1<<PD0)
void driveForward(){
// Motor 1 Forward
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD7);
// Motor 2 Forward
PORTB |= 1<<PB2;
PORTB &= ~(1<<PB1);
}
void turnLEFTbackward(){
// Motor 1 backward
PORTD &= ~(1<<PD6);
PORTD |= 1<<PD7;
// Motor 2 stop
PORTB |= 1<<PB2;
PORTB |= 1<<PB1;
}
void turnRIGHTbackward(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 backward
PORTB &= ~(1<<PB2);
PORTB |= 1<<PB1;
}
int main(){
DDRD = 1<<PD6 | 1<<PD7; // PD6 PD7 Output Motor1;
DDRB = 1<<PB1 | 1<<PB2; // PB1 PB2 Output Motor2;
DDRD &= ~(1<<PD0 | 1<<PD1); // PD0 PD1 Input Switches
DDRC = 1<<PC0 | 1<<PC1| 1<<PC2 | 1<<PC3; // PC0 PC1 Output StatusLED 0,1,2,3
// SWITCH_RIGHT = STATSLED2
// SWITCH_LEFT = STATSLED3
// ! = 0
// () = 1
while(1){
if(! SWITCH_RIGHT && ! SWITCH_LEFT){
STATSLED0_ON;
STATSLED1_ON;
STATSLED2_OFF;
STATSLED3_OFF;
driveForward();
}
else if(SWITCH_RIGHT && ! SWITCH_LEFT){
STATSLED0_OFF;
STATSLED1_ON;
STATSLED2_ON;
STATSLED3_OFF;
turnRIGHTbackward();
_delay_ms(1000);
driveForward();
}
else if( ! SWITCH_RIGHT && SWITCH_LEFT){
STATSLED0_ON;
STATSLED1_OFF;
STATSLED2_OFF;
STATSLED3_ON;
turnLEFTbackward();
_delay_ms(1000);
driveForward();
}
}
}
Funktioniert bei mir besstens.
Gruss
rob_88_20P
P.S. Was für einen IC verwendest du oder wilst du verwenden ?
Lesezeichen