Schreib das true einfach klein, dann sollte es klappen.
Druckbare Version
Schreib das true einfach klein, dann sollte es klappen.
ne das Funktioniert nicht
in einem unsigned char kann kein "true" oder "false" gespeichert werden. ein unsigned char ist ein einzelner buchstabe oder eine zahl zwischen 0 und 255.
du kannst also zB 0 und 1 speichern, dann sollte das programm funktionieren. ersetze alle "true" durch 1 und alle "false" durch 0.
alternative: die variable zum speichern eines wahrheitswertes (die glaube ich GROß geschreiben werden muss) heisst entweder bool oder boolean, bin mir nicht ganz sicher. sollte allerdings mit 0 und 1 einfacher gehen.
in deinem ersten programm: fährt er mit beiden rädern rückwärts? oder nur mit einem rad?
Also das Programm aus dem Buch funktioniert jetzt danke dafür.
Beim meinem selbstgeschriebenem Programm bleibt er kurz Stehen und fährt nur mit einem Rad rückwärts !
das könnte am fehlerbehafteten pollswitch liegen. tu mal direkt vor PollSwitch() folgendes:
Sleep(216);
das hilft evtl etwas.
Ich glaube, true und false sind einfach nirgends definiert. Ich verwende eine solche Konstruktion:
char flag;
flag=(1==1); // flag wird true
flag=(1==0); // falg wird false
flag=(!flag); // flag wieder true :)
Könnte wohl auch mit
define true (1==1)
define false (1==0)
funktionieren. Muss ich mal testen bei Gelegenheit. Booleans sind bei Abfragen eleganter und fehlerunanfälliger als Bytes, belegen aber vermutlich den selben Speicherplatz.
ich meinte das erste programm in seinen post...
Ne das klappt auch nicht, ist das gleiche Problem wie vorher! :-(
Wobei am Anfang zuckt er kurz nach vorne und dann fährt er automatisch mit dem Linken Motor rückwärts ohne das ich einen taster betätigt habe.
Und mir ist auf gefallen das er eine Fehlermeldung noch Anzeigt, die scheinbar aber nicht so wichtig scheint da man das Programm trotzdem falshen kann! Hier ist die Meldung:
Code: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
test.c:28:12: warning: no newline at end of file
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -lm
avr-objcopy -O ihex -R .eeprom test.elf test.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
ok... dann such mal im forum nach taster und asuro... da gibts tausende möglichkeiten =)
leider ist die tasterabfrage sehr haperig, und es werden oft fehleingaben registriert. es gibt viele unterschiedliche lösungsansätze (fehlerkorrigierende programmierung, entfernung des kondensators c7, veränderung der widerstände, anpassung der asuro.c...)
Hallo
Das es mit den tastern tausend möglichkeiten gibt kann ich verstehen, aber ich habe da nochmal eine Frage und zwaar habe ich mal ein Programm aus dem Asuro Buch übernommen um mal zu testen ob jeder Taster Funktioniert aber wenn ich das Programm zu einer Hex Datei wandeln will zeigt er Fehler an und zwar in diesem Programm hier:
und da zeigt er mir folgende Fehler an:Code:#include "asuro.h"
#include <stdlib.h>
#define OFFSET 0x3F
#define RWD_KEY ´2´
#define FWD_KEY ´8´
#define LEFT_KEY ´4´
#define RIGHT_KEY ´6´
#define STOP_KEY ´5´
volatile unsigned char switchPressed;
int speedLeft,speedRight;
SIGNAL (
void PCStop (void)
{
speedRight = speedLeft = 0;
FrontLED(OFF);
BackLED(OFF,ON);
}
int main (void)
{
unsigned char cmd;
unsigned char leftDir = FWD rightDir = RWD; // Zeile 79
int();
StartSwitch();
sei();
for(;;) {
cmd = 0;
SerRead (&cmd,1,0xFFFE);
switch (cmd) {
case RWD_KEY : PCRwd(); break;
case FWD_KEY : PCFwd(); break;
case LEFT_KEY : PCLeft(); break;
case RIGHT_KEY : PCRight(); break;
case STOP_KEY : PCStop(); break;
}
if (speedLeft > 0 && speedLeft < OFFSET)
speedLeft +=OFFSET;
if (speedLeft < 0 && speedLeft < -OFFSET)
speedLeft -=OFFSET;
if (speedRight > 0 &&speedRight < OFFSET)
speedRight += OFFSET;
if (speedRight < 0 &&speedRight > -OFFSET)
speedRight -= OFFSET;
if (switchPressed) {
speedLeft = 0;
speedRight = 0;
switchPressed = 0;
}
leftDir = rightDir = FWD; //Zeile 108
if (speedLeft < 0) leftDir = RWD;
if (speedRight < 0) rightDir = RWD;
if (speedLeft > 255) speedLeft = 255;
if (speedLeft < -255) speedLeft = -255;
if (speedRight > 255) speedRight = 255;
if (speedRight < -255) speedRight = -255;
MotorDir(leftDir,rightDir);
MotorSpeed (abs (speedLeft),abs (speedRight));
}
return 0;
Die meisten Fehler konnte ich mittlerweile auch schon selber korrigieren aber bei denne weiß ich nicht weiter.Code:r-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
test.c: In function `main':
test.c:79: error: parse error before "rightDir"
test.c:80: error: parse error before ')' token
test.c:87: error: stray '\264' in program
test.c:87: error: stray '\264' in program
test.c:88: error: stray '\264' in program
test.c:88: error: stray '\264' in program
test.c:89: error: stray '\264' in program
test.c:89: error: stray '\264' in program
test.c:89: warning: implicit declaration of function `PCLeft'
test.c:90: error: stray '\264' in program
test.c:90: error: stray '\264' in program
test.c:91: error: stray '\264' in program
test.c:91: error: stray '\264' in program
test.c:108: error: `rightDir' undeclared (first use in this function)
test.c:108: error: (Each undeclared identifier is reported only once
test.c:108: error: for each function it appears in.)
test.c:120:10: warning: no newline at end of file
test.c:120: error: parse error at end of input
make: *** [test.o] Error 1
Vielleicht wäre jemand von euch nochmal so nett sich das Programm zu gemühte führt.
Ich wäre euch sehr dankbar dafür!
(Und nochmal was anderes gibt es irgendwo eine seite wo man sich besipiel Programme runterladen bzw einsehen kann? weil dann könnte man sich da auch anregungen holen. Ich habe bei Google schon gesucht aber nicht wirklich was gefunden)
Mfg
Felix