Code:
#ifndef ASURO_H
#define ASURO_H
#include <avr/io.h>
#include <avr/interrupt.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