Projekte
nibobee
C Tutorial 11
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
C Tutorial 11
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
7467 private projects
385 public projects
16432895 lines compiled
58475 builds
NIBO
@
c_tutorial_11/main.c [read only]
/* Ping Pong */ #include <nibobee/iodefs.h> /* muss immer als erste Datei eingebunden werden */ #include <nibobee/led.h> /* Funktionen fuer die LEDs */ #include <nibobee/sens.h> #include <nibobee/delay.h> enum { STATE_IDLE = 0, STATE_PULL0 = 1, STATE_PULL1 = 2, STATE_KICK = 3, STATE_PUSH = 4 }; uint8_t calculate_state(uint8_t state, int8_t sensor) { switch (state) { case STATE_PUSH: case STATE_IDLE: if (sensor==-1) { return STATE_PULL0; } else if (sensor==+1) { return STATE_PUSH; } return STATE_IDLE; case STATE_PULL0: if (sensor==-1) { return STATE_PULL1; } else if (sensor==+1) { return STATE_PUSH; } return STATE_IDLE; case STATE_PULL1: if (sensor==-1) { return STATE_PULL1; } return STATE_KICK; case STATE_KICK: return STATE_IDLE; } return state; } int main() { led_init(); // IO-Ports der LEDs als Ausgänge // konfigurieren sens_init(); uint8_t ball_pos = 3; int8_t direction = -1; uint8_t state_l = STATE_IDLE; uint8_t state_r = STATE_IDLE; while(1==1) { // Endlosschleife (1==1 ist immer wahr!) delay(100); state_l = calculate_state(state_l, sens_getLeft()); if ( ((state_l==STATE_PUSH) && (ball_pos==1)) || ((state_l==STATE_KICK) && (ball_pos==0)) ) { direction = +1; } state_r = calculate_state(state_r, sens_getRight()); if ( ((state_r==STATE_PUSH) && (ball_pos==2)) || ((state_r==STATE_KICK) && (ball_pos==3)) ) { direction = -1; } if (direction==+1) { if (ball_pos<3) { ball_pos++; } else { direction=0; } } if (direction==-1) { if (ball_pos>0) { ball_pos--; } else { direction=0; } } led_set(LED_L_YE, ball_pos==0); led_set(LED_L_RD, ball_pos==1); led_set(LED_R_RD, ball_pos==2); led_set(LED_R_YE, ball_pos==3); } return 0; }
Compiler results:
Werbung
Online
gregoriomeekin487
twilatarr8929036