Bitte die code-funktion benutzen!
Dafür schreibst du "code" in eckigen klammern [] vor den code und /code in klammern dahinter.
ich habe heute mit "c" angefangen und habe etwas Probleme mit einigen errormeldungen:
Wo liegt hier der Fehler?:
Code:#include "asuro.h" int main (void){ unsigned char taste; Init(); taste=PollSwitch(); if (taste=0); {MotorDir(FWD,FWD); MotorSpeed(140,120); StatusLED(GREEN); } else {MotorSpeed(0,0); Sleep(200); MotorDir(RWD,RWD); MotorSpeed(140,120); Sleep(1000); MotorDir(RWD,FWD); MotorSpeed(120,140);} while(1); return;}
Die Errormeldung:
> "C:\Users\Christoph\Documents\ASURO_src\FirstTry\T est-all.bat"
Code:C:\Users\Christoph\Documents\ASURO_src\FirstTry>make 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 (GCC) 4.2.2 (WinAVR 20071221) Copyright (C) 2007 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 2558 0 .data 256 8388704 .bss 1 8388960 .stab 888 0 .stabstr 95 0 .debug_aranges 64 0 .debug_pubnames 263 0 .debug_info 988 0 .debug_abbrev 388 0 .debug_line 1060 0 .debug_frame 288 0 .debug_str 410 0 .debug_loc 457 0 Total 7716 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:/winavr-20071221/bin/../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:8: warning: suggest parentheses around assignment used as truth value test.c:15: error: expected expression before 'else' test.c:29: error: expected declaration or statement at end of input make: *** [test.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:00
Bitte die code-funktion benutzen!
Dafür schreibst du "code" in eckigen klammern [] vor den code und /code in klammern dahinter.
Hi ostoff,
erstmal solltest du Code immer in die Code tags packen, damit die posts nicht so lang werden. Zu deinem Programm solltest du auf jeden fall erstmal das semikolen wegnehmen. If bedingungen sehen immer so aus:
und dann solltest du das Programm in die Endlosschleife schreiben, da er sonst nur einmal die Tasterabfragt und dann nie wieder. Probleme könntest du noch kriegen, weil du nur einmal die PollSwitch funktion abgefragt hast. Die gibt nämlich oft falsche werte zurück, daher immer lieber mindestens 2 mal abfragen (dazu findest du sehr viel hier im Forum geh mal auf die Suche ) und soweit ich weiß ist die Logische verknüpfung auf gleich so "==" und nicht so "=". Ich hoffe das war soweit alles verständlich, wenn nicht frag nach.Code:if (Bedingung) {hier soll was gemacht werden...}
mfg
Erik
falscher gehts schon fast nimmerCode:if (taste=0);
das "=" ist in c eine zuweisung, der variablen "taste" wird also der wert 0 zugewiesen, danach wird (wegen dem strichpunk hinter der klammer) nichts gemacht.
sollte besser so aussehen:
gruesseCode:if (taste==0) { .... }
EDIT:
ausserdem um alles ab Init(); eine groooosse while-schleife, also
Code:Init(); while(1) { taste=PollSwitch(); .... }
Hab euer Tips versucht umzusetzen:
Code:#include "asuro.h" int main(void) { unsigned char taste; Init(); while(1) { PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); taste = PollSwitch(); if(taste == 0) { StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(150,150); else { MotorSpeed(0,0); MotorDir(RWD,RWD); MotorSpeed(150,150); Sleep (36); MotorDir(FWD,RWD); StatusLED(RED); MotorSpeed(100,90); Sleep (36); SerWrite("Mann ich hab zu tun, verschwinde! Ich muss weiter!",40); MotorSpeed(0,0); } } }
Doch irgendwie Stottert der Motor nur.
GrußChristoph[/code]
also hi erstmal
nach der if bedingung musst du eine geschlossene Klammer setzen, um dem programm zu sagen, wo diese endet. da du diese geschwiffeneklammer hinter die else anweisung gemacht hast, kann diese nie aufgerufen werden.
warum der motor stottert kann ich dir nicht sagen, doch ich nehme an, das pollswitch nie 1 zurückliefert, der motor also eigentlich garnicht angesteuert wird.
vllt solltest du calso mal ein programm schreiben, das dir pollswithc anden pc sendet, um dies festzustellen.
MfG
Jan
Sorry ich kann dir nicht ganz folgen. Was ist eine geschlossene Klammer?
Danke für deine Hilfe!
lg Christoph
Was er meint:
du musst jeden Block mit einer geschweiften Klammer "{" eröffnen und schliesen "}".Code:if (Bedingung) { } else { }
du hast nach if zwar eine geöffnete Geschweifte Klammer gesetzt ( { ) doch nie den Block mit einer geschlossen. Also vor dem else noch eine } einfügen!
ostoff: habe deinen ersten post geändert und die code-tags eingefügt.
Sorry ich wusste net das man den Code so setzen kann.
Lesezeichen