PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stopp am Abgrund! "Mehr spass mit ASURO band 1"



ASURO1995
14.01.2009, 12:30
Hallo

Ich habe mir vor einiger Zeit das Buch "Mehr Spaß mit ASURO" gekauft und wollte mal das Programm Stopp am Abgrund ausprobieren. ASURO sollte mit voller Geschwindigkeit vorwärts fahren bis er auf ein Schwarzes Papier trifft.

#include "asuro.h"
#define STOP 200
int main(void)
{
unsigned int lineData[2];
unsigned char running = TRUE;
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,255);
do {
LineData(lineData);
if ((lineData[0] < STOP) && (lineData[1] < STOP)) {
MotorSpeed(0,0);
BackLED(ON,ON);
running = false;
}
}
while (running);
while(1);
return 0;
}


In der Zeile 15 zeigt es mir diesen Fehler an.



> "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,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20080610) 4.3.0
Copyright (C) 2008 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.

Size before:
test.elf :
section size addr
.text 2138 0
.bss 1 8388704
.debug_aranges 64 0
.debug_pubnames 263 0
.debug_info 1077 0
.debug_abbrev 416 0
.debug_line 1622 0
.debug_frame 288 0
.debug_str 360 0
.debug_loc 388 0
Total 6617


avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
In file included from asuro.h:34,
from test.c:1:
c:/asuro_src/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test.c: In function 'main':
test.c:15: error: 'false' undeclared (first use in this function)
test.c:15: error: (Each undeclared identifier is reported only once
test.c:15: error: for each function it appears in.)
make.exe: *** [test.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:02

Vielleicht könnt ihr mir weiter Helfen
wen möglich im ganzen Programm!
Ich bin um jede Antwort froh und danke euch schon im Voraus!!!

Gruß
Pascal

askazo
14.01.2009, 12:53
Hi,

wenn Du "false" komplett groß schreibst (FALSE) sollte es gehen.

Gruß,
askazo

ASURO1995
14.01.2009, 13:00
Danke probier ich mal

ASURO1995
14.01.2009, 13:11
Funktioniert bei mir nicht habe TRUE durch 1 ersezt FALSE durch 0.
Keine Fehlermeldung wird angezeigt! Der ASURO aber bleibt stehen.

radbruch
14.01.2009, 13:25
Hallo

Bei meinem asuro (mit nichtorginaler 3mm-LED) sind die Linienwerte für Nichtdunkel bei ca 40-50. Deine 200 als Stopwert scheinen mir deshalb viel zu groß. Je kleiner der Wert umso weniger reflektieres Licht wird zur Fahrt benötigt. Versuche deshalb mal Werte bei 30-40 für Stop.

Deine Abfrage setzt voraus das beide Sensoren gleichzeitig verdunkelt werden. Wenn der asuro schräg auf die Tischkante/Linie trifft könnte dies möglicherweise nicht erfüllt sein. Besser wäre vielleicht ein ODER:

if ((lineData[0] < STOP) || (lineData[1] < STOP)) {

Oder die Überprüfung der Summe:

if (((lineData[0] < STOP) && (lineData[1] < STOP)) || ((lineData[0]+lineData[1]) < (2*STOP))) {

Und immer damit rechnen dass der asuro die Tischkante doch nicht erkennt, gelle!

Gruß

mic

Klammern korrigiert

ASURO1995
14.01.2009, 13:28
Danke werde es eimal ausprobieren

malediction
14.01.2009, 19:23
geht das überhaupt mit dem char?
muss das nicht ein boolean sein? denn nur dieser typ kann doch true und false sein.

ok, man kann einem char ja ansich zuweisen was man will, aber von der logik her passt es iwie nicht so ganz...

ASURO1995
15.01.2009, 10:57
Funktionieren tut es. :cheesy:

James C.
19.03.2009, 18:00
Guten Abend!

Sorry, dass ich diesen thread nochmal ausgegraben habe, aber ich wollte dieses programm auch mal ausprobieren, allerdings klappt das nicht so ganz. Ich habe auch dieses Problem, dass der Asuro einfach nur rumsteht, und nichts macht. Verschiedene Stop Werte habe ich auch schon ausprobiert.
Hier ist das Programm:





#include "asuro.h"

#define STOP 50
int main(void)
{

unsigned int lineData[2];
unsigned char running = 1;
Init () ;
MotorDir (FWD,FWD);
MotorSpeed(255,255);
do {
LineData (lineData) ;
if ((lineData[0] < STOP) && (lineData[1] < STOP)) {
MotorSpeed(0,0);
BackLED(ON,ON);
running = 0;

}
} while (running);
while(1);
return(0);
}



Liegt is einfach daran, dass ich nie den richtigen Stopwert finde oder gibts ein anderes Problem mit dem Programm? [/code]

pinsel120866
19.03.2009, 18:05
Hallo,

Hast du vorher gespeichert, bevor du kompiliert hast?

James C.
19.03.2009, 19:13
Danke für die Antwort!

Nein, diesmal habe ich diesen Anfängerfehler mit dem Speichern nicht gemacht xD Es lag lediglich daran, dasss es zu dunkel war und der Asuro deshalb erst gar nicht losgefahren ist. Als ich dann die Front LED angeschaltet habe, hat es prima funktioniert.

MfG