Projekte
workwind
NIBObee BKit-XS Obstacle
main.c
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
NIBObee B... Obstacle
main.c
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
7433 private projects
378 public projects
16180353 lines compiled
58212 builds
NIBO
@
nibobee_bkit_xs_obstacle/main.c [read only]
#include <nibobee/iodefs.h> #include <nibobee/motpwm.h> #include <nibobee/motpid.h> #include <nibobee/analog.h> #include <nibobee/led.h> #include <nibobee/delay.h> #include <nibobee/clock.h> #include <nibobee/odometry.h> #include <nibobee/sens.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> // ( ((v)<(l))? (l) : ( ((v)>(h))? (h) : (v) ) ) #define INTERVAL(l,v,h) ( ((v)<(l))? (l) : ( ((v)>(h))? (h) : (v) ) ) uint8_t mode; uint16_t counter; int16_t lval, rval; enum { MODE_HALT, MODE_GO, MODE_GO_L, MODE_GO_R, MODE_SLOW, MODE_SLOW_L, MODE_SLOW_R, MODE_BACK, MODE_BACK_L, MODE_BACK_R, MODE_BACK_HALT }; int main() { activate_output_group(IO_LEDS); // LED bits als Output sens_init(); analog_init(); odometry_init(); led_set(LED_L_RD, 1); led_set(LED_R_RD, 1); _delay_ms(200); led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); _delay_ms(800); analog_setExtToggleMode(ANALOG_EXT2, 1); analog_setExtToggleMode(ANALOG_EXT3, 1); motpid_init(); mode = MODE_HALT; counter = 200; // Hauptschleife: while(1) { sei(); _delay_ms(1); uint8_t sensL = 0; uint8_t sensR = 0; int16_t lv, rv; lv = analog_getValue(ANALOG_EXT2H); rv = analog_getValue(ANALOG_EXT3H); lv -= analog_getValue(ANALOG_EXT2); rv -= analog_getValue(ANALOG_EXT3); lv = 8 * INTERVAL(0, lv, 20); rv = 8 * INTERVAL(0, rv, 20); rval = (31 * rval + rv + 15)/32; lval = (31 * lval + lv + 15)/32; if ((lval>8*6) || (sens_getLeft())) { sensL = 3; } else if (lval>8*4) { sensL = 2; } else if (lval>8*2) { sensL = 1; } if ((rval>8*6) || (sens_getRight())) { sensR = 3; } else if (rval>8*4) { sensR = 2; } else if (rval>8*2) { sensR = 1; } led_set(LED_L_RD, (sensL > 1)); led_set(LED_R_RD, (sensR > 1)); led_set(LED_L_YE, ((sensL == 1) || (sensL == 2))); led_set(LED_R_YE, ((sensR == 1) || (sensR == 2))); if (mode == MODE_BACK_R) { if (odometry_getLeft(0) < -15) { counter = 0; } } if (mode == MODE_BACK_L) { if (odometry_getRight(0) < -15) { counter = 0; } } if (mode == MODE_BACK) { if ((odometry_getRight(0) < -40) || (odometry_getLeft(0) < -40)) { counter = 0; } } if (counter) { counter--; } else { switch (mode) { case MODE_HALT: if (sensR>sensL) { mode = MODE_BACK_R; odometry_reset(); counter=1500; } else if (sensL>sensR) { mode = MODE_BACK_L; odometry_reset(); counter=1500; } else if (sensL>0) { mode = MODE_BACK; odometry_reset(); counter=1500; } else { mode = MODE_SLOW; } break; case MODE_GO: case MODE_GO_L: case MODE_GO_R: case MODE_SLOW: case MODE_SLOW_L: case MODE_SLOW_R: if (sensR>sensL) { if (sensR==3) { mode = MODE_HALT; counter=200; } else if (sensR==2) { mode = MODE_HALT; counter=200; } else { mode = MODE_GO; } } else if (sensL>sensR) { if (sensL==3) { mode = MODE_HALT; counter=200; } else if (sensL==2) { mode = MODE_HALT; counter=200; } else { mode = MODE_GO; } } else { if (sensL==3) { mode = MODE_HALT; counter=200; } else if (sensL==2) { mode = MODE_HALT; counter=200; } else if (sensL==1) { mode = MODE_SLOW; } else { mode = MODE_GO; } } break; case MODE_BACK: mode = MODE_BACK_HALT; counter = 100; break; case MODE_BACK_L: mode = MODE_BACK_HALT; counter = 100; break; case MODE_BACK_R: mode = MODE_BACK_HALT; counter = 100; break; case MODE_BACK_HALT: mode = MODE_SLOW; break; } } switch (mode) { case MODE_HALT: motpid_stop(1); break; case MODE_GO: motpid_setSpeed ( 17, 17); break; case MODE_GO_L: motpid_setSpeed ( 10, 22); break; case MODE_GO_R: motpid_setSpeed ( 22, 10); break; case MODE_SLOW: motpid_setSpeed ( 10, 10); break; case MODE_SLOW_L: motpid_setSpeed ( 0, 10); break; case MODE_SLOW_R: motpid_setSpeed ( 10, 0); break; case MODE_BACK: motpid_setSpeed (-10, -10); break; case MODE_BACK_L: motpid_setSpeed ( 0, -10); break; case MODE_BACK_R: motpid_setSpeed (-10, 0); break; case MODE_BACK_HALT: motpid_stop(1); break; } } return 0; }
Compiler results:
Werbung
Online
autogPef
eldonwaldo5466288101
ezraqfj96853349
lancecummings57
Marinayhm
marshabarton23357
namgreenhalgh80
salvadorhanks76951
warrenhinder6456