Ich mache die Klammern auch immer weil es einfach übersichtlicher ist. Der Kompiler erzeugt bei beiden Varianten den selben Code.
Trotz allem, ohne Schaltplan kommen wir hier wohl nicht mehr weiter...
Druckbare Version
Ich mache die Klammern auch immer weil es einfach übersichtlicher ist. Der Kompiler erzeugt bei beiden Varianten den selben Code.
Trotz allem, ohne Schaltplan kommen wir hier wohl nicht mehr weiter...
Code:also hier ist der IR Sensor code
#define __AVR_ATmega88__
#include <avr/io.h>
//#include <iom88.h>
long i;
#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 GET_IRSEN_RIGHT (PIND & 1<<PD4)
#define GET_IRSEN_LEFT (PIND & 1<<PD3)
void turnLEFTforward(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 Forward
PORTB |= 1<<PB2;
PORTB &= ~(1<<PB1);
}
void turnRIGHTforward(){
// Motor 1 Forward
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD7);
// Motor 2 stop
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<<PD3 | 1<<PD4); // PD3 PD4 Input IR Sensors;
DDRC = 1<<PC0 | 1<<PC1; // PC0 PC1 Output STATSLED0 & 1;
//PORTD &= ~(1<<PD6);
//PORTD &= ~(1<<PD7);
// (!)= schwarz & () = weiss
// GET_IRSEN_RIGHT = STATSLED1
// GET_IRSEN_LEFT = STATSLED0
while(1){
if(! GET_IRSEN_LEFT && ! GET_IRSEN_RIGHT){
turnRIGHTforward();
STATSLED0_OFF;
STATSLED1_OFF;
}
else if( ! GET_IRSEN_LEFT && GET_IRSEN_RIGHT){
turnRIGHTforward();
STATSLED0_OFF;
STATSLED1_ON;
}
else if( GET_IRSEN_LEFT && ! GET_IRSEN_RIGHT){
turnLEFTforward();
STATSLED0_ON;
STATSLED1_OFF;
}
else if( GET_IRSEN_LEFT && GET_IRSEN_RIGHT){
turnLEFTforward();
STATSLED0_ON;
STATSLED1_ON;
}
//PORTC = 1<<PC5;
//PORTC = 0<<PC5;
}
}
hier ist der IR Sensor codeCode:
#define __AVR_ATmega88__
#include <avr/io.h>
//#include <iom88.h>
long i;
#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 GET_IRSEN_RIGHT (PIND & 1<<PD4)
#define GET_IRSEN_LEFT (PIND & 1<<PD3)
void turnLEFTforward(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 Forward
PORTB |= 1<<PB2;
PORTB &= ~(1<<PB1);
}
void turnRIGHTforward(){
// Motor 1 Forward
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD7);
// Motor 2 stop
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<<PD3 | 1<<PD4); // PD3 PD4 Input IR Sensors;
DDRC = 1<<PC0 | 1<<PC1; // PC0 PC1 Output STATSLED0 & 1;
//PORTD &= ~(1<<PD6);
//PORTD &= ~(1<<PD7);
// (!)= schwarz & () = weiss
// GET_IRSEN_RIGHT = STATSLED1
// GET_IRSEN_LEFT = STATSLED0
while(1){
if(! GET_IRSEN_LEFT && ! GET_IRSEN_RIGHT){
turnRIGHTforward();
STATSLED0_OFF;
STATSLED1_OFF;
}
else if( ! GET_IRSEN_LEFT && GET_IRSEN_RIGHT){
turnRIGHTforward();
STATSLED0_OFF;
STATSLED1_ON;
}
else if( GET_IRSEN_LEFT && ! GET_IRSEN_RIGHT){
turnLEFTforward();
STATSLED0_ON;
STATSLED1_OFF;
}
else if( GET_IRSEN_LEFT && GET_IRSEN_RIGHT){
turnLEFTforward();
STATSLED0_ON;
STATSLED1_ON;
}
//PORTC = 1<<PC5;
//PORTC = 0<<PC5;
}
}
mic du glaubst also ich sollte die anderen 2 schalter auch über GND anschliessen
also gut ich versuchs mal
also ich habs jetzt so gemacht
#define SWITCH_LEFT (PINB & 1<<PB6)
#define SWITCH_RIGHT (PINB & 1<<PB4)
#define SWITCH_BACK_LEFT (PIND & 1<<PD0)
#define SWITCH_BACK_RIGHT (PINB & 1<<PB0)
ups mein kabel ist nich so lang klene änderung
#define SWITCH_LEFT (PINC & 1<<PC6)
#define SWITCH_RIGHT (PINB & 1<<PB4)
#define SWITCH_BACK_LEFT (PINB & 1<<PB6)
#define SWITCH_BACK_RIGHT (PINB & 1<<PB0)
ich glaube ihr habt sogar recht mit dem ))
das mit den )) funktionier überhaupt nicht
und das mit der neuen pin belegung hat auch nichts gebracht
was heisst das eigentlich
../Robo_Schalter.c:2:1: warning: "__AVR_ATmega88__" redefined
und wiso ist das hier nicht richtig
#define __AVR_ATmega88__
es meldet immer
Build succeeded with 2 Warnings...
dann steht das oben
zu deiner Frage ich habe die Platine nicht gekauft, ich war in einem Elektronikerkurs und wir haben alle zusammen einen Roboter gebaut natürlich hat jeder seinen eigenen bekommen, und einer Kursleiter hat die Platinen selbst geätzt.Zitat:
Zitat von radbruch
Den Kursleiter den wir hatten sagte diese Platine sei mist aber wir hatten keine Zeit neue anzufertigen wir hatten am anfang sehr viele probleme aber dann hats doch geglappt bei jeder Platine wie ich entdeckt hatte ist eine kleine stelle wo die leiterbahn gerissen ist da ist wohl bei der vorlage fürs belichten ein kratzer entstanden. tia