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 */
Lesezeichen