also habe das programm jetzt mal umgeschrieben:
und habe die errors:Code:#include <inttypes.h> #include "asuro.h" void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff) { int32_t a2; /* a2 als Integervariable festlegen*/ int32_t a3; /* a3 als Integervariable festlegen*/ int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/ int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/ int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/ uint16_t n; /* n Integervariable festlegen*/ uint16_t i; /* i als Integervariable festlegen*/ int z; /* z als Variable einführen*/ z=0.8; /* Wert für z festlegen*/ x1=0; /* Wert für x1 festlegen*/ x2=0; /* Wert für x2 festlegen*/ y0=0; /* Wert für y0 festlegen*/ y1=0; /* Wert für y1 festlegen*/ y2=0; /* Wert für y2 festlegen*/ x0=1; /* Wert für x0 festlegen*/ length=100; /* Wert für length festlegen = Wert der Signallänge*/ for (i=1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/ { if (i==1) /* Schleife 1 mit den Werten für Bandpass 1*/ { a2=2; a3=3; GAIN_FRAC=4; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]==x0) { DDRC|=(1<<PC1); /*Setze PC_1 auf output*/ PORTC|=(1<<PC1); /*Setze PC_1 auf 1 --> LED 1 leuchtet*/ Sleep(100); PORTC&=~(1<<PC1); /*Setze PC_1 auf 0 --> LED 1 geht aus*/ } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } if (i==2) /* Schleife 2 mit den Werten für Bandpass 2*/ { a2=1; a3=2; GAIN_FRAC=3; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]>(x0*z)) { DDRC|=(1<<PC4); /*Setze PC_4 auf output*/ PORTC|=(1<<PC4); /*Setze PC_4 auf 1 --> LED 2 leuchtet*/ Sleep(100); PORTC&=~(1<<PC4); /*Setze PC_4 auf 0 --> LED 2 geht aus*/ SerWrite("fall 1"); /*Über IR-Diode Fall1 senden*/ Msleep(100); } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } if (i==3) /* Schleife 3 mit den Werten für Bandpass 3*/ { a2=3; a3=2; GAIN_FRAC=1; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]>(x0*z)) { DDRC|=(1<<PC3); /*Setze PC_3 auf output*/ PORTC|=(1<<PC3); /*Setze PC_3 auf 1 --> LED 3 leuchtet*/ Sleep(100); PORTC&=~(1<<PC3); /*Setze PC_3 auf 0 --> LED 3 geht aus*/ SerWrite("fall 2"); /*Über IR-Diode Fall2 senden*/ Msleep(100); } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } if (i==4) /* Schleife 4 mit den Werten für Bandpass 4*/ { a2=4; a3=2; GAIN_FRAC=3; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]>(x0*z)) { DDRB|=(1<<PB5); /*Setze PB_5 auf output*/ PORTB|=(1<<PB5); /*Setze PB_5 auf 1 --> LED 4 leuchtet*/ Sleep(100); PORTB&=~(1<<PB5); /*Setze PB_5 auf 0 --> LED 4 geht aus*/ SerWrite("fall 3"); /*Über IR-Diode Fall3 senden*/ Msleep(100); } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } if (i==5) /* Schleife 5 mit den Werten für Bandpass 5*/ { a2=1; a3=1; GAIN_FRAC=1; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]>(x0*z)) { DDRB|=(1<<PB4); /*Setze PB_4 auf output*/ PORTB|=(1<<PB4); /*Setze PB_4 auf 1 --> LED 5 leuchtet*/ Sleep(100); PORTB&=~(1<<PB4); /*Setze PB_4 auf 0 --> LED 5 geht aus*/ SerWrite("fall 4"); /*Über IR-Diode Fall4 senden*/ Msleep(100); } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } if (i==6) /* Schleife 6 mit den Werten für Bandpass 6*/ { a2=2; a3=4; GAIN_FRAC=3; for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/ { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/ if (output[n]>(x0*z)) { DDRB|=(1<<PB0); /*Setze PB_0 auf output*/ PORTB|=(1<<PB0); /*Setze PB_0 auf 1 --> LED 6 leuchtet*/ Sleep(100); PORTB&=~(1<<PB0); /*Setze PB_0 auf 0 --> LED 6 geht aus*/ } } x1=x2=0; /*Alle Variablen auf alten Stand setzen*/ y0=y1=y2=0; x0=1; } } }
../ZUSATZ1552.c:223: error: too few arguments to function 'SerWrite'
und das 4 mal. kann kurz mir jemand das erklären was da alles rein muss?
und mein 2. programm:
hier habe ich keinen fehler mehrCode:#include <inttypes.h> #include "asuro.h" #define aus MotorDir(BREAK,BREAK) void main() { char daten; Init(); while(1) { SerRead(&daten,1,0); /*Daten einlesen*/ if (daten == 'fall1') /*Falls 1. Fall*/ { MotorDir(FWD,FWD); /*Gerade aus fahren*/ MotorSpeed(50,50); Msleep(100); } break; if (daten == 'fall2') /*Falls 2. Fall*/ { MotorDir(RWD,RWD); /*Rückwärtsfahren*/ MotorSpeed(50,50); Msleep(100); } break; if (daten == 'fall3') /*Falls 3. Fall*/ { MotorDir(FWD,FWD); /*Links fahren*/ MotorSpeed(50,0); Msleep(100); } break; if (daten == 'fall4') /*Falls 4. Fall*/ { MotorDir(FWD,FWD); /*Rechts fahren*/ MotorSpeed(0,50); Msleep(70); } break; } }![]()
und dann habe ich noch ein ersatzprogramm, falls das 1. nicht mehr läuft.
und zwar gehts hier nur drum, zu analysieren ob überhaupt ein signal eingeht:
hier habe ich leider noch einen error:Code:#include <inttypes.h> #include "asuro.h" void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff) { int32_t a2; /* a2 als Integervariable festlegen*/ int32_t a3; /* a3 als Integervariable festlegen*/ int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/ int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/ int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/ uint16_t n; /* n Integervariable festlegen*/ x1=0; /* Wert für x1 festlegen*/ x2=0; /* Wert für x2 festlegen*/ y0=0; /* Wert für y0 festlegen*/ y1=0; /* Wert für y1 festlegen*/ y2=0; /* Wert für y2 festlegen*/ x0=1; /* Wert für x0 festlegen*/ length=100; /* Wert für length festlegen = Wert der Signallänge*/ a2=3; a3=2; GAIN_FRAC=1; for (n=0;n<length;n++) { x0=input; /* x0 als Eingang festlegen*/ y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/ x2=x1; x1=x0; y2=y1; y1=y0; output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/ if (output[n]>0) /* wenn ein Signal erkannt wird, ist output[n] immer größer 0*/ { DDRB|=(1<<PB1); /*Setze PB_1 auf output*/ PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/ Sleep(100); PORTB&=~(1<<PB1); } } }
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.o.init9+0x0): undefined reference to `main'
könnt ihr mir noch helfen, wie ich das verbessern kann???
ach ja die koeffizienten a2, a3 usw. sind einfach irgendwelche werte und nicht die berechneten...







Zitieren

Lesezeichen