Projekte
Jens_Rieser
Odometrie_Messung
main.cpp
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
Odometrie_Messung
main.cpp
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7432 private projects
378 public projects
16179195 lines compiled
58194 builds
NIBO
@
odometrie_messung/main.cpp [read only]
//Ein kleines Programm, um die Odometrie der Räder zu messen. #include <nibobee/robomain.h> int rotationTime = 2000; // Hier wird die Dauer der Drehung der Räder festgelegt (in Millisekunden). // Der Wert kann während des Programms noch verändert werden (siehe 'switch case' des rechten Fühlers am Ende). void setup() { led_init(); motpwm_init(); odometry_init(); feeler_init(); // kleine Show am Anfang :) int ledNr; for (ledNr = 0; ledNr < 4; ledNr++){ // alle Leds an led_set(ledNr,1); delay(200); } delay(1000); for (ledNr = 0; ledNr < 4; ledNr++){ // alle Leds wieder aus led_set(ledNr,0); delay(200); } } // Die Funktion dient dazu, den gemessen Odometriewert als Blinksignal aus zu geben. // Die Ausgabe erfolgt im Dezimalsystem: // - Die Led 0 gibt bis zu 9 Blinksignale aus und steht so für die Zahlen 1-9. // - Die Led 1 gibt ebenfalls bis zu 9 Blinksignale aus und steht für die zweite Stelle, also für 10-90. // - Die Leds 2 und 3 stehen für Hunderter und Tausender. // Auf diese Weise kann man einen Odometriewert von 0 bis 9999 ausgeben. // Die Funktion wird hier außerhalb des Loops definiert, um diesen Übersichtlicher zu gestalten. // Als Eingabe dienen die berechneten Stellen während der Messung aus dem 'switch case' des linken Fühlers. void ledCounter(int one, int ten, int hundred, int thousand) { int counter; for (counter = 0; counter < one; counter ++){ //Ausgabe der Einser Stelle led_set(0,1); //Led0 an delay(500); //kurz warten led_set(0,0); //Led0 aus delay(500); //kurz warten } delay(1000); //1 Sekunde Pause bis die nächste Led angesteuert wird. for (counter = 0; counter < ten; counter ++){ //Ausgabe der Zehner Stelle led_set(1,1); delay(500); led_set(1,0); delay(500); } delay(1000); for (counter = 0; counter < hundred; counter ++){ //Ausgabe der Hunderter Stelle led_set(2,1); delay(500); led_set(2,0); delay(500); } delay(1000); for (counter = 0; counter < thousand; counter ++){ //Ausgabe der Tausender Stelle led_set(3,1); delay(500); led_set(3,0); delay(500); } } void loop() { //* Hier werden die Variablen initialisiert, um Später den Odometriewert auszulesen. // Man beachte das dies alles 'int'-Variablen sind, also ganzzahlige Werte und keine Zahlen mit Komma. int thousand; int hundred; int ten; int one; //* switch (feeler_getLeft()) { //wenn der linke Fühler betätigt wird, case -1: //und zwar nach hinten, odometry_resetLeft(); //wird der linke Odometrie Zähler auf 0 gesetzt, motpwm_setLeft(500); //der linke Motor auf eine vorwärts Rotation von 500 gesetzt, delay(rotationTime); //dann gewartet, je nachdem was eingestellt wurde, motpwm_setLeft(0); //dann der linke Motor wieder gestoppt, thousand = (odometry_getLeft(0) / 1000); //der linke Odometrie Zähler ausgelesen und durch 1000 geteilt und unter 'thousand' abgespeichert, //(Alle Zahlen hinter dem Komma werden nicht gespeichert, da 'thousand' ein 'int' ist.) hundred = ((odometry_getLeft(0) % 1000) / 100); //der linke Odometrie Zähler ausgelesen und der Rest von einer Division durch 1000 durch 100 geteilt und unter 'hundred' abgespeichert, //(Bsp: 1234 % 1000 = 234 und 234 / 100 = 2,34 aber da 'hundred' ein 'int' ist wird nur 2 gespeichert. ten = ((odometry_getLeft(0) % 100) / 10); //der linke Odometrie Zähler ausgelesen und der Rest von einer Division durch 100 durch 10 geteilt und unter 'ten' abgespeichert, one = (odometry_getLeft(0) % 10); //der linke Odometrie Zähler ausgelesen und der Rest von einer Division durch 10 unter 'one' abgespeichert ledCounter(one, ten, hundred, thousand); //und schließlich die Funktion 'ledCounter' mit den ausgelesenen Werten aufgerufen. break; case +1: //wenn der linke Fühler nach vorne betätigt wird, odometry_resetRight(); //passiert das selbe wie oben, nur für das rechte Rad. motpwm_setRight(500); delay(rotationTime); motpwm_setRight(0); thousand = (odometry_getRight(0)/1000); hundred = ((odometry_getRight(0)%1000)/100); ten = ((odometry_getRight(0)%100)/10); one = (odometry_getRight(0)%10); ledCounter(one, ten, hundred, thousand); break; } switch (feeler_getRight()) { //wenn der rechte Fühler betätigt wird, case -1: //und zwar nach hinten, rotationTime = 0; //wird die Dauer der Messung auf 0 gesetzt. led_set(1,1); //Die Led1 und Led2 blinken kurz um dies zu bestätigen. led_set(2,1); //* delay(300); //* led_set(1,0); //* led_set(2,0); //* delay(300); //Es gibt noch eine kleine Pause, falls der Fühler zu lange gedrückt wurde. break; case 1: //und wenn er nach vorne gedrückt wird, rotationTime += 500; //erhöht sich die Dauer der Messung um 0,5 Sekunden, led_set(3,1); //Die Led3 blinkt kurz um dies zu bestätigen. delay(300); //* led_set(3,0); //* delay(300); //Es gibt noch eine kleine Pause, falls der Fühler zu lange gedrückt wurde. break; } }
Compiler results:
Werbung
Online
KylieSat
landongipson0325