Projekte
workwind
NIBObee Linienfolge
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 Linienfolge
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
7398 private projects
378 public projects
16154816 lines compiled
58069 builds
NIBO
@
nibobee_linienfolge/main.c [read only]
#include <nibobee/iodefs.h> #include <nibobee/motpwm.h> #include <nibobee/analog.h> #include <nibobee/line.h> #include <nibobee/led.h> #include <nibobee/delay.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main() { activate_output_group(IO_LEDS); // LED bits als Output motpwm_init(); motpwm_setLeft(0); motpwm_setRight(0); analog_init(); line_readPersistent(); // Kalibrierung für Liniensensoren laden set_output_group(IO_SENS); // interne Pull-up Widerstände aktivieren activate_output_bit(IO_LINE_EN); int16_t speed_flt_l=0; int16_t speed_flt_r=0; // Countdown: LEDs blinken lassen for (uint8_t i=0; i<10; ++i) { led_set(LED_L_RD, 1); led_set(LED_R_RD, 1); _delay_ms(10); led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); _delay_ms(990); } led_set(LED_L_YE, 1); led_set(LED_R_YE, 1); _delay_ms(1000); led_set(LED_L_YE, 0); led_set(LED_R_YE, 0); // Hauptschleife: while(1) { sei(); _delay_ms(1); int16_t speed_l=0; int16_t speed_r=0; // Sensorwerte aktualisiseren int16_t lval = line_get(LINE_L); int16_t cval = line_get(LINE_C); int16_t rval = line_get(LINE_R); if (lval+cval+rval < 20) { // kein Boden (alle Werte schwarz!) led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); speed_r=0, speed_l=0; } else if ((lval<cval) && (lval<rval)) { // Linie ist links (der linke Sensor hat den kleinsten Wert) led_set(LED_L_RD, 1); led_set(LED_R_RD, 0); // Rechter Motor schnell, linken Motor langsamer, in Abhängigkeit // vom Unterschied zum mittleren Sensor besonders stark abbremsen speed_r=550, speed_l=450-1*(cval-lval); } else if ((rval<cval) && (rval<lval)) { // Linie ist rechts (der rechte Sensor hat den kleinsten Wert) led_set(LED_L_RD, 0); led_set(LED_R_RD, 1); // Linker Motor schnell, rechter Motor langsamer, in Abhängigkeit // vom Unterschied zum mittleren Sensor besonders stark abbremsen speed_r=450-1*(cval-rval), speed_l=550; } else { // Linie ist mittig (der mittlere Sensor hat den kleinsten Wert) led_set(LED_L_RD, 1); led_set(LED_R_RD, 1); // Beide Motoren sehr schnell, je nach Unterschied zum mittleren // Sensor noch etwas schneller bzw. langsamer speed_r=750 + 1*(rval-cval), speed_l=750 + 1*(lval-cval); } // Soll-Geschwindigkeit filtern: 75% alter Wert, 25% neuer Wert // alt*75/100 + neu*25/100 = (3*alt+1*neu)/4 speed_flt_l*=3; speed_flt_l+=speed_l; speed_flt_l/=4; speed_flt_r*=3; speed_flt_r+=speed_r; speed_flt_r/=4; // Soll Werte für Motoren setzen motpwm_setLeft(speed_flt_l); motpwm_setRight(speed_flt_r); } return 0; }
Compiler results:
Werbung
Online
alliewere00572455587
carinavrooman73155593
orvalbull3803443074
revavasser7583314058