Projekte
The Robot
Linienfolge
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
Linienfolge
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
7430 private projects
378 public projects
16178470 lines compiled
58188 builds
NIBO
@
linienfolge/main.cpp [read only]
#include <niboburger/robomain.h> // Linienfolge für schwarze Linie auf hellem Boden // mittel-grau: //#define FLOOR_VALUE 30 // hell-grau: #define FLOOR_VALUE 160 // x > FLOOR_VALUE : Boden // x < FLOOR_VALUE : Linie /* maroon SHIELD defines - BEGIN */ #define MAROON_CLEAR() "\33c" #define MAROON_BRIGHT(x) "\33b" #x #define MAROON_DIM(x) "\33d" #x #define MAROON_TXBACK(c) "\33t" c #define MAROON_LOAD() "\33l" #define MAROON_BAR(bar) "\33B" bar " " #define MAROON_GFX(gfx) "\33G" gfx " " #define MAROON_PAUSE(x) "\33P" #x " " #define MAROON_STIME(x) "\33S" #x " " #define MAROON_DTIME(x) "\33D" #x " " #define MAROON_TRANSITION(n, x) "\33T" #n #x " " #define MAROON_IMM_CLEAR() "\20c" #define MAROON_IMM_DIM(x) "\20d" #x /* maroon SHIELD defines - END */ char maroon_gfxdata[] = MAROON_LOAD() MAROON_BAR("00000000"); #define MAROON_BAR_OFFSET 4 volatile int8_t state; /* diese Funktion wird automatisch aufgerufen. Der Aufruf erfolgt immer nachdem alle analogen Kanäle einen neuen Wert gemessen haben. Da die Funktion so häufig aufgerufen wird, sollte sie möglichst kurz sein und keine Wartezeiten (delay(), etc...) oder ausgiebige Berechnungen enthalten! */ extern "C" void analog_irq_hook() { uint16_t bcl = analog_getValueExt(ANALOG_BCL,2); uint16_t bc = analog_getValueExt(ANALOG_BC,2); uint16_t bcr = analog_getValueExt(ANALOG_BCR,2); if (bc<FLOOR_VALUE) { // Linie detektiert if (bcl<bcr) state=-1; // Linie liegt links if (bcl>bcr) state=+1; // Linie liegt rechts if (bcl==bcr) state= 0; // Linie liegt mittig } else { // Linie verloren if (state==-1) state=-2; // Linie lag vorher links if (state==0) state=+2; // Linie lag vorher mittig -> Raten if (state==+1) state=+2; // Linie lag vorher rechts } switch (state) { case -2: led_setall(1,0,0,0); break; case -1: led_setall(0,1,0,0); break; case 0: led_setall(0,1,1,0); break; case +1: led_setall(0,0,1,0); break; case +2: led_setall(0,0,0,1); break; } } /* Zeichen für das maroon SHIELD, abhängig vom aktuellen Sensorwert */ char getSensorChar(int16_t val) { if (val<5) return 'a'; // 0 if (val<10) return 'b'; // 1 if (val<15) return 'c'; // 2 if (val<25) return 'd'; // 3 if (val<35) return 'e'; // 4 if (val<50) return 'f'; // 5 if (val<70) return 'g'; // 6 if (val<100) return 'h'; // 7 return 'i'; // 8 } /* 8 Bars für das maroon SHIELD zusammenbauen */ void show_sensors(uint16_t v0, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7) { maroon_gfxdata[MAROON_BAR_OFFSET+0]= getSensorChar(v0); maroon_gfxdata[MAROON_BAR_OFFSET+1]= getSensorChar(v1); maroon_gfxdata[MAROON_BAR_OFFSET+2]= getSensorChar(v2); maroon_gfxdata[MAROON_BAR_OFFSET+3]= getSensorChar(v3); maroon_gfxdata[MAROON_BAR_OFFSET+4]= getSensorChar(v4); maroon_gfxdata[MAROON_BAR_OFFSET+5]= getSensorChar(v5); maroon_gfxdata[MAROON_BAR_OFFSET+6]= getSensorChar(v6); maroon_gfxdata[MAROON_BAR_OFFSET+7]= getSensorChar(v7); usart_write(maroon_gfxdata); } /* alle aktuellen Werte auf dem maroon SHIELD ausgeben */ void updateDisplay() { if (usart_txempty()) { uint16_t bl = analog_getValueExt(ANALOG_BL,2)/2; uint16_t bc = analog_getValueExt(ANALOG_BC,2)/2; uint16_t br = analog_getValueExt(ANALOG_BR,2)/2; uint16_t bcl = analog_getValueExt(ANALOG_BCL,2); uint16_t bcr = analog_getValueExt(ANALOG_BCR,2); show_sensors(br,br,bcr,bc,bc,bcl,bl,bl); } } void setup() { led_init(); analog_init(); motpwm_init(); usart_setbaudrate(38400); usart_enable(); // für Linienfolge grüne Seitensensoren einschalten (Licht vom mittleren // Sensor (BC), Messwerte von den äußeren Sensoren (BL+BR)) analog_setExtToggleMode(ANALOG_BCL, 1); analog_setExtToggleMode(ANALOG_BCR, 1); delay(500); // auf einen Tastendruck warten... while (!key_get_char()) {} } uint8_t display_cnt = 50; uint16_t loose_cnt = 550; void loop() { char key = key_get_char(); bool pause = false; if(key == 'A'){ pause = true; } while(pause == true){ motpwm_setLeft(0); motpwm_setRight(0); key = key_get_char(); if(key == 'c'){ pause = false; } } analog_wait_update(); // nach jedem 25. Durchlauf, das Display aktualisieren if (display_cnt-- == 0) { display_cnt = 25; updateDisplay(); } int16_t left=0, right=0; // Geschwindigkeiten in Abhängigkeit vom aktuellen Linienstatus setzen switch (state) { case -2: left= 0; right=1000; break; case -1: left= 500; right=1000; loose_cnt = 550; break; // loose_cnt zurücksetzen case 0: left=1000; right=1000; loose_cnt = 550; break; // loose_cnt zurücksetzen case +1: left=1000; right= 500; loose_cnt = 550; break; // loose_cnt zurücksetzen case +2: left=1000; right= 0; break; } // Wenn die Linie verloren wurde, kurz warten und danach eine Zeit // lang den Roboter drehen, um die Linie wiederzufinden. if (loose_cnt>500) { // warten... loose_cnt--; } else if (loose_cnt) { // auf der Stelle drehen... loose_cnt--; if (state>0) {left=+800; right=-800;} if (state<0) {left=-800; right=+800;} } else { // Linie endgültig verloren :-( left = right = 0; } // Leistung der Motoren setzen: motpwm_setLeft(left); motpwm_setRight(right); }
Compiler results:
Werbung
Online
adelebeebe897815420
andreasnew290004031
angiesonnier022051
anne10s08691251131
armanddelatorre8855
blythe489719956356
bobbiedevereaux394
carmonvenable4403145
chandradillion322729
claysadleir964730
conrady95572853244563
curtcoles893294048
dan
deandnv25751532757234
dianeiek83169264258
drusillapayne578806
dustinbaldridge38
elissa90h1495041949
ellismclane316891531
elvialavender09
fgvilana9831165538
floygorman01636663
freddymunson4969971
giaburroughs46893
gildatown8829186
harleygarza753215865
harold532781508
hersheldraper36
huacorey353353214
humbertoann148070
janellegard4477
janetitg188521920
jeannachuter775627
jorgesteiner63401957
kcyrichelle8914373012
kendrazeigler82
lee72827156077981
lenoretousignant247
loriniles410565581
louella12a3029981
luciehateley133886
margaretasykes113416
margenebales8570025
margretpettey50697721
maribeleverard3
marina42362450713
maxiepalfreyman85
megleanne692975377833
palmaagosto630589
rolandokilgour324331
shaneldisher04604335
shanetill399164116566
shauntevieira9697
staciewingfield769
warrenhinder6456