Projekte
Markus_86
Linienverfolgung & Hinderniserkennung
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
Linienver...erkennung
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
@
vermischt_1/main.c [read only]
/* NIBObee C project */ #include <nibobee/iodefs.h> #include <nibobee/led.h> #include <nibobee/sens.h> #include <nibobee/delay.h> #include <nibobee/analog.h> #include <nibobee/base.h> #include <nibobee/clock.h> #include <nibobee/motpwm.h> #include <nibobee/odometry.h> #include <nibobee/line.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main() { led_init(); sens_init(); motpwm_init(); motpwm_setLeft(0); motpwm_setRight(0); odometry_init(); analog_init(); line_readPersistent(); set_output_group(IO_SENS); activate_output_bit(IO_LINE_EN); activate_output_group(IO_LEDS); int16_t speed_flt_l=0; int16_t speed_flt_r=0; int16_t speed_r; int16_t speed_l; int16_t speed_ton; int i=i; int j=j; int k=k; /* Start: Die LEDs blinken und die Gleichstrommotoren erzeugen durch Umpolung im Millisekundenbereich Töne.*/ delay(8000); for(i=0; i<8; i++) { led_set(LED_L_RD, 1); led_set(LED_R_RD, 1); for (k=0; k<1200; k++) { speed_ton=150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(80); speed_ton=-150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(80); } speed_ton=0; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); delay_ms(10); led_set(LED_L_YE, 1); led_set(LED_R_YE, 1); for(j=0; j<3000; j++) { led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); led_set(LED_L_YE, 1); led_set(LED_R_YE, 1); speed_ton=150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(6); speed_ton=-150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(6); } led_set(LED_L_YE, 0); led_set(LED_R_YE, 0); } speed_ton=0; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); 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); i=j=k=0; // Endlosschleife: while(1) { enable_interrupts(); // Sensorwerte aktualisiseren int8_t status_R = sens_getRight(); int8_t status_L = sens_getLeft(); int16_t lval = line_get(LINE_L); int16_t cval = line_get(LINE_C); int16_t rval = line_get(LINE_R); /* Bei Betätigung eines Fühlers führt der Roboter eine Kehrtwende aus, danach setzt er die Linienverfolgung wie gehabt fort. */ if((status_R || status_L) == (-1 || +1)) { odometry_reset(); /*Der Roboter fährt bis zu einem Odometriezählestand von minus sieben vom Hindernis zurück, somit besteht kein Kontakt zum Hindernis mehr und das Wendemnöver kann starten. */ while(odometry_getLeft(0)>-8) { speed_r=-350, speed_l=-350; motpwm_setLeft(speed_l); motpwm_setRight(speed_r); } delay(10); motpwm_setRight(0); motpwm_setLeft(0); /* Die LEDs blinken und die Gleichstrommotoren erzeugen durch Umpolung im Millisekundenbereich Töne. -> Wendemanöver wird angekündigt. */ for(i=0; i<8; i++) { led_set(LED_L_RD, 1); led_set(LED_R_RD, 1); for (k=0; k<600; k++) { speed_ton=150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(80); speed_ton=-150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(80); } speed_ton=0; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); delay_ms(10); led_set(LED_L_YE, 1); led_set(LED_R_YE, 1); for(j=0; j<1500; j++) { led_set(LED_L_RD, 0); led_set(LED_R_RD, 0); led_set(LED_L_YE, 1); led_set(LED_R_YE, 1); speed_ton=150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(6); speed_ton=-150; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); delay_us(6); } led_set(LED_L_YE, 0); led_set(LED_R_YE, 0); } speed_ton=0; motpwm_setRight(speed_ton); motpwm_setLeft(speed_ton); 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); i=j=k=0; odometry_reset(); delay(100); /* Wende wird ausgefürt, der Roboter dreht sich mindestens bis zu einem Odometryzählerstand von 15 bzw. ca.90°, dadurch wird vermiden, dass eine andere Linie registriert wird. Sobald die selbe Linie wieder erkannt ist, wird die Linienverfolgung fortgesetzt.*/ while(odometry_getLeft(0)<10) { speed_r=-425, speed_l=425; motpwm_setLeft(speed_l); motpwm_setRight(speed_r); } /* Der Roboter dreht sich weiter, bis er mit dem Rechten Liniensensor wieder eine schwarze Linie registriert bzw. der Wert des rechten Sensors kleiner als der des linken ist, da dieser noch die weiße Linie registriert. +80 verhindert, dass der Roboter auf Schwankungen der Sensorwerte, die z.B. durch Schatten entstehen können, reagiert.*/ while(line_get(LINE_L)<(line_get(LINE_R)+80)) { speed_r=-425, speed_l=425; motpwm_setLeft(speed_l); motpwm_setRight(speed_r); } odometry_reset(); motpwm_setLeft(0); motpwm_setRight(0); delay(50); } // Der Roboter folgt einer schwarzen Linie auf weißem Grund else { // Die Linie ist links: Der linke Sensor hat den kleinsten Wert. if ((lval<cval) || (lval<rval)) { led_set(LED_L_RD, 1); led_set(LED_R_RD, 0); // Der rechte Motor dreht schnell, der linke langsamer. speed_r=425, speed_l=50; } 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); // Der linke Motor dreht schnell, der rechte langsamer. speed_r=50, speed_l=425; } 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 drehen gleich schnell speed_r=350, speed_l=350; } // Drehzahlwerte der Motoren werden neu gestellt. motpwm_setLeft(speed_l); motpwm_setRight(speed_r); } } }
Compiler results:
Werbung
Online
albaholroyd17255
alfonzo03o76876
alicevib4869957876
andreasnew290004031
armanddelatorre8855
bettycarner7200
blythe489719956356
bvkdarrel629626
carine251934777
carollamson4653652
cassienajera030
catherinemccaffrey57
chandradillion322729
christell796644475029
claysadleir964730
clemmielcg304935418
courtneymccafferty56
dakota08q0805102416
deborabarksdale798
edisonlizotte4427
effiebailey1301319
elbawymark1984175
elberttelfer568
elisabroadus2257
ellismclane316891531
elvialavender09
emersonweir268525
felicacooper9236
feliciapawlowski
fgvilana9831165538
FloKre
floygorman01636663
fredriclongstreet4
gabrielabrownlow
giaburroughs46893
gusheinig5006813136
horacebatiste02630
ivanmoseley61999337
jamilamcgarry907281
janellegard4477
janetitg188521920
jeffryaiello27385282
jenscorbo083215402
jessica65c674555
jewelljeffers169
jorgesteiner63401957
kathlenehorst156247
kendrazeigler82
kerstinmcginnis
kristeenchaves915
latoyasorenson155
lee72827156077981
leliabaughan2211
lenardamiet3598464
leoniecamidge6807
lidamascorro550
loriniles410565581
loviematthies002
luciehateley133886
marcyfreeland9495088
margarita650153701567
margretpettey50697721
maribeleverard3
marina42362450713
Marinauvj
Marinavuc
melisacastiglia060
moshegether2103369
natashaappleton130
nellcarrol80211569607
nganbolton343216575
odettesear36035
ola03c531405628257
patricetooth96162311
rachelcrossley52
reneedillon5507
rolandokilgour324331
rongair39316288
roxiewessel0625174
seymourlerner905090
shaneldisher04604335
shantaebice4945737509
shavonnetrower2
silkemerrett05515
staciewingfield769
tabithakawamoto25799
tammarareddy0660
tiffaniscott025
torriarscott25066
warren38l1013290
warrenhinder6456
williepinkston9240
wolfgangmistry518270
zackirvin72719811111