OK , hier ist der Code :
Der Code der Ultrasonics.h von lumaCode:#include "asuro.h" void InitUlrasonics(void) { // Change Oscillator-frequency of Timer 2 // to 40kHz, no toggling of IO-pin: TCCR2 = (1 << WGM21) | (1 << CS20); OCR2 = 100; // 40kHz @8MHz crystal ADCSRA = (0 << ADEN); // ADC deaktivieren // Analog Comparator einstellen: ACSR = (1 << ACIS1); // Comparator Interrupt on Falling Output Edge ADMUX = 0x03; // ADC3-Eingang mit Komparator verbinden SFIOR |= (1 << ACME); // ADC Multiplexer mit Komparator verbinden DDRD &= ~(1 << 6); // Port D Pin 6 als Eingang schalten (AIN0) } int Chirp(unsigned char flag) { // Variablen definieren unsigned int sleeptime = 0, dist = 0; if(flag) InitUlrasonics(); // Chripen: count72kHz = 0; while(count72kHz != 20) { OCR2 = 100 + 20 / 2 - count72kHz; } TCCR2 = (1 << WGM21) | (1 << CS20); OCR2 = 100; // Echos auswerten: for(;;) { Sleep(1); sleeptime += 1; if((ACSR & (1 << ACI))) { dist = (unsigned int) ((long) ((344L * ((sleeptime * 1000L) / 72L) / 10000L) / 2L)); ACSR |= (1 << ACI); break; } ACSR |= (1 << ACI); if(sleeptime > 3500) { return -1; } } //if(flag) //ReinitAsuro(); return dist; } int main(void) { // Variablen int chirpData = 0; int speed =200; // Asuro initialisieren Init(); for(;;) { chirpData = Chirp(TRUE); if(chirpData>21){ MotorDir(FWD,FWD); MotorSpeed(speed,speed); } else { MotorDir(RWD,RWD); MotorSpeed(100,speed); } } return 0; }
Danke schonmal für die HilfeCode:/******************************************************************************* * Dateiname: ultrasonics.h * Projekt: Erweiterte Asurobibliothek * * * * 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. * * * Kleine Funktionsbibliothek, mit welcher man die Ultraschall- * Erweiterungsplatine für Asuro betreiben kann. * * * @version 1.0.0 * @since 13.08.2005 * @author Luma *******************************************************************************/ #ifndef ULTRASONICS_H #define ULTRASONICS_H #include "asuro.h" /** * Konfiguriert den Asuro so, das er die Ultraschall-Erweiterungsplatine in * Betrieb nehmen kann. Hinweis: Diese Funktion wird automatisch von der * Funktion Chirp aufgerufen und sollte sonst nicht verwendet werden. */ void InitUlrasonics(void); /** * Diese Funktion wird aufgerufen, wenn man den Asuro wieder zurückstellen * will. (Das geschieht normalerweise nach einem "Chirp".). Auch diese * Funktion sollte sonst nicht verwendet werden. * */ void ReinitAsuro(void); /** * Sendet einen sogenannten "Chirp". Ist flag true (also = 1), so wird der * Asuro nach dem Chrip wieder zurückgestellt, damit man wieder wie gewohnt * alle Funktionen verwenden kann (während eines Chirps ist es z. Bsp. nicht * möglich über USART Daten zu schicken/empfangen, da der ADC deaktiviert werden * muss). Tritt irgendein Fehler auf, oder kann nicht gemessen werden, gibt * die Funktion -1 zurück. * * @param flag Ist flag true wird der Asuro nach jedem Chirp * wieder zurückgestellt und vor dem Chirpen, * umkonfiguriert. Ist flag false so kann man * mit den Funktionen InitUlrasonics sowie * ReinitAsuro Asuro entweder zum Chirpen oder * zum "Normalbetrieb" umkonfigurieren. flag auf * true zu setzen wird empfohlen wenn man nur * einzelne Messung macht. * @return Gibt die gemessene Strecke in [cm] zurück */ int Chirp(unsigned char flag); #endif
Oliver







Zitieren

Lesezeichen