- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Problem mit C-Programm für den Asuro

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2006
    Beiträge
    8

    Problem mit C-Programm für den Asuro

    Anzeige

    E-Bike
    Hallo,

    Ich hab mich mal an das C-Programmieren rangewagt und hab noch so einige Probleme damit.
    Folgendes Programm geht nicht mit dem Asuro.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    			
    	
        Init();
    	while (1){                       //programm soll endlos laufen
    	while (PollSwitch()==0)    //soll die funktion so lange ausführen bis ein taster gedrückt wird
    	{
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	SerWrite("fahre..\n",8);
    	}
    	int a;                                 //...dann sollte er hier weitermachen.. nämlich kurz wenden
    	for (a=1; a==100; a++) {
    	MotorDir(RWD,FWD);
    	MotorSpeed(120,120);
    	SerWrite("schnell weg...\n",15);
    	}		                            //.. und alles von oben wieder....
    	}	
    	while (1)
    	return 0;
    }
    Wenn ich den Asuro damit anmache schreibt er an mein pc "fahre..." und er fährt auch. Das Problem ist wenn ich einen Taster drücke passiert nichts.
    Würde mich freuen, wenn mir jemand nen Tipp geben würde.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    41
    Beiträge
    237
    Kenn mich mit dem Asuro zwar nicht aus, aber
    die for - Schleife wird nie ausgeführt:
    a=1 und schleife ausführen solange a == 100
    geht ja net weil a eins ist.
    Ich denke mal du meinst:
    for(a=1; a < 100; a++)

    mfg
    Thorsten
    Open Minds. Open Sources. Open Future

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.10.2005
    Beiträge
    25
    Moin!

    Auf den ersten Blick sieht mein Hühnerauge drei Dinge die mir nicht gefallen.

    1. Bei C werden Variablen am Anfang deklariert.
    Die Deklaration mitten im Code ist eine Sache von Java.
    Also int a=0; bitte gleich nach main { setzen.
    2. Die For Schleife. Wenn mich nicht alles täuscht, müsste da for (a=0;a<=100;a++) stehen.
    Die Forschleife wird ausgeführt solange die Bedingung wahr ist.
    mit a==100 ist die von Anfang an falsch.
    Dies dürfte der Hauptfehler sein.
    3. Am Ende steht da noch ein unmotiviertes while(1) for dem return.
    Keiner weiss wohin das soll oder woher das kommt. Also weg damit.

    Ich möchte darum bitten, künftig darauf zu achten, dass man bei geschweiften Klammern vernünftig einrückt. Das macht den Code sehr viel lesbarer. Bei grösseren Projekten empfiehlt es sich hinter geschlossenen Klammern einen Kommentar zu setzen, woher diese Klammer kommt.

    while (1)
    {
    __for (a=0;a<=100;a++)
    __{
    ____delay(200);
    __}//for (a=0;a<=100;a++)
    }//while (1)

    Es macht Arbeit, aber wenn man später 5 oder mehr verschachtelte Klammerebenen hat, ist es Gold wert, wenn man die Klammern genau zuordnen kann.

    MfG Argentan

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2006
    Beiträge
    8
    ahja... Es geht... Vielen Danl

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2006
    Beiträge
    8
    Hallo,

    kann mir jmd sagen was da los ist:

    #include "asuro.h"

    int main(void)
    {

    Init();
    int b;
    int c;
    int d;

    b=50;
    c=50;
    b+c=d;

    while(1)


    return 0;
    }

    Fehlermeldung: test.c:14: error: invalid lvalue in assignment (er scheitert an a+b=d; )

    Es kann doch nicht sein, dass der asuro nich rechnen kann .. für Hilfe wäre ich dankbar

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.03.2005
    Ort
    Villach
    Alter
    33
    Beiträge
    995
    Hi,
    kannst uns mal die Asuro.h geben. Hätt sie auch selber mal gerne. Ich verwende nie int b; oder so. versuchs mal mit:

    #include <stdint.h> //Oder #include <inttypes.h> wenns nicht geht!
    uint8_t b; //für b den variablennamen einsetzen, statt int b; !!!!

    Und verwende nicht so große zahlen. Vielleicht passen sie mit den Datentyp nicht zusammen.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.01.2006
    Beiträge
    8
    int geht von -32768 bis 32767... falls ich das richtig kapiert habe...

    Die asuro.h hab ich asuro-wiki... also nicht mehr die originale:
    Code:
    /*!
     * \file asuro.h
     * \brief Definitionen und Funktionen der ASURO Bibliothek
     *
     * $Revision: 2.60 $
     * $Date: 27. September 2005 $
     * $Author: Jan Grewe, Robotrixer, Waste, Stochri, Andun, m.a.r.v.i.n $
     *
     * 
     */
    
    /****************************************************************************
    *
    * File Name:   asuro.c
    *
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * 1.00	   14.08.2003   Jan Grewe		 build
    * 2.00     14.10.2003   Jan Grewe        RIGHT_VEL -> MotorSpeed(unsigned char left_speed, unsigned char right_speed);
    *                                        LeftRwd(),LeftFwd(),RightRwd(), LEFT_VEL, 
    *                                        RigthFwd() -> MotorDir(unsigned char left_dir, unsigned char right_dir);
    *                                        GREEN_ON,GREEN_OFF,RED_ON,RED_OFF -> StatusLED(unsigned char color);
    *                                        LED_RED_ON, LED_RED_OFF -> FrontLED(unsigned char color);
    *                                        Blink(unsigned char left, unsigned char right) -> 
    *                                         BackLED(unsigned char left, unsigned char right);
    *                                        Alles in Funktionen gefasst => leichter verständlich ?!?!
    * 2.10     17.10.2003   Jan Grewe        new Timer funktion void Sleep(unsigned char time36kHz)  
    *
    *
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library "Robotrixer Buxtehude"
    *
    * Description: This file contains additional functions:
    *
    * signal (SIG_ADC)                 interrupt/signal routine for encoder-counter
    * signal (SIG_INTERRUPT1)          signal for switches
    * Encoder_Init()                   initializing encoder-counter
    * Encoder_Start()                  start autoencoding
    * Encoder_Stop()                   stop autoencoding
    * Encoder_Set(int,int)             set encodervalue
    * Msleep(int delay)                wait for delay in milliseconds
    * Gettime()                        get systemtime in milliseconds
    * PrintInt(int)
    *
    * modifications in Sleep, SIG_OUTPUT_COMPARE2, PollSwitch, LineData
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * beta1	   31.03.2005   Robotrixer	 asuro library
    * -------  ----------   --------------   ------------------------------
    * the encoder source is based on RechteckDemo.c ver 2.0 by Jan Grewe 22.10.2003 
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library modified for IR collision detector
    *
    * Description: modifications made in following functions:
    *
    * SIGNAL (SIG_OUTPUT_COMPARE2)	->	SIGNAL (SIG_OVERFLOW2)
    * Gettime()				counts now 36kHz
    * Init()				timer2 modified for adjustable duty cycle
    * Batterie()				bug fixed
    * Sleep()				counts now 36kHz
    * Msleep()				counts now 36kHz
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * beta2	   11.06.2005   Waste   	 asuro library
    * -------  ----------   --------------   ------------------------------
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library 
    *
    * Description: This file contains additional functions:
    *
    * motor control functions 29.7.2005 stochri
    * void Go(int distance)
    * void Turn(int degree)
    *
    * unsigned char Wheelspeed[2]		measured Wheelspeed by interupt
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------------------
    * sto1     29.07.2005   stochri		 asuro library with motor control functions
    * -------  ----------   --------------   ------------------------------------------
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library "Robotrixer Buxtehude"
    *
    * Description: modifications made in following function:
    *
    * Go (int distance, int speed)           Added Speed and Odometrie
    * Turn (int degree, int speed)           Added Speed and Odometrie
    *
    * modifications in Sleep, SIG_OUTPUT_COMPARE2, PollSwitch, LineData
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * And1	   31.07.2005   Andun		 See above
    * -------  ----------   --------------   ------------------------------
    * 
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library 
    *
    * Description: modifications made in following functions:
    *
    * void PrintInt(int wert)
    *
    * unsigned char Wheelspeed[2]	 	 removed
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------------------
    * 2.60     28.09.2005   m.a.r.v.i.n      doxygen comments 
    * -------  ----------   --------------   ------------------------------------------
    *****************************************************************************/
    
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    
    #ifndef ASURO_H
    #define ASURO_H
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <stdlib.h>
    
    #define  FALSE	0
    #define  TRUE	1
    
    #define  OFF    0
    #define  ON     1
    
    #define GREEN	1
    #define RED	2
    #define YELLOW  3
    
    /* neue Funktionen und Variablen*/
    #define LEFT    0
    #define RIGHT   1
    
    /* --- Globale Variablen -----------------------------------*/
    /*! 
     * Tastsensor Wert bei Interrupt Betrieb. 0=keine Taste, 1= Taste gedrueckt
     */
    int switched;
    /*! 
     * Odometriesensor Werte bei Interrupt Betrieb. encoder[0] links, encoder[1] = rechts. (Wertebereich 0..1023)
     */
    int encoder[2]; 
    
    // Wheelspeed variables 29.7.2005 stochri
    // removed not referenced 29.09.2005 m.a.r.v.i.n
    //unsigned char Wheelspeed[2];
    
    // motor control functions 29.7.2005 stochri
    // motor control functions 31.7.2005 edited by Andun
    /*! 
     * Faehrt eine bestimmte Strecke mit einer bestimmten Geschwindigkeit.
     * Benutzt die Odometrie Sensoren im Interrupt Betrieb.
     * \param distance Distanz (- rueckwaerts, + = vorwaerts)
     * \param speed Geschwindigkeit (Wertebereich 0...255)
     */
    void Go(int distance, int speed);
    
    /*! 
     * Dreht um einen bestimmten Winkel mit einer bestimmten Geschwindigkeit.
     * Benutzt die Odometrie Sensoren im Interrupt Betrieb.
     * \param degree Winkel (- rechts, + links)
     * \param speed Geschwindigkeit (Wertebereich 0...255)
     */
    void Turn(int degree, int speed);
    
    /*! 
     * gibt die aktuelle Zeit zurueck
     * \return aktuelle Zeit in Millisekunden
     */
    unsigned long Gettime(void);
    
    /*! 
     * Wartefunktion. Delay
     * \param dauer Wartezeit in Millisekunden. \see Sleep
     * 
     * Beispiel: Warte 500ms
     * \verbatim
    	Msleep(500);
       \endverbatim
     */
    /* 
    */
    void Msleep(int dauer);
    
    /*! 
     * Initialisiert und startet die Odometriesensor Messung im Interrupt Betrieb. 
     * \see encoder  
     */
    void Encoder_Init(void);
    
    /*! 
     * Odometriesensoren Werte zuruecksetzen für Interrupt Betrieb. 
     * \param setl Wert für links
     * \param setr Wert für rechts
     * \see encoder  
     */
    void Encoder_Set(int setl,int setr);
    
    /*! 
     * Odometriesensoren Messung Interrupt Betrieb anhalten
     */
    void Encoder_Stop(void);
    
    /*! 
     * Odometriesensoren Messung Interrupt Betrieb starten
     */
    void Encoder_Start(void);
    
    /*! 
     * Ausgabe eines Integer Wertes als String ueber die serielle Schnittstelle.  
     */
    void PrintInt(int wert);
    
    /*! 
     * gibt den Wert der Batteriespannung zurueck
     * \return A/D Wandler Wert (Wertebereich 0..1023)
     */
    int  Batterie(void);
    
    
    /*! Initialisiert die Hardware (Ports, A/D Wandler, Serielle Schnittstelle, PWM) 
     *  Die Init Funktion, muss von jeden Programm beim Start aufgerufen werden */
    void Init(void);
    
    /*! 
     * Setzen der Status LED.\n
     * \param color Farbe (OFF,GREEN,RED,YELLOW) 
     * 
     * Beispiel: setze Status LED GREEN
       \verbatim
    	StatusLED(GREEN); 
       \endverbatim
     */
    inline void StatusLED(unsigned char color);
    
    /*! 
     * Setzen der Front LED\n
     * \param status Zustand (OFF,ON)
     * 
     * Beispiel: Front LED On
       \verbatim
    	FrontLED(ON); 
       \endverbatim
     */
    inline void FrontLED(unsigned char status);
    
    /*! 
     * Setzen der Back LEDs\n 
     * \param left linke Back LED (OFF,ON)
     * \param right rechte Back LED (OFF,ON)
     * 
     *  Beispiel: Rechte LED an, linke LED aus
     *  \verbatim
    	BackLED(OFF,ON); 
       \endverbatim
     */
    void BackLED(unsigned char left, unsigned char right);
    
    /*! 
     * Setze Motor Richtung\n
     * \param left_dir Richtung linker Motor (FWD,RWD,BREAK,FREE)
     * \param right_dir Richtung rechter Motor (FWD,RWD,BREAK,FREE)
     * 
     * Beispiel: setze Richtung fuer rechten Motor auf Rueckwaerts
       \verbatim
    	MotorDir(BREAK,RWD); 
       \endverbatim
     */
    inline void MotorDir(unsigned char left_dir, unsigned char right_dir);
    
    /*! 
     * Setze Motor Geschwindigkeit. 0= Stop, 255=Vollgas\n
     * \param left_speed Geschwindigkeit linker Motor (Wertebereich 0..255)
     * \param right_speed Geschwindigkeit rechter Motor (Wertebereich 0..255)
     * 
     * Beispiel:  setzt Geschwindigkeit fuer linken Motor auf 150
       \verbatim
    	MotorSpeed(150,0); 
       \endverbatim
     */
    inline void MotorSpeed(unsigned char left_speed, unsigned char right_speed);
    
    /*! 
     * Ausgabe von Zeichen ueber die serielle Schnittstelle 
     * \param data Zeiger auf die auszugebenden Daten
     * \param length Anzahl der Zeichen
     */
    void SerWrite(unsigned char *data,unsigned char length);
    /*! 
     * Einlesen von Zeichen ueber die serielle Schnittstelle 
     * \param data Zeiger auf die einzulesenden Daten
     * \param length Anzahl der Zeichen
     * \param timeout 0 = blockierender Mode
     */
    void SerRead(unsigned char *data, unsigned char length, unsigned int timeout);
    
    /*! 
     * Linienfolger Daten auslesen. Photosensoren links und rechts
     * \param data Zeiger auf die zu lesenden Daten data[0] links, data[1] rechts (Wertebereich 0..1023)
     */
    void LineData(unsigned int *data);
    
    /*! 
     * Odometrie Daten auslesen Polling Betrieb. Photosensoren links und rechts
     * \param data Zeiger auf die zu lesenden Daten data[0] links, data[1] rechts (Wertebereich 0..1023)
     */
    void OdometrieData(unsigned int *data);
    
    /*! 
     * Tastsensor Abfrage Polling Betrieb
     * \return Tastenwert bitorientiert, K1 = Bit5, K2 = Bit4, K3 = Bit3, K4 = Bit2, K5 = Bit1, K6 = Bit0
     */
    unsigned char PollSwitch (void);
    
    /*! 
     * Tastsensor Abfrage Interrupt Betrieb starten. 
     * \see switched
     */
    void StartSwitch(void);
    
    /*! 
     * Tastsensor Abfrage Interrupt Betrieb anhalten.
     * \see switched
     */
    void StopSwitch(void);
    
    /*! 
     * Wartefunktion\n
     * \param time36kHz Wartezeit x/36kHz (sec)
     * 
     * Beispiel: 1 Millisekunde warten
       \verbatim
    	Sleep(36); 
       \endverbatim
     * \see Sleep
     */
    /* 
    */
    void Sleep(unsigned char time36kHz);
    /* ----------- END ------------ */
    
    
    /* --------------- INTERNAL ------------- */
    #define GREEN_LED_ON  PORTB |=  GREEN_LED	/*!< Gruene Status LED an */
    #define GREEN_LED_OFF PORTB &= ~GREEN_LED	/*!< Gruene Status LED aus */
    #define RED_LED_ON    PORTD |=  RED_LED		/*!< Rote Status LED an */
    #define RED_LED_OFF   PORTD &= ~RED_LED		/*!< Rote Status LED aus */
    
    #define FWD	(1 << PB5) 			/*!< Motor vorwaerts */
    #define RWD	(1 << PB4) 			/*!< Motor rueckwaerts */
    #define BREAK	0x00				/*!< Motor bremsen */
    #define FREE	(1 << PB4) | (1 << PB5)  	/*!< Motor freilaufend */
    
    #define IRTX        (1 << PB3)			/*!< PB3 Port fuer Infrarot Transmitter LED */
    #define GREEN_LED   (1 << PB0)          	/*!< PB0 Port fuer Gruene Status LED */
    #define RED_LED     (1 << PD2)			/*!< PD2 Port fuer Rote Status LED */
    
    #define PWM 	  (1 << PB1) | (1 << PB2)	/*!< PB1, PB2 Ports fuer Pulsweitenmodulation der Motor Geschwindigkeit */
    #define RIGHT_DIR (1 << PB4) | (1 << PB5)	/*!< PB4, PB5 Ports fuer Drehrichtung rechter Motor */
    #define LEFT_DIR  (1 << PD4) | (1 << PD5)	/*!< PD4, PD5 Ports fuer Drehrichtung linker Motor */
    
    #define SWITCHES   (1 << PD3)			/* PD3 Port fuer Tastsensor */
    #define SWITCH_ON  PORTD |= SWITCHES		/* Tastsensor an  */
    #define SWITCH_OFF PORTD &= ~SWITCHES		/* Tastsensor aus */
    
    #define BATTERIE  (1 << MUX0) | (1 << MUX2) 	/*!< ADC5 A/D Wandler Port fuer Batterie Abfrage */
    #define SWITCH    (1 << MUX2)			/*!< ADC4 A/D Wandler Port fuer Tastsensor */
    #define IR_LEFT	  (1 << MUX0) | (1 << MUX1)	/*!< ADC3 A/D Wandler Port fuer Linienfolger Fototransistor links */
    #define IR_RIGHT  (1 << MUX1)			/*!< ADC2  A/D Wandler Port fuer Linienfolger Fototransistor rechts */
    #define FRONT_LED (1 << PD6)			/*!< PD6 Port fuer Front LED */
    
    #define ODOMETRIE_LED 	  (1 << PD7)			/*!< PD7 Port fuer  Odometrie LED */
    #define ODOMETRIE_LED_ON  PORTD |= ODOMETRIE_LED	/*!< Odometrie LED an  */
    #define ODOMETRIE_LED_OFF PORTD &= ~ODOMETRIE_LED	/*!< Odometrie LED aus */
    
    #define WHEEL_LEFT   (1 << MUX0)		/*!< ADC1 A/D Wandler Port fuer Odometrie Sensor links*/
    #define WHEEL_RIGHT  0				/*!< ADC0 A/D Wandler Port fuer Odometrie Sensor rechts */
    
    #endif /* ASURO_H */

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Hallo,

    verwendet bitte mal die code Tags. Das sieht so zwar schön symmetrisch - quasi tannenbaumig - aus, ist aber kaum zu lesen.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    am besten du setzt int amit in die for-schleife

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    .....1. Bei C werden Variablen am Anfang deklariert.
    Die Deklaration mitten im Code ist eine Sache von Java. .....

    stimmt nicht, ist schwachsinn...du kannst "int a" auch in der for-schleife von c deklarieren.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests