RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBObee Nibobee PingPong! ich blicke garnicht mehr!!!

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7430 private projects
  • 378 public projects
  • 16178470 lines compiled
  • 58188 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: Nibobee PingPong! ich blicke garnicht mehr!!!

Nibobee PingPong! ich blicke garnicht mehr!!! 12 Jahre 8 Monate her #570

  • avapower
  • avapowers Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 5
hallo,
ich arbeite zur zeit mit den tutorial von nibobee und bin gerade bei das Programm PingPong(S.27-29)
Ich verstehe leider nicht ganz wie das Programm funktioniert(also ich weiß schon, dass die LED sich bewegen durch Fühler und so) aber ich verstehe den code nicht, trotz der erläuterung des tutorial, :(

Kann mir jemand den code besser erklären und vielleicht zu den code stück für stück ein kommentar schreiben?

Hier ist der code:
#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#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();
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) {
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;
}

danke im voraus

mfg
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibobee PingPong! ich blicke garnicht mehr!!! 12 Jahre 8 Monate her #571

  • radbruch
  • radbruchs Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 12
Hallo

Nicht perfekt, aber besser als nichts:

www.roboternetz.de/community/threads/54362-Nibobee-Ping-Pong!-WAS-ist-denn-das?p=521041&viewfull=1#post521041

Bedarf an Erklärungen und Kommentaren scheint durchaus zu bestehen:

www.roboternetz.de/community/threads/49149-Kann-mir-den-Code-jm.-erklären

Viel Spaß mit der bee.

Gruß

mic
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibobee PingPong! ich blicke garnicht mehr!!! 12 Jahre 8 Monate her #572

  • avapower
  • avapowers Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 5
hallo radbruch,
das thema, das du in roboternetz geantwortet hat, ist von mir.(vnrobot1) :)
vielen Dank für dein Bemühung, das war schon wirklich sehr toll und sehr nett von dir :)

Ich bin gerade dabei es zu studieren :)

Allerdings habe ich noch ein Frage über die Zustandautomaten:

Sind diese schon vorhanden oder wird sie erst im Programm definiert? und wenn es in programm ist, wo steht es denn? Ich meine, man muss der zustand doch irgendwie definieren, also den Namen der Zustand irgendein situation zuweisen, oder???
(bei "case STATE_IDLE:" steht leider nicht dahinter, das bringt mich einbisschen in Verwirrung ???)


mfg
Letzte Änderung: 12 Jahre 8 Monate her von avapower.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibobee PingPong! ich blicke garnicht mehr!!! 12 Jahre 8 Monate her #573

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Dem Symbol STATE_IDLE wird in der enum-Deklaration der Wert 0 zugewiesen.
enum {
  STATE_IDLE  = 0,
  STATE_PULL0 = 1,
  STATE_PULL1 = 2,
  STATE_KICK  = 3,
  STATE_PUSH  = 4
};

Später im Programm wird in der switch-Anweisung auf Grund des Wertes der Variablen state in die verschiedenen case-Zweige verzweigt...
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
Ladezeit der Seite: 0.062 Sekunden

Werbung