kann ich das #define __AVR_ATmega88__ einfach löschen ?Zitat von izaseba
Sachen, wo zwei #Unterstriche vor sind, sind für den Programmierer eigentlich tabu, das brauchst Du garnicht eintragen.was heisst das eigentlich
../Robo_Schalter.c:2:1: warning: "__AVR_ATmega88__" redefined
und wiso ist das hier nicht richtig
#define __AVR_ATmega88__
Der µC, den man nutzt wird im Makefile eingetragen, sonst nirgendwo
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
kann ich das #define __AVR_ATmega88__ einfach löschen ?Zitat von izaseba
Du Programmierst doch in AVRStudio, da ist bei Projekteinstellungen der Prozessortyp einzutragen, sonst niergendwo.
im code gehört nur #include<avr/io.h> hin sonst nichts.
Ja Du kannst(sollst) die Zeile löschen, wie gesagt zwei Unterstriche sind für die Kompilerbauer bestimmt und da sollte man Finger von lassen, es sei den man weiß genau was man tut.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
dann hab ich noch eine Frage zum Thema verzögerung sprich (delay)
ich habe hier einen code den ich nicht verstehe
void delay(long delay){
int i, dummy;
for(i=0; i<delay; i++)
{
dummy++;
}
}
wenn ich also einen Befehl schreibe zum beispiel
while(1){
if(switch1 == 0){
driveForward();
STATSLED1_OFF;
}
else if (switch1 == 1){
driveBackward();
delay(10000)
turnRIGHTforward();
STATSLED1_OFF;
}
}
}
muss ich jetzt das so schreiben ?
turnRIGHTforward();
delay(10000)
oder einfach so lassen turnRIGHTforward();
wenn das richtig ist wiso funktioniert das dann hier nicht ?
#include <avr/io.h>
//#include <iom88.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 GET_IRSEN_RIGHT (PIND & 1<<PD4)
#define GET_IRSEN_LEFT (PIND & 1<<PD3)
void driveForward(){
// Motor 1 Forward
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD7);
// Motor 2 Forward
PORTB |= 1<<PB2;
PORTB &= ~(1<<PB1);
}
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;
}
void stop(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 stop
PORTB |= 1<<PB2;
PORTB |= 1<<PB1;
}
void driveBackward(){
// Motor 1 backward
PORTD &= ~(1<<PD6);
PORTD |= 1<<PD7;
// Motor 2 backward
PORTB &= ~(1<<PD2);
PORTB |= 1<<PD1;
}
void turnLEFTbackward(){
// Motor 1 backward
PORTD &= ~(1<<PD6);
PORTD |= 1<<PD7;
// Motor 2 stop
PORTB |= 1<<PD2;
PORTB |= 1<<PD1;
}
void turnRIGHTbackward(){
// Motor 1 stop
PORTD |= 1<<PD6;
PORTD |= 1<<PD7;
// Motor 2 backward
PORTB &= ~(1<<PD2);
PORTB |= 1<<PD1;
}
void delay(long delay){
int i, dummy;
for(i=0; i<delay; i++)
{
dummy++;
}
}
int main(void){
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 StatusLED0 & 1;
//PORTD &= ~(1<<PD6);
//PORTD &= ~(1<<PD7);
while(1){
if( GET_IRSEN_RIGHT ) STATSLED0_ON;
else STATSLED0_OFF;
if( GET_IRSEN_LEFT ) STATSLED1_ON;
else STATSLED1_OFF;
if(! GET_IRSEN_RIGHT && ! GET_IRSEN_LEFT){
driveForward();
STATSLED0_OFF;
STATSLED1_OFF;
}
else if(GET_IRSEN_RIGHT && GET_IRSEN_LEFT){
driveBackward();
delay(10000);
turnRIGHTbackward();
delay(10000);
STATSLED0_ON;
STATSLED1_ON;
}
//PORTC = 1<<PC5;
//PORTC = 0<<PC5;
}
}
was ist das jetzt für eine delay Funktion ?
Warum nimmst Du nicht util/delay.h
und die Funktionen, die dort angeboten werden
_delay_us und _delay_ms ?
Beachtre nur, daß Du die Optimierung > O0 einschalten solltest.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Ich bin der selben Meinung wie "radbruch"
Wie schon vorher geschrieben, ohne Schaltplan ist alles nur Spekulation und hilft dir nicht weiter.
also sollte ich jetzt dieses
void delay(long delay){
int i, dummy;
for(i=0; i<delay; i++)
{
dummy++;
}
}
einfach schweissen und dieses
util/delay.h
_delay_us und _delay_ms ?
einsetzten
kannst du mir hier mal ein beispiel machen ?
zu dem hier
Code:#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 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_LEFT (PINC & 1<<PC6) #define SWITCH_RIGHT (PINB & 1<<PB4) #define SWITCH_BACK_LEFT (PINB & 1<<PB6) #define SWITCH_BACK_RIGHT (PINB & 1<<PB0) void driveForward(){ // Motor 1 Forward PORTD |= 1<<PD6; PORTD &= ~(1<<PD7); // Motor 2 Forward PORTB |= 1<<PB2; PORTB &= ~(1<<PB1); } 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; } void stop(){ // Motor 1 stop PORTD |= 1<<PD6; PORTD |= 1<<PD7; // Motor 2 stop PORTB |= 1<<PB2; PORTB |= 1<<PB1; } void driveBackward(){ // Motor 1 backward PORTD &= ~(1<<PD6); PORTD |= 1<<PD7; // Motor 2 backward PORTB &= ~(1<<PD2); PORTB |= 1<<PD1; } void turnLEFTbackward(){ // Motor 1 backward PORTD &= ~(1<<PD6); PORTD |= 1<<PD7; // Motor 2 stop PORTB |= 1<<PD2; PORTB |= 1<<PD1; } void turnRIGHTbackward(){ // Motor 1 stop PORTD |= 1<<PD6; PORTD |= 1<<PD7; // Motor 2 backward PORTB &= ~(1<<PD2); PORTB |= 1<<PD1; } int main(){ DDRD = 1<<PD6 | 1<<PD7; // PD6 PD7 Output Motor1; DDRB = 1<<PB1 | 1<<PB2; // PB1 PB2 Output Motor2; DDRC = 1<<PC0 | 1<<PC1 | 1<<PC2 | 1<<PC3; // PC0 PC1 Output StatusLED 0 & 1 & 2 & 3; //PORTD &= ~(1<<PD6); //PORTD &= ~(1<<PD7); // SWITCH_LEFT = STATSLED0 // SWITCH_RIGHT = STATSLED1 // SWITCH_BACK_RIGHT = STATSLED2 // SWITCH_BACK_LEFT = STATSLED3 while(1){ if( ! SWITCH_RIGHT && ! SWITCH_LEFT ){ driveForward(); STATSLED0_OFF; STATSLED1_OFF; STATSLED2_OFF; STATSLED3_OFF; } else if(! SWITCH_BACK_RIGHT && ! SWITCH_BACK_LEFT ){ driveForward(); STATSLED0_OFF; STATSLED1_OFF; STATSLED2_OFF; STATSLED3_OFF; } else if( SWITCH_RIGHT && SWITCH_LEFT ){ driveBackward(); STATSLED0_ON; STATSLED1_ON; STATSLED2_OFF; STATSLED3_OFF; } else if( ! SWITCH_RIGHT && SWITCH_LEFT ){ turnLEFTbackward(); STATSLED0_ON; STATSLED1_OFF; STATSLED2_OFF; STATSLED3_OFF; } else if( SWITCH_RIGHT && ! SWITCH_LEFT ){ turnRIGHTbackward(); STATSLED0_OFF; STATSLED1_ON; STATSLED2_OFF; STATSLED3_OFF; } else if( ! SWITCH_BACK_RIGHT && SWITCH_BACK_LEFT ){ turnRIGHTforward(); STATSLED0_OFF; STATSLED1_OFF; STATSLED2_ON; STATSLED3_OFF; } else if( SWITCH_BACK_RIGHT && ! SWITCH_BACK_LEFT ){ turnLEFTforward(); STATSLED0_OFF; STATSLED1_OFF; STATSLED2_OFF; STATSLED3_ON; } //PORTC = 1<<PC5; //PORTC = 0<<PC5; } }
wie muss ich das da rein schreiben und wenn ich jetzt will das der robot erst nach rets rückwerts fährt und dan wider geradeaus
mus ich dann das auch so schreiben
("befehl")
delay(10000)
("befehl")
also ich schreibe ja ganz oben
#include <until\delay.h
muss ich das jetzt einfach so scheiben
else if( ! SWITCH_RIGHT && SWITCH_LEFT ){
turnLEFTbackward();
delay(3000)
driveForward();
STATSLED0_ON;
STATSLED1_OFF;
STATSLED2_OFF;
STATSLED3_OFF;
}
oder wie ???
Lesezeichen