Projekte
workwind
NIBObee BKit2 Demo
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 BKit2 Demo
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
7416 private projects
378 public projects
16172649 lines compiled
58122 builds
NIBO
@
nibobee_bkit2_demo/main.c [read only]
/* NIBObee BKit 2 Demo */ #include <nibobee/iodefs.h> #include <nibobee/analog.h> #include <nibobee/led.h> #include <nibobee/delay.h> #include <nibobee/clock.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define AREF_VCC (_BV(REFS0) | _BV(REFS1)) // analogen Eingang messen // mux ist Kanalnummer und die Refernzspannung uint16_t analog_measure(uint8_t mux) { ADMUX = mux; ADCSRA = _BV(ADPS2) // prescale faktor = 128 ADC laeuft | _BV(ADPS1) // mit 15 MHz / 128 = 120 kHz | _BV(ADPS0) | _BV(ADEN) // ADC an | _BV(ADSC); // Beginne mit der Konvertierung while (ADCSRA & _BV(ADSC)) { // Konvertierung laeuft } uint16_t result = ADC; return result; } #define LED_GREEN 0x01 #define LED_RED 0x02 // LEDs leuchten lassen: // 0: aus // 1: gruen // 2: rot void showState(uint8_t state) { PORTD &= (uint8_t)~0x03; switch (state) { case 0: PORTD |= 0x00; break; case 1: PORTD |= LED_GREEN; break; case 2: PORTD |= LED_RED; break; } } #define T1 0x01 #define T2 0x04 #define T3 0x08 #define T4 0x02 #define IR_OFF 0x00 #define IR_A 0x04 #define IR_B 0x08 // Transistor auswählen / Spalte selektieren (T1-T4) void setupTransistor(uint8_t val) { PORTC |= (T1|T2|T3|T4); // alle aus PORTC &= ~val; } // IR-LED auswählen / Zeile selektieren (untere: IR_B, obere: IR_A, keine: IR_OFF) void setupIR(uint8_t val) { PORTA |= (IR_A | IR_B); PORTA &= ~val; } // IR-Reflexion messen // i im Uhrzeigersinn: 0 (links hinten) bis 7 (rechts hinten) uint16_t measure(uint8_t i) { setupIR(IR_OFF); // IR-LEDs ausschalten PORTA &= ~0x03; // Phototransitoren aktivieren switch (i) { case 0: setupTransistor(T1); break; case 1: setupTransistor(T1); break; case 2: setupTransistor(T2); break; case 3: setupTransistor(T2); break; case 4: setupTransistor(T3); break; case 5: setupTransistor(T3); break; case 6: setupTransistor(T4); break; case 7: setupTransistor(T4); break; } int16_t val = 0; switch (i) { case 1: case 3: case 4: case 6: setupIR(IR_B); _delay_ms(1); val = analog_measure(0 | AREF_VCC); setupIR(IR_OFF); _delay_ms(1); val -= analog_measure(0 | AREF_VCC); break; case 0: case 2: case 5: case 7: setupIR(IR_A); _delay_ms(1); val = analog_measure(1 | AREF_VCC); setupIR(IR_OFF); _delay_ms(1); val -= analog_measure(1 | AREF_VCC); break; } if (val<0) { val=0; } return val; } int main() { // Port-Pins als Ausgaenge konfigurieren DDRD |= (LED_GREEN|LED_RED); DDRA |= (IR_A|IR_B); DDRC |= (T1|T2|T3|T4); // Standard-LEDs auch als Ausgaenge konfigurieren activate_output_group(IO_LEDS); // Hauptschleife: while(1) { uint8_t clear=1; sei(); for (uint8_t i=0; i<8; ++i) { uint16_t value = measure(i); if (value>8) { // Reflexion > 8 clear = 0; showState(1); } else { if (!clear) { showState(0); } } _delay_ms(38); } if (clear) { // alle Richtungen frei showState(2); } else { showState(0); } } return 0; }
Compiler results:
Werbung
Online
anniestarr166704752
beauglenn0232307
brandi20b03191419
dustinbaldridge38
emorybritt4046620039
franziskadunlop18986
jeffryaiello27385282
reneedillon5507
rongair39316288
willygoldie91317