Projekte
ccaero
Fühler-Entprellung
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
Fühler-Entprellung
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
@
f_hler_entprellung/main.c [read only]
#include <nibobee/iodefs.h> #include <nibobee/led.h> #include <nibobee/sens.h> //Variablen Speichern entprellten Fühler-Zustand volatile int8_t stat_l=0; //Linker Fühler volatile int8_t stat_r=0; //Rechter Fühler //Haupt-Programm int main () { //Timer0 konfiguerien TCCR0 |= (1<<WGM01) | (1<<CS02) | (1<<CS00); //Compare-Modus, Prescaler 1024 OCR0 |= 195; //Compare-Wert TIMSK |= (1<<OCIE0); //Timer0 im Compare-Modus starten led_init(); //LED's initalisiern sens_init(); //Füherl initialisieren enable_interrupts(); //Interrupts aktivieren //LED Steuerung while(1) { //Linke LED - in abhängigkeit von Status des linken Fühlers switch(stat_l) { case 0: led_set(LED_L_YE,0); led_set(LED_L_RD,0); break; case -1: led_set(LED_L_YE,1); led_set(LED_L_RD,0); break; case 1: led_set(LED_L_YE,0); led_set(LED_L_RD,1); break; } //Rechte LED - in abhängigkeit von Status des rechter Fühlers switch(stat_r) { case 0: led_set(LED_R_YE,0); led_set(LED_R_RD,0); break; case -1: led_set(LED_R_YE,1); led_set(LED_R_RD,0); break; case 1: led_set(LED_R_YE,0); led_set(LED_R_RD,1); break; } } } //Compare-Interrupt-Routine für Timer0: Zum entprellen der Fühler ISR(TIMER0_COMP_vect) { static uint8_t i=0; //Variable für Zeitverzögerung static int8_t ll=0; //Variable für letzten Status linker Fühler static uint8_t lcc=0; //Counter-Variable - zählt wie oft hintereinander linker Fühler gleichen Status hatte static int8_t rl=0; //Variable für letzten Status rechter Fühler static uint8_t rcc=0; //Counter-Variable - zählt wie oft hintereinander rechter Fühler gleichen Status hatte i=i+1; //Nachfolgende Funktionen werden nur jeden zweiten Interrupt aufgerufen if (i == 2) { //-- Linker Fühler -- //aktuellen Status prüfen - wenn aktueller Status gleich letzten Status dann Counter hochzählen //ansonsten letzter Status auf aktuellen setzen und Counter zurücksetzen if (sens_getLeft() == ll) { lcc=lcc+1; } else { ll=sens_getLeft(); lcc=0; } //Wenn Counter den Wert 3 erreicht, dann entprellten Fühlerstatus "stat_l" auf letzen Status setzen if ( lcc == 3) { stat_l=ll; } //-- Rechter Fühler -- //aktuellen Status prüfen - wenn aktueller Status gleich letzten Status dann Counter hochzählen //ansonsten letzter Status auf aktuellen setzen und Counter zurücksetzen if (sens_getRight() == rl) { rcc=rcc+1; } else { rl=sens_getRight(); rcc=0; } //Wenn Counter den Wert 3 erreicht, dann entprellten Fühlerstatus "stat_r" auf letzen Status setzen if ( rcc == 3) { stat_r=rl; } i=0; } }
Compiler results:
Werbung
Online
esperanzadarrow3
jodiluse1497889856
linneamcfall196
warrenhinder6456