ASURO Library
2.80
|
Definitionen und Funktionen der ASURO Bibliothek. Mehr ...
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
#define | FALSE 0 |
#define | TRUE 1 |
#define | OFF 0 |
#define | ON 1 |
#define | GREEN 1 |
#define | RED 2 |
#define | YELLOW 3 |
#define | LEFT 0 |
#define | RIGHT 1 |
#define | CENTER 2 |
#define | K1 (1<<5) |
#define | K2 (1<<4) |
#define | K3 (1<<3) |
#define | K4 (1<<2) |
#define | K5 (1<<1) |
#define | K6 (1<<0) |
#define | ADC_CTRL_WHEEL_LEFT 0 |
#define | ADC_CTRL_WHEEL_RIGHT 1 |
#define | ADC_CTRL_SWITCHES 2 |
#define | ADC_CTRL_IR_LEFT 3 |
#define | ADC_CTRL_IR_RIGHT 4 |
#define | ADC_CTRL_BATTERIE 5 |
#define | ADC_CTRL_SWITCHED 6 |
#define | Go(distance, speed) GoTurn(distance,0,speed) |
#define | Turn(degree, speed) GoTurn(0,degree,speed) |
#define | Batterie Battery |
#define | OdometrieData OdometryData |
#define | SerPrint_P(_str) SerPrint_p(PSTR(_str)) |
#define | GREEN_LED_ON PORTB |= GREEN_LED |
#define | GREEN_LED_OFF PORTB &= ~GREEN_LED |
#define | RED_LED_ON PORTD |= RED_LED |
#define | RED_LED_OFF PORTD &= ~RED_LED |
#define | FWD _BV(PB5) |
#define | RWD _BV(PB4) |
#define | BREAK 0x00 |
#define | FREE _BV(PB4) | _BV(PB5) |
#define | IRTX _BV(PB3) |
#define | GREEN_LED _BV(PB0) |
#define | RED_LED _BV(PD2) |
#define | PWM _BV(PB1) | _BV(PB2) |
#define | RIGHT_DIR _BV(PB4) | _BV(PB5) |
#define | LEFT_DIR _BV(PD4) | _BV(PD5) |
#define | SWITCHES _BV(PD3) |
#define | SWITCH_ON PORTD |= SWITCHES |
#define | SWITCH_OFF PORTD &= ~SWITCHES |
#define | BATTERIE _BV(MUX0) | _BV(MUX2) |
#define | SWITCH _BV(MUX2) |
#define | IR_LEFT _BV(MUX0) | _BV(MUX1) |
#define | IR_RIGHT _BV(MUX1) |
#define | FRONT_LED _BV(PD6) |
#define | ODOMETRIE_LED _BV(PD7) |
#define | ODOMETRIE_LED_ON PORTD |= ODOMETRIE_LED |
#define | ODOMETRIE_LED_OFF PORTD &= ~ODOMETRIE_LED |
#define | WHEEL_LEFT _BV(MUX0) |
#define | WHEEL_RIGHT 0 |
Typdefinitionen | |
typedef void(* | voidFuncPtr )(void) |
Funktionen | |
void | Init (void) |
Initialisiert die Hardware: Ports, A/D Wandler, Serielle Schnittstelle, PWM Die Init Funktion muss von jeden Programm beim Start aufgerufen werden. | |
unsigned long | Gettime (void) |
Gibt die aktuelle Zeit in ms zurueck. | |
void | Msleep (unsigned int ms) |
Wartefunktion in ms. | |
void | Sleep (unsigned char time36kHz) |
Wartefunktion. | |
void | EncoderInit (void) |
Den Interrupt Betrieb der Odometriesensoren-Messung initialisieren und starten. | |
void | EncoderSet (int setl, int setr) |
Interruptbetriebene Odometriesensoren Werte vorbelegen. | |
void | EncoderStop (void) |
Den Interrupt Betrieb der Odometriesensoren-Messung anhalten. | |
void | EncoderStart (void) |
Den Interrupt Betrieb der Odometriesensoren-Messung starten. | |
void | GoTurn (int distance, int degree, int speed) |
Faehrt eine bestimmte Strecke mit einer bestimmten Geschwindigkeit. (Autor: stochri) ODER Dreht um einen bestimmten Winkel mit einer bestimmten Geschwindigkeit. (Autor: stochri) Benutzt die Odometrie Sensoren im Interrupt Betrieb. Vor dem ersten Aufruf muss deshalb EncoderInit() aufgerufen werden. | |
int | Battery (void) |
Liest die Batteriespannung und gibt sie zurueck. Es erfolgt keine Konvertierung in einen Spannungswert. | |
void | LineData (unsigned int *data) |
Liest die Daten der beiden Linienverfolgungssensoren. Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein. | |
void | OdometryData (unsigned int *data) |
Liest die Daten der beiden Odometriesensoren (Radsensoren). Diese Funktion schaltet die Odometrie-LED's immer an. Diese Funktion schaltet die Back-LED's immer aus. | |
unsigned int | ReadADC (unsigned int mux, unsigned int sleep) |
Liest die A/D Multiplexer Interupt Werte des gewuenschten A/D Kanals . | |
void | StatusLED (unsigned char color) |
Steuert die (lustige) mehrfarbige Status-LED. | |
void | FrontLED (unsigned char status) |
Steuert die vorne, nach unten zeigende, Front-LED. | |
void | BackLED (unsigned char left, unsigned char right) |
Steuert die beiden hinteren Back-LED's Wenn diese Funktion aufgerufen wird, funktioniert die Odometriemessung nicht mehr, da die gleichen Port-Pins (Port C:Pin 0 und 1) des Prozessors hierfuer verwendet werden. | |
void | MotorDir (unsigned char left_dir, unsigned char right_dir) |
Steuert die Drehrichtung der Motoren. | |
void | MotorSpeed (unsigned char left_speed, unsigned char right_speed) |
Steuert die Geschwindigkeit der Motoren. | |
void | MyMotorSpeed (unsigned char left_speed, unsigned char right_speed) |
Steuert die Geschwindigkeit der Motoren. | |
void | SetMotorPower (int8_t leftpwm, int8_t rightpwm) |
Steuert die Motorgeschwindigkeit und Drehrichtung der Motoren. | |
void | SerWrite (unsigned char *data, unsigned char length) |
Senden von Daten ueber die serielle Schnittstelle. | |
void | SerRead (unsigned char *data, unsigned char length, unsigned int timeout) |
Lesen von Daten ueber die serielle Schnittstelle. | |
void | UartPutc (unsigned char zeichen) |
Sendet einen einzelnen Character über die serielle Schnittstelle. | |
void | SerPrint (char *data) |
Sendet einen null-terminierten String ueber die serielle Schnittstelle. Im Gegensatz zur SerWrite Funktion wird bei dieser Funktion kein Parameter mit der Anzahl der zu sendenden Zeichne benötigt. Es wird einfach bis zum Stringende (0-Character) gesendet. | |
void | PrintInt (int wert) |
Ausgabe eines Integer Wertes als String ueber die serielle Schnittstelle. | |
void | PrintLong (long wert) |
Ausgabe eines Long Wertes als String ueber die serielle Schnittstelle. | |
void | SerPrint_p (const char *data) |
Sendet einen null-terminierten String aus dem FLASH Speicher ueber die serielle Schnittstelle. | |
void | PrintFloat (float wert, char vorkomma, char nachkomma) |
Ausgabe eines Float Wertes als String ueber die serielle Schnittstelle. | |
unsigned char | PollSwitch (void) |
Tastsensor Abfrage im 'Polling-Betrieb'. | |
void | StartSwitch (void) |
'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten. | |
void | StopSwitch (void) |
Die globale Variable switched wird nicht mehr automatisch bei einem Tastendruck gesetzt. | |
void | Sound (uint16_t freq, uint16_t duration_msec, uint8_t amplitude) |
Soundausgabe ueber die Motoren. | |
Variablen | |
volatile unsigned int | adcValue [] |
const char | version [5] |
volatile int | switched |
Flag, dass der Interrupt SIG_INTERRUPT1 durch eine gedrueckte Taste ausgeloesst wurde. 0 = keine Taste, 1 = Taste gedrueckt. Kann im eigenen Programm immer abgefragt werden. | |
volatile int | encoder [2] |
Odometriesensor Zaehler bei Interrupt Betrieb. encoder[0] = links; encoder[1] = rechts. | |
volatile unsigned char | count36kHz |
Counter fuer 36kHz. | |
volatile unsigned long | timebase |
Sytemzeit in ms. | |
volatile int | autoencode |
Steuert, ob die Odometrie-Sensor Abfrage im Interrupt Betrieb laufen soll. | |
volatile voidFuncPtr | Ovr2IntFunc |
Zeiger auf User Funktion die von der Interupt Funktion aus aufgerufen wird. | |
volatile voidFuncPtr | AdcIntFunc |
Zeiger auf User Funktion die von der Interupt Funktion aus aufgerufen wird. | |
Definitionen und Funktionen der ASURO Bibliothek.
Definiert in Datei asuro.h.
#define BATTERIE _BV(MUX0) | _BV(MUX2) |
#define GREEN_LED _BV(PB0) |
#define GREEN_LED_OFF PORTB &= ~GREEN_LED |
#define GREEN_LED_ON PORTB |= GREEN_LED |
#define IR_LEFT _BV(MUX0) | _BV(MUX1) |
#define IR_RIGHT _BV(MUX1) |
#define IRTX _BV(PB3) |
#define LEFT_DIR _BV(PD4) | _BV(PD5) |
#define ODOMETRIE_LED _BV(PD7) |
#define ODOMETRIE_LED_OFF PORTD &= ~ODOMETRIE_LED |
#define ODOMETRIE_LED_ON PORTD |= ODOMETRIE_LED |
#define OdometrieData OdometryData |
#define PWM _BV(PB1) | _BV(PB2) |
#define RIGHT_DIR _BV(PB4) | _BV(PB5) |
#define SerPrint_P | ( | _str | ) | SerPrint_p(PSTR(_str)) |
#define SWITCH _BV(MUX2) |
#define WHEEL_LEFT _BV(MUX0) |
#define WHEEL_RIGHT 0 |
void BackLED | ( | unsigned char | left, |
unsigned char | right | ||
) |
Steuert die beiden hinteren Back-LED's
Wenn diese Funktion aufgerufen wird, funktioniert die Odometriemessung
nicht mehr, da die gleichen Port-Pins (Port C:Pin 0 und 1) des Prozessors
hierfuer verwendet werden.
[in] | left | Schaltet die linke LED an bzw. aus. [ ON | OFF ] |
[in] | right | Schaltet die rechte LED an bzw. aus. [ ON | OFF ] |
Definiert in Zeile 155 der Datei leds.c.
int Battery | ( | void | ) |
Liest die Batteriespannung und gibt sie zurueck.
Es erfolgt keine Konvertierung in einen Spannungswert.
Dabei sind:
Oder einfach:
void EncoderInit | ( | void | ) |
Den Interrupt Betrieb der Odometriesensoren-Messung initialisieren und starten.
Definiert in Zeile 94 der Datei encoder_low.c.
void EncoderSet | ( | int | setl, |
int | setr | ||
) |
Interruptbetriebene Odometriesensoren Werte vorbelegen.
[in] | setl | Wert fuer links |
[in] | setr | Wert fuer rechts |
Definiert in Zeile 182 der Datei encoder_low.c.
void EncoderStart | ( | void | ) |
Den Interrupt Betrieb der Odometriesensoren-Messung starten.
Definiert in Zeile 153 der Datei encoder_low.c.
void EncoderStop | ( | void | ) |
Den Interrupt Betrieb der Odometriesensoren-Messung anhalten.
Definiert in Zeile 135 der Datei encoder_low.c.
void FrontLED | ( | unsigned char | status | ) |
Steuert die vorne, nach unten zeigende, Front-LED.
[in] | status | Schaltet die LED an bzw. aus. [ ON | OFF ] |
Definiert in Zeile 120 der Datei leds.c.
unsigned long Gettime | ( | void | ) |
Gibt die aktuelle Zeit in ms zurueck.
Da der Asuro keine Atomuhr hat, ist es die vergangene Zeit seitdem er eingeschaltet wurde.
Genauer: nachdem der Interrupt Timer2 aktiviert wurde.
void GoTurn | ( | int | distance, |
int | degree, | ||
int | speed | ||
) |
Faehrt eine bestimmte Strecke mit einer bestimmten Geschwindigkeit. (Autor: stochri)
ODER
Dreht um einen bestimmten Winkel mit einer bestimmten Geschwindigkeit. (Autor: stochri)
Benutzt die Odometrie Sensoren im Interrupt Betrieb.
Vor dem ersten Aufruf muss deshalb EncoderInit() aufgerufen werden.
[in] | distance | Distanz in mm (- rueckwaerts, + = vorwaerts) Bei 0 wird degree fuer einen Turn benutzt. |
[in] | degree | Winkel (- rechts, + links) |
[in] | speed | Geschwindigkeit (Wertebereich 0...255) |
Definiert in Zeile 128 der Datei encoder.c.
void Init | ( | void | ) |
Initialisiert die Hardware: Ports, A/D Wandler, Serielle Schnittstelle, PWM
Die Init Funktion muss von jeden Programm beim Start aufgerufen werden.
Definiert in Zeile 228 der Datei asuro.c.
void LineData | ( | unsigned int * | data | ) |
Liest die Daten der beiden Linienverfolgungssensoren.
Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein.
[out] | data | Zeiger auf die gelesenen Daten: data[0] linker Sensor (Bereich 0..1023) data[1] rechter Sensor (Bereich 0..1023) |
void MotorDir | ( | unsigned char | left_dir, |
unsigned char | right_dir | ||
) |
Steuert die Drehrichtung der Motoren.
[in] | left_dir | Richtung des linken Motors [ FWD | RWD | BREAK | FREE ] |
[in] | right_dir | Richtung des rechten Motors [ FWD | RWD | BREAK | FREE ] |
Definiert in Zeile 126 der Datei motor_low.c.
void MotorSpeed | ( | unsigned char | left_speed, |
unsigned char | right_speed | ||
) |
Steuert die Geschwindigkeit der Motoren.
[in] | left_speed | Geschwindigkeit linker Motor (Bereich 0..255) |
[in] | right_speed | Geschwindigkeit rechter Motor (Bereich 0..255) |
Definiert in Zeile 83 der Datei motor_low.c.
void Msleep | ( | unsigned int | ms | ) |
void MyMotorSpeed | ( | unsigned char | left_speed, |
unsigned char | right_speed | ||
) |
Steuert die Geschwindigkeit der Motoren.
[in] | left_speed | Geschwindigkeit linker Motor (Bereich 0..255) |
[in] | right_speed | Geschwindigkeit rechter Motor (Bereich 0..255) |
Definiert in Zeile 80 der Datei my_motor_low.c.
void OdometryData | ( | unsigned int * | data | ) |
Liest die Daten der beiden Odometriesensoren (Radsensoren).
Diese Funktion schaltet die Odometrie-LED's immer an.
Diese Funktion schaltet die Back-LED's immer aus.
[out] | data | Zeiger auf die gelesenen Daten: data[0] linker Sensor, data[1] rechter Sensor. (Bereich 0..1023) |
Definiert in Zeile 174 der Datei adc.c.
unsigned char PollSwitch | ( | void | ) |
Tastsensor Abfrage im 'Polling-Betrieb'.
Definiert in Zeile 88 der Datei switches.c.
void PrintFloat | ( | float | wert, |
char | vorkomma, | ||
char | nachkomma | ||
) |
Ausgabe eines Float Wertes als String ueber die serielle Schnittstelle.
[in] | wert | Auszugebender Float Wert (32Bit) |
[in] | vorkomma | Anzahl der Vorkomma Stellen |
[in] | nachkomma | Anzahl der Nachkomma Stellen |
void PrintInt | ( | int | wert | ) |
Ausgabe eines Integer Wertes als String ueber die serielle Schnittstelle.
[in] | wert | Auszugebender Integer Wert (16Bit) |
void PrintLong | ( | long | wert | ) |
Ausgabe eines Long Wertes als String ueber die serielle Schnittstelle.
[in] | wert | Auszugebender Long Wert (32Bit) |
unsigned int ReadADC | ( | unsigned int | mux, |
unsigned int | sleep | ||
) |
Liest die A/D Multiplexer Interupt Werte des gewuenschten A/D Kanals
.
mux | Nummer des A/D Kanal Multiplexer |
sleep | optionale Wartezeit |
void SerPrint | ( | char * | data | ) |
Sendet einen null-terminierten String ueber die serielle Schnittstelle. Im Gegensatz zur SerWrite Funktion wird bei dieser Funktion kein Parameter mit der Anzahl der zu sendenden Zeichne benötigt. Es wird einfach bis zum Stringende (0-Character) gesendet.
Zum Senden von Rohdaten (keine ASCII Zeichen) sollte sattdessen die Funktion SerWrite verwendet werden.
[in] | data | null-terminierter String |
void SerPrint_p | ( | const char * | data | ) |
Sendet einen null-terminierten String aus dem FLASH Speicher ueber die serielle Schnittstelle.
[in] | data | null-terminierter String |
void SerRead | ( | unsigned char * | data, |
unsigned char | length, | ||
unsigned int | timeout | ||
) |
Lesen von Daten ueber die serielle Schnittstelle.
Die empfangenen Daten werden in der als Pointer uebergeben Variable data
dem Aufrufer zur verfuegung gestellt.
Der Aufrufer bestimmt ueber den Parameter Timeout, ob diese Funktion im
'blocking'- oder im 'nonblocking'-Mode laufen soll. Im 'blocking'-Mode
bleibt diese Funktion auf alle Faelle so lange aktiv, bis die, uber den
Parameter length, geforderte Anzahl Zeichen empfamgen wurde.
[out] | data | Zeiger auf die einzulesenden Daten |
[in] | length | Anzahl der zu lesenden Zeichen |
[in] | timeout | 0 = blockierender Mode Wird hier ein Wert groesser 0 uebergeben, wird nur eine gewisse Zeit lang versucht ein weiteres Zeichen ueber die Schnittstelle zu empfangen. Kommt in dieser Zeit kein weiteres Zeichen, wird im zurueckgegeben Parameter date das erste Zeichen auf 'T' gesetzt und die Funktion kehrt zum Aufrufer zurueck. Ansonsten wird die Funktion auf alle Faelle verlassen, wenn die als Parameter length geforderte Anzahl Zeichen empfangen werden konnten. |
Definiert in Zeile 158 der Datei uart.c.
void SerWrite | ( | unsigned char * | data, |
unsigned char | length | ||
) |
Senden von Daten ueber die serielle Schnittstelle.
Die zu senden Daten werden nicht als 0-terminierter C-String erwartet, sondern
es werden grundsaetzlich so viele Zeichen gesendet wie im 2.ten Parameter
angegeben werden. Deshalb sollte die Funktion eher zum Senden von Rohdaten verwendet werden (keine ASCII Zeichen) Zum Senden von Strings sollte stattdessen die Funktion SerPrint verwendet werden. Bei der aktuellen WinAVR Version (2007055) gibt es eine Warnung, falls ein String als 1. Parameter übergeben wird
[in] | *data | Zu sendende Daten |
[in] | length | Die Anzahl der zu sendenden Zeichen. |
Definiert in Zeile 93 der Datei uart.c.
void SetMotorPower | ( | int8_t | leftpwm, |
int8_t | rightpwm | ||
) |
Steuert die Motorgeschwindigkeit und Drehrichtung der Motoren.
[in] | leftpwm | linker Motor (-rückwaerts, + vorwaerts) (Wertebereich -128...127) |
[in] | rightpwm | rechter Motor (-rückwaerts, + vorwaerts) (Wertebereich -128...127) |
Definiert in Zeile 89 der Datei motor.c.
void Sleep | ( | unsigned char | time36kHz | ) |
Wartefunktion.
Die maximale Wartezeit betraegt 7ms. Fuer laengere Wartezeiten siehe Msleep().
Diese Funktion nutzt den Timer 2-Interrupt um ein 'zeitgefuehl' zu erhalten.
Der Interrupt wird mit 36 kHz, durch die Init()-Funktion initialisiert,
aufgerufen und zaehlt dort die globale Variablen count36kHz weiter.
Diese Funktion nutzt diesen Zaehler und berechnet daraus mit dem uebergeben
Parameter den Zeitpunkt wann die Pausenzeit erreicht ist, Danach bricht sie
ab, und im Hauptprogramm ist eben eine Wartezeit eingelegt worden.
[in] | time36kHz | Wartezeit x/36kHz (sec) |
void Sound | ( | uint16_t | freq, |
uint16_t | duration_msec, | ||
uint8_t | amplitude | ||
) |
Soundausgabe ueber die Motoren.
[in] | freq | Frequenz in Hz |
[in] | duration_msec | Laenge in Millisekunden |
[in] | amplitude | Amplitude |
Definiert in Zeile 65 der Datei sound.c.
void StartSwitch | ( | void | ) |
'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten.
Definiert in Zeile 132 der Datei switches.c.
void StatusLED | ( | unsigned char | color | ) |
Steuert die (lustige) mehrfarbige Status-LED.
[in] | color | Zu setzende Farbe. [ OFF | GREEN | RED | YELLOW ] Bei einem nicht definierten Wert von 'color' aendert sich nichts an der LED. |
void StopSwitch | ( | void | ) |
Die globale Variable switched wird nicht mehr automatisch bei einem
Tastendruck gesetzt.
Definiert in Zeile 153 der Datei switches.c.
void UartPutc | ( | unsigned char | zeichen | ) |
Sendet einen einzelnen Character über die serielle Schnittstelle.
[in] | zeichen | auszugebendes Zeichen |
Definiert in Zeile 179 der Datei print.c.
volatile voidFuncPtr AdcIntFunc |
Zeiger auf User Funktion die von der Interupt Funktion aus aufgerufen wird.
volatile int autoencode |
Steuert, ob die Odometrie-Sensor Abfrage im Interrupt Betrieb laufen soll.
volatile unsigned char count36kHz |
volatile int encoder[2] |
Odometriesensor Zaehler bei Interrupt Betrieb.
encoder[0] = links; encoder[1] = rechts.
volatile voidFuncPtr Ovr2IntFunc |
volatile int switched |
Flag, dass der Interrupt SIG_INTERRUPT1 durch eine gedrueckte Taste
ausgeloesst wurde. 0 = keine Taste, 1 = Taste gedrueckt.
Kann im eigenen Programm immer abgefragt werden.
volatile unsigned long timebase |