So, dass ist der bisherige Code, auch wenn er noch nicht fertig ist, da gefällt mir deiner wesentlich besser. Kann man ihm da eigentlich sagen, dass er anhalten soll wenn der Wert so und so hoch ist. Nicht dass er schon anhält, wenn er nur eine kleine Wärmequelle hat.
Danke für deine Bemühungen
Code:
#include "asuro.h"
#define THRESH1 20 ; Schwellen für die intensitätsabhängige Geschwindigkeit
#define THRESH2 80
#define THRESH3 200
void ThermalData (unsigned int *data) {
ADMUX = (1<<REFS0) | (1<<REFS1) | IR_LEFT // Multiplexer auf linken Sensor schalten
ADCSRA|= (<<ADSC) // Wandlung starten
while (!(ADCSRA & 81<<ADIF))) // Warten, bis Wandlung beendet ist
ADCSRA |= (1<<ADIF) ;// ADCIF zurück setzen
data[0]= ADCL + (ADCH <<8)// ADC-Wert auslesen
ADMUX= (1<<REFS0)| (1<< REFS1) | IR_Right // Multiplexer auf rechten Sensor schalten
ADSCRA|= (1<<ADSC) // Wandlung starten
while (!(ADCSRA & (1<<ADIF))) // Warten bis Wandlung beendet
ADCSRA |= (1<<ADIF) // ADCIF zurücksetzen
data[1] = ADCL + (ADCH<<8)// ADC-Wert auslesen
}
int main (volid) {
// Speicher für die Messwerte bereitstellen
unsigned int tdata[2]
unsigned int speed
signed int diff,sum
Int()
//Motoren immer auf vorwärts
MotorDir(FWD,FWD)
while(1)
{
//Messwerte einlesen
ThermalData(tdata)
//Die Summe der Werte wird für die Berechnung der Geschwindigkeit genutzt
sum=data[0]+tdata[1]
//Signal stark genug?
if (sum>THRESH1) {
StatusLED(GREEN)
speed=140
//Ziemlich stark?
if (sum>THRESH2) {
StatusnLED(YELLOW)
speed=200
}
//Sehr stark?
if(sum>THRESH3) {
StatusLED(RED)
speed=255
}
//Richtung bestimmen
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum
if (diff>4) {
//Links deutlich wärmer? Nach links fahren!
BackLED (ON,OFF)
MotorSpeed(0,speed)
}
else {
//Sonst geradeaus!
BackLED(OFF,OFF)
MotorSpeed(speed,speed)
}
}
}
return 0
}
Code:
Build started 10.5.2010 at 18:31:08
avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT asuroniklas.o -MF dep/asuroniklas.o.d -c ../asuroniklas.c
../asuroniklas.c:1:19: error: asuro.h: No such file or directory
../asuroniklas.c: In function 'ThermalData':
../asuroniklas.c:7: error: 'ADMUX' undeclared (first use in this function)
../asuroniklas.c:7: error: (Each undeclared identifier is reported only once
../asuroniklas.c:7: error: for each function it appears in.)
../asuroniklas.c:7: error: 'REFS0' undeclared (first use in this function)
../asuroniklas.c:7: error: 'REFS1' undeclared (first use in this function)
../asuroniklas.c:7: error: 'IR_LEFT' undeclared (first use in this function)
../asuroniklas.c:8: error: expected ';' before 'ADCSRA'
../asuroniklas.c:9: error: expected statement before ')' token
../asuroniklas.c:10: error: 'ADCSRA' undeclared (first use in this function)
../asuroniklas.c:10: error: 'ADIF' undeclared (first use in this function)
../asuroniklas.c:11: error: 'ADCL' undeclared (first use in this function)
../asuroniklas.c:11: error: 'ADCH' undeclared (first use in this function)
../asuroniklas.c:12: error: expected ';' before 'ADMUX'
../asuroniklas.c: In function 'main':
../asuroniklas.c:19: warning: type of 'volid' defaults to 'int'
../asuroniklas.c:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'unsigned'
../asuroniklas.c:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'signed'
../asuroniklas.c:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Int'
../asuroniklas.c:34: error: stray '\374' in program
../asuroniklas.c:34: error: stray '\344' in program
../asuroniklas.c:34: error: stray '\344' in program
../asuroniklas.c:63: error: expected ';' before '}' token
../asuroniklas.c:23: warning: unused variable 'diff'
make: *** [asuroniklas.o] Error 1
Build failed with 21 errors and 2 warnings...
Wie gesagt, den Code habe ich so aus dem Buch heraus geschrieben. Den wollte ich benutzen und dann verändern wie ich ihn brauche.
Lesezeichen