- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Weiß jemand wo hier der Prpgrammierfehler liegt?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Landau
    Alter
    31
    Beiträge
    54

    Weiß jemand wo hier der Prpgrammierfehler liegt?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    30.10.2007
    Ort
    Meensen
    Alter
    35
    Beiträge
    77
    Bitte die code-funktion benutzen!
    Dafür schreibst du "code" in eckigen klammern [] vor den code und /code in klammern dahinter.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    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:
    Code:
     if (Bedingung) {hier soll was gemacht werden...}
    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.

    mfg
    Erik

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Code:
    if (taste=0);
    falscher gehts schon fast nimmer

    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:
    Code:
    if (taste==0)
    {
    ....
    }
    gruesse

    EDIT:
    ausserdem um alles ab Init(); eine groooosse while-schleife, also
    Code:
    Init();
    while(1)
    {
      taste=PollSwitch();
      ....
    }

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Landau
    Alter
    31
    Beiträge
    54
    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]

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    31
    Beiträge
    69
    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

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Landau
    Alter
    31
    Beiträge
    54
    Sorry ich kann dir nicht ganz folgen. Was ist eine geschlossene Klammer?

    Danke für deine Hilfe!

    lg Christoph

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280
    Was er meint:

    Code:
    if (Bedingung)
    {
    }
    else {
    }
    du musst jeden Block mit einer geschweiften Klammer "{" eröffnen und schliesen "}".
    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!

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    ostoff: habe deinen ersten post geändert und die code-tags eingefügt.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Landau
    Alter
    31
    Beiträge
    54
    Sorry ich wusste net das man den Code so setzen kann.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress