Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem 1 mit Snake-Vision
Hi
Ich habe die snake erweiterung jetzt zu sammen gebastelt nur habe ich ein kleines problem mit der Programmierung habe schon paar mal drüber geschaut aber der sagt mir immer etwas vom Token wo keiner ist und laut buch keiner hin soll
Hier mal der Code
#include "asuro.h"
#define THRESH1 20
#define THRESH2 80
#define THRESH3 200
void ThermalData (unsigned int *data) {
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[0] = ADCL + (ADCH) << 8);
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[1] = ADCL + (ADCH) << 8);
}
int main(void)
{
unsigned int tdata[2];
unsigned int speed;
signed int diff,sum;
Init();
MotorDir(FWD,FWD);
while(1);
{
ThermalData(tdata);
sum=tdata[0]+tdata[1];
if (sum>THRESH1) {
StatusLED(GREEN);
speed=140;
}
if (sum>THRESH2) {
StatusLED(YELLOW);
speed=200;
}
if (sum>THRESH3) {
StatusLED(RED);
speed=255;
}
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
if (diff>4) {
BackLED(ON,OFF);
MotorSpeed(0,speed);
}
else if (diff<-4) {
BackLED(OFF,ON);
MotorSpeed(speed,0);
}
else {
BackLED(OFF,OFF);
MotorSpeed(speed,speed);
}
}
else {
StatusLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
}
}
return 0;
}
Und Hier die Fehlermeldung
> "make.exe" all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=asuro.lst -std=gnu99 asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test_i2cmaster.lst -std=gnu99 test_i2cmaster.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test_i2cmaster.d; \
[ -s test_i2cmaster.d ] || rm -f test_i2cmaster.d
-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: test_i2cmaster.c
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test_i2cmaster.lst -std=gnu99 test_i2cmaster.c -o test_i2cmaster.o
In file included from asuro.h:82,
from test_i2cmaster.c:1:
C:/WinAVR/avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test_i2cmaster.c: In function `ThermalData':
test_i2cmaster.c:17: warning: suggest parentheses around + or - inside shift
test_i2cmaster.c:17: error: syntax error before ')' token
test_i2cmaster.c:27: warning: suggest parentheses around + or - inside shift
test_i2cmaster.c:27: error: syntax error before ')' token
test_i2cmaster.c: In function `main':
test_i2cmaster.c:71: error: syntax error before "else"
test_i2cmaster.c: At top level:
test_i2cmaster.c:76: error: syntax error before '}' token
test_i2cmaster.c:79:2: warning: no newline at end of file
make.exe: *** [test_i2cmaster.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:02
Bitte um Hilfe
Edit: OK habe es gefunden habe es so geschrieben data[0] = ADCL + (ADCH) << 8);
muss haber data[0] = ADCL + (ADCH << 8); so sein habe hinter der 8 ein ) das nicht dahin gehört
damaltor
11.04.2007, 20:25
funktionierts denn?
nö die Status LED ist grün wenn sie keine Wärmequelle findet sollte er eigendlich aus sein
damaltor
11.04.2007, 20:46
hast ihn mal vor den kühlschrank gehalten? oder gegen eine kalte glasscheibe? oder eben gegen irgend was anderes kaltes? mal am poti gedreht? quelltext genau gecheckt?
da ist kein Potie habe gerade angst bekommen nur ein Taster habe probiert geht aber nicht wie gesagt die Status LED wird grün müsste eigendlich aus sein
EDIT: da wird doch ein LM78L05Z oder gleichbares verlangt habe bei reihcelt disen aber nicht bekommen der hat mir einenn µA 78L05 als alternative angezeigt . Meint ihr du das es das richtige ist?
Ich glaube ich habe den fehler gefunden beim nach messen ist mir aufgefallen das ein Elko nichts anzeigt und noch etwas ist mir aufgefallen weiss ja nicht ob das normal ist aber meine Accus haben halbwegs frisch geladen 8,63Volt ich habe hier öfters was von 6 volt gehört das sind ja direkt 2,6 volt mehr ist das normal?
damaltor
12.04.2007, 13:30
Ein vollgeladener akku sollte UNTER LAST etwa 1,2 volt bringen. 4 akkus = 4,8 Volt. 4 Batterien (diese bringen etwa 1,5 volt) haben 6V. Akkus und batterien die nicht unter last stehen (asuro aus, nix angeschlossen, nur der prozessor läuft oder ähnlich; halt kein wirklicher verbraucher wie zB die motoren) können eine deutlich höhere spannung haben.
elkos zeigen nichts an. elkos speichern strom. theoretisch sollte der widerstand gegen unendlich gehen, es fliesst kein strom durch.
hmm dann weiss ich auch nicht warum mein Asuro die Erweiterung nicht nimmt :-( Ich habe nach brücken geschaut aber es sind keine vorhanden alle sachen sind neu und haben beim nachmessen alle die richtigen werte verstehe wer will ich leider nicht. Habe immer irgendwo eine ... drin kann nicht mal was auf anhieb funktionieren :-(
damaltor
12.04.2007, 17:43
hm.. versuche es mal mit extrem kalten gegnständen. was passiert da? und prüfe den quelltext nochmal genau. wirklich alles korrekt?
oder hast du die erweiterungsplatine falschrum? die gedruckten leitungen müssen auf der UNTERSEITE sein.
Hi
Ich habe ihn ins gefrierschrank gehalten 4 Sterne bis zu -18 C und es passiert überhaupt nichts habe es mit einem Teelämpchen versucht das funktioniert auch nicht leider.
Quelltext habe ich locker 15 mal nach geschaut aber finden tu ich da auch nichts leider
#include "asuro.h"
#define THRESH1 20
#define THRESH2 80
#define THRESH3 200
void ThermalData(unsigned int *data) {
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[0] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[1] = ADCL + (ADCH << 8);
}
int main(void) {
unsigned int tdata[2];
unsigned int speed;
signed int diff,sum;
Init();
MotorDir(FWD,FWD);
while(1);
{
ThermalData(tdata);
sum=tdata[0]+tdata[1];
if (sum>THRESH1) {
StatusLED(GREEN);
speed=140;
if (sum>THRESH2) {
StatusLED(YELLOW);
speed=200;
}
if (sum>THRESH3) {
StatusLED(RED);
speed=255;
}
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
if (diff>4) {
BackLED(ON,OFF);
MotorSpeed(0,speed);
}
else if (diff<-4) {
BackLED(OFF,ON);
MotorSpeed(speed,0);
}
else {
BackLED(OFF,OFF);
MotorSpeed(speed,speed);
}
}
else {
StatusLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
}
}
return 0;
}
Ich flashe die richtige datei und es ist diesmal auch wirklich die richtige datei wo ich es geschrieben habe (nicht wie beim LCD^^).
Die Platiene ist narren sicher Die aufdrücke müssen aber oben sein weil sonst die sensoren nach unten schauen Die Leiterbahnen sind aber unten.
Ich wünschte es würde noch einer Die Erweiterung fertig haben und schreiben obs bei ihm funktioniert.
damaltor
12.04.2007, 19:06
die gedruckten leiterbahnen der platine müssen UNBEDINGT nach unten zeigen. ansonsten kann gar nichts klappen. dann ist nämlich einer der adcs auf vcc gelegt. die platine ist leider nicht symmetrisch, man muss vor dem zusammenbau darauf achetn, dass man die teile auf der seite anlötet, auf der keine gedruckten leitungen sind. ansonsten, wenn die leiterbahnen bei dir auf der seite sind, wo die teile sind... dann hast du leider echt mal pech gehabt, die platine ist so recht nutzlos.
Jop so habe ichs die gedruckten leiter bahnen sind unten
obwohl eigendlich auf beiden Leiterbahnen gedruckt sind ich habe die vielen bahnen unten und die schrieften oben und die sensoren stehen nach oben
Ich glaube den fehler gefunden zu haben es ligt glaube ich eher am asuro ich habe jetzt mal den selbstest wieder drauf gemacht und die phototransistoren drauf gesteckt und siehe da die linienverfolgung funktioniert nicht die Linke back LED ist dauernd an obwohl es dunkel ist und die rechte glimmt leicht
Allerdings funktioniert mein LCD noch einwandfrei
damaltor
12.04.2007, 21:03
hmm.. dann liegts evtl tatsächlich dran. die linienverfolgung benutzt die gleichen adcs wie der sensor, der geht also nur wenn auch die linienverfolgung geht... lass dir mal die phototransistor-werte ausgeben über hyperterm
Ok funktioniert wieder aber snake version geht immer noch nicht leider
damaltor
14.04.2007, 17:37
miss mal, welche spannung an dem adc anliegt. also minus des multimeters an masse, plus an den pin der erweiterungsplatine (adc2 oder adc3, je nachdem wo der sknakevision angeschlossen ist). und dann machst du was kaltes davor, und machst das nochmal, und dann ne kerze oder so und wieder. welche spannungen liegen dann an?
Also habe jetzt gemessen habe den multie an masse gehalten dann die spannung gemessen wenn ich ein teelämpchen vor halte sind es 1,87 volt an beiden pins (ADC2und3) und wenn ich eine kalte flasche sprudel davor halte ist die Spannung auf 0 Volt. V+2 und V+1 sind kontinuerlich auf 10,53 Volt
Habe den Quelltext mal geändert für die auswertung
#include "asuro.h"
#define THRESH1 20
#define THRESH2 80
#define THRESH3 200
void ThermalData(unsigned int *data) {
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[0] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
data[1] = ADCL + (ADCH << 8);
}
int main(void) {
unsigned int tdata[2],offset[2];
unsigned int speed;
signed int diff,sum;
Init();
DDRD&=~(1<<6);
PORTD|=(1<<6);
MotorDir(FWD,FWD);
offset[0]=0;
offset[1]=0;
while(1);
{
ThermalData(tdata);
if ((PIND&(1<<6))==0){
offset[0]=tdata[0];
offset[1]=tdata[1];
}
if (tdata[0]>offset[0]) tdata[0]-=offset[0];
else tdata[0]=0;
if (tdata[1]>offset[1]) tdata[1]-=offset[1];
else tdata[1]=0;
sum=tdata[0]+tdata[1];
if (sum>THRESH1) {
StatusLED(GREEN);
speed=140;
if (sum>THRESH2) {
StatusLED(YELLOW);
speed=200;
}
if (sum>THRESH3) {
StatusLED(RED);
speed=255;
}
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
if (diff>4) {
BackLED(ON,OFF);
MotorSpeed(0,speed);
}
else if (diff<-4) {
BackLED(OFF,ON);
MotorSpeed(speed,0);
}
else {
BackLED(OFF,OFF);
MotorSpeed(speed,speed);
}
}
else {
StatusLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
}
}
return 0;
}
Das funktioniert aber leider auch nicht ich weiss nemmer weiter
damaltor
16.04.2007, 14:26
also offensichtlich funktionieren die sensoren. welche farbei hat die statusled bei dir?
durchgehend grün. Ich habe im buchgelesen das es mit der Linienverfolgung simmlich gleich ist jetzt habe ich den PhototransistorenAbgleichtest drauf gemacht und es funktioniert auch mit der erweiterung halt nur mit wärme und kälte wenn es einfach so läuft ohne was vordrann ist sind die werte bei ca. 53 wenn ich ein teelicht vorndran mache sind die werte bei ca 210 wenn ich den taster drücke steht es da und wenn ich meine hand vorhalte die in mom kalt ist sind die werte bei ca. 20
EDIT: Lol na gut mit dem normalen Linienverfolgungs programm funktioniert es
//************************************************** **************************************************
// Liniefolgeprogramm
// entwickelt aus dem mitglieferten Demoprogramm
//
// Geschwindigkeiten wurden geändert, das Verhalten invertiert (Bei Verlassen der Ideallinie wird abgebremst statt beschleunigt)
//
// letzte Änderung 29.11.2004
#include "asuro.h"
#define SPEED 0xBF
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
speedRight -=2;
if (speedRight < 0x5F) speedRight = 0x5F;
}
void LineRight (void)
{
speedLeft -=2;
if (speedLeft < 0x5F) speedLeft = 0x5F;
}
void LineDemo(void)
{
int i;
unsigned char j;
FrontLED(ON);
for (j = 0; j < 0xFF; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
MotorSpeed(speedLeft,speedRight);
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(YELLOW);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}
int main(void)
{
Init();
LineDemo ();
while(1);
return 0;
}
wenn er keine Wärmequelle hat ist die StatusLED grün und er sucht sie sobald er eine hat fährt er vorwärts die status LED wird rot.
damaltor
16.04.2007, 15:59
ok, das ist doch schonmal nicht schlecht.
ich vermute mal, dass mit den drei if-abfragen was nicht stimmt. bitte prüfe hier nochmal genz genau die klammern {}, denn aus irgendeinem grund sind die if-abfragen verschachtelt. prüfe nochmal die vorlage, da stimmt was nicht.
sollte das programm exakt so stimmen, dann melde dich nochmal, ich denke mir dann was aus.
Ich finde leider nichts falsches meine frau hat auch mal drüber geschaut aber sie findet leider auch nichts. Also mir fällt nichts mehr zu ein es kann sein das die ne andere Libery benutzt haben aber dann frage ich mich warum es dann zu Compielieren ist
damaltor
16.04.2007, 16:56
hmm... ich werde versuchen mich die tage mal zu beschäftigen. versuche mal, die threshold-werte zu verändern. vielleicht lässt sich da noch was machen
Jo habe schon versucht aber funktioniert auch nicht. Habe gerade beim rauchen gedacht das bei der Linienverfolgung ja die FrontLED auch an ist jetzt ist sie an aber nichts passiert :-(
damaltor
16.04.2007, 17:00
tja, beim rauchen kommen die besten ideen... ich muss mal sehen, im moment habe ich recht wenig zeit, ich schaue mal was sich da machen lässt.
Ok ich schaue auch weiter und vergleiche etwas mit der Linienverfolgung vllt hauts ja hin
Das einzigste was mir aufällt ist das bei dem ersten if
if (sum>THRESH1) {
StatusLED(GREEN);
speed=140;
kein } zum schluss ist. Wenn ich aber eins hin mache lässt es sich nicht mehr Commpilieren. Ich habe auch versucht einen unten weg zu machen aber egal welsches ich weg mache es kommen immer fehlermeldungen ausser so wie es jetzt ist.
Hast Du auch mal auf den Taster auf der Platine gedrückt?
(bei der Aufgabe gehts um Korrekturwert speichern etc. was nach einem Druck auf den Taster gemacht wird)
Oder den normalen Code von s. 152 ff. im Auso Buch 2 ausprobiert?
s. http://www.arexx.com/forum/viewtopic.php?t=346
Jop alles gemacht siehe http://www.arexx.com/forum/zeigebeitrag.php?t=346
damaltor
17.04.2007, 17:16
hmm... ich hab noch immer keine zeit, ich muss mir das echt mal in ruhe ansehen. vielleicht heute abend oder morgen... bin grade auf wohnungssuche; da ist nicht viel los sonst =)
@ damaltor kein thema kommt zeit kommt lösung kommt lösung kommt freude^^
Viel glück bei der suche
Also ich habe gestern Robin angeschrieben (der Autor vom Buch) von meinem Problem die antwort war dise
Hallo Danjo,
scheint so, als hätte AREXX die zum Buch gehörigen Sourcen noch nicht auf die Seite gestellt.
Ich kann Dir die fertig compilierte hex-Datei zum Testen schicken.
Muss ich nur von zuhause aus machen, wird also noch etwas dauern.
CU, Robin
Also kein fehler von mir
damaltor
18.04.2007, 17:46
na dann probiere es doch erstmal damit, und dann zeigt sich ja was los ist...
Habs heute bekommen Funktioniert perfekt hat mir alles gegeben nicht nur die Hex.
damaltor
19.04.2007, 19:39
sehr gut! und macht er jetzt das was er soll?
jup alles bestens er folgt mir mit abgleich und ohne und er läuft vor mir weg bis auf meinem Linken Motor (oder der Rechte???? Von hinten nach vorne geschaut ist es der Linke^^) der halt immer noch nicht funktioniert ich denke mal T1 ist defekt aber 100% sicher bin ich mir da nicht
Hallo, Ich habe mir auch die SnakeVision geholt, funktioniert bloß nicht richtig:
Habe die Programme von dem AsuroBuch2 von der ArexxHomepage runtergeladen und alle 3 Programme für die Snakevision geflasht. Jetzt scheint es so das mein linker Sensor (von vorne geguckt - also Sensor) nicht funktioniert bzw nur selten.
Die BackLeds leuchten ja an der entsprechenden Seite, nun flackert meine linke LED vll mal wenn ich Glück habe, ansonsten fährt mein Asuro z.B. beim Programm Weglaufen nur zu einer Seite weg. Wenn ich die Hand jetzt jedoch ganz dicht vor dem Asuro halte, fährt er gerade zurück...Woran kann das liegen?
Beim Programm OhneAbgleich leuchten auch mal beide Leds was ja eigentlich gar nicht sein darf oder? Es können ja nicht beide Leds gleichzeitig wärmer sein als die andere oO.
Ich habe die Library271 und irgendwo gelesen(sogar hier?) das das Programm mit der neuen Lib nicht funktioniert - nun ich habe die asuro.h und die asuro.c, die bei den Programmen dabei waren, in der neuen lib ersetzt und diese dann neu übersetzt: Bekomme erstma 3 Warnungen
c:/programme/winavr-20070525/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
c:/programme/winavr-20070525/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
../../Snakevision/MitAbgleich/asuro.c:41: warning: type qualifiers ignored on function return type
und naja das Problem wie oben beschrieben...
Wo bekomm ich denn die alte originale Lib her? Hab sie nirgendwo gefunden...
Danke aufjedenfall das ihr euch diesen Roman durchlest =)
damaltor
21.02.2008, 18:07
die originale lib ist auf der cd... 0o
hm ich hab sie da nicht gefunden....guck ich nochmal richtig, haste denn sonst vll nen tipp was ich machen könnte mit den problemen?
m.a.r.v.i.n
22.02.2008, 11:49
Hi,
Die kompletten Beispiel Quellen für die SnakeVision Erweiterung (inklusive Asuro Lib) gibt es bei arexx (http://www.arexx.com) unter Asuro Downloads.
[SOURCE] "Mehr Spaß mit ASURO" Band 1+2 Quellcodes
damaltor
22.02.2008, 19:32
du hast doch irgendwann mal den asuro bekommen, und die ganze software installiert. also folglich auch die originale lib...
sie liegt im verzeichnis FirstTry (such mal genau!) in form der beiden dateien asuro.c und asuro.h
diese beiden musst du in dein projektverzeichnis kopieren und dann mit ins projekt einbinden.
danke erstma für die antworten. die lib hab ich tatsächlich gefunden, hilft aber nichts. Hab dann adc3 und adc2 gegen masse gemessen(am atmega direkt), adc 2 gibt mir bei ner lampe davor etwa 2V aus, ohne Lampe 0V, adc3 nur 0V...während des Messens lief das Programm "ohne Abgleich". scheint ja bis jetzt so als wenn ein Sensor defekt wäre - vll nur kein richtigen Kontakt hat, werde jetzt mal meine Linienverfolger-Modifikation prüfen, vll sind da kalte Lötstellen bei...wäre trotzdem nett wenn ihr jetzt schon ein paar tipps hättet was ich machen könnte...mach ne Facharbeit drüber, Theorie ist soweit fertig (13 Seiten) Danke
//edit: stelle gerade fest, das meine FrontLED nicht funktioniert (Snake-Vision ist natürlich nicht gleichzeitig dran ;) )
damaltor
27.02.2008, 18:20
was heisst gegen masse gemessen? direkt am adc pin über dne sensor nach masse? du brauchst auch einen pullup-widerstand, der adc kann nur mit einem spannungsteiler funktionieren.
VCC--R--adc--sensor--masse
hab direkt an den pins vom atmega gemessen. hab jetzt übrigens die kontakte vorne erneuert, die funktionieren auch, meine front led geht auch wieder an. immerhin ein fortschritt. neues problem: wenn ich flashen will, wird die status led nur rot und mein flashtool (1.51) kann nicht connecten und sagt irgendwann timeout....
//edit:
wenn ich meine Snake-Vision aufstecke und dann flashe, funktionierts einwandfrei oO - wenn ich die wieder runternehm und led + fototransistoren wieder aufstecke --> keine verbindung und status led leuchtet rot ... woran kann das liegen? hatte ja erst angst das ich beim kontakte nachlöten den controller irgendwie beschädigt hatte, aber es funktioniert ja mit der erweiterung (kontaktstellen für die stiftleisten/buchsenleisten waren weg, also hab ich jetzt die leiterbahnen direkt mit nem kabel nachgezogen, z.B. von CON1 direkt an den dazugehörigen pin am prozzi)
damaltor
28.02.2008, 23:19
interessant.... aber wenn sich das problem so umgehen lässt XD
naja also funktionieren tuts einwandfrei inzwischen...bis auf das flashen mit den leds - aber naja was solls^^ im mom brauch ich nur den wärmesensor, will mir später vll einen weiteren roboter kaufen
ich nochmal: bin gerade dabei verschiedene Programme zu programmieren und das schon fertige aus dem Buch von Robin Gruber an die neue Lib anzupassen - also mit LineData. Scheint auch soweit zu funktionieren, aber:
Wenn die Linke Backled aufleuchten soll sobald es auf der Seite wärmer ist, glimmt die rechte led "teilweise" mit. Teilweise, weil sie bei 4 Stufen ihren Senf dazugibt:
Wärmequelle weiter weg ist --> aus;
etwas näher dran --> sie glimmt;
ziemlich nahe dran --> wieder aus;
ein kleines stück näher --> leuchtet aufmal hell
hier der code dazu:
#include "asuro.h"
int main()
{
unsigned int data[2];
Init();
while(1)
{
LineData(data);
if (data[0] || data[1] > 100)
{
if ((data[0] > 100) && (data[1] < 80))
{
BackLED(ON,OFF);
}
if ((data[0] < 80) && (data[1] > 100))
{
BackLED(OFF,ON);
}
if ((data[0] > 100) && (data[1] > 100))
{
BackLED(ON,ON);
}
}
else
{
BackLED(OFF,OFF);
}
}
return 0;
}
in der adc.c habe ich LineData einfach nur soweit angepasst, dass die interne Spannungsreferenz genommen wird, sprich: (1<<REFS1) dazugesetzt und anschließend alles neu übersetzt.
wenn ich die schon fertige hex datei für das Programm OhneAbgleich auf meinen ASURO flashe, glimmt die eine LED nur heller oder dunkler....je nach abstand (s. oben)
woran liegt das? oder macht das nichts? Danke schonmal
//achja: und kann mir vll einer erklären wie die vom Buch auf die Formel gekommen sind um herauszufinden von welcher Seite die Wärmequelle kommt?
// Richtung bestimmen
diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
if (diff>4) {
// Links deutlich wärmer? Nach links fahren!
BackLED(ON,OFF);
}
else if (diff<-4) {
// Rechts deutlich wärmer? Nach rechts fahren!
BackLED(OFF,ON);
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.