From 8f486613be58ced269db1d437e560c16558604e8 Mon Sep 17 00:00:00 2001 From: becquet Date: Thu, 10 May 2007 18:49:20 +0000 Subject: Création de chuck, le programme du robot 2007. --- i/chuck/src/es/es.hh | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 i/chuck/src/es/es.hh (limited to 'i/chuck/src/es/es.hh') diff --git a/i/chuck/src/es/es.hh b/i/chuck/src/es/es.hh new file mode 100644 index 0000000..0a53ff3 --- /dev/null +++ b/i/chuck/src/es/es.hh @@ -0,0 +1,207 @@ +#ifndef es_hh +#define es_hh +// es.hh +// robert - programme du robot 2005 {{{ +// +// Copyright (C) 2005 Nicolas Haller +// +// Robot APB Team/Efrei 2005. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +#include "proto/proto.hh" + +#include +#include + +class Config; + +/// Gère la carte es et ses capteurs et actionneurs +class Es : public Proto::Receiver +{ + public: + enum etatBarillet{empty,white,black}; + enum posBar{avant0 = 0x00, arriere2 = 0x04, avant4 = 0x08, arriere1 = + 0x0C, avant3 = 0x10, arriere0 = 0x14, avant2 = 0x18, arriere4 = 0x1C, + avant1 = 0x20, arriere3 = 0x24}; + typedef std::vector Sharps; + + private: + // Objet Proto de communication vers la carte es + Proto proto_; + // le tty est ... + std::string tty_; + /// Système de log + Log log_; + /// For LCD communication + char lcd_mess_char_[16]; + /// Key pressed by the LCD Keyboard + int lcdKeyPressed_, lcdKeyStat_; + /// Frontal choc ! + bool front_sensor_; + /// Ack frequency + int ackFreq_; + /// Main stat frequency + int mainStat_; + /// Config of RVB sensors + int rvbSensorFalseIC_, rvbSensorMaxOv_; + /// Config of RVB sniff + int rvbSniffRefRatio_, rvbSniffGreenLimit_, rvbSniffClearLimit_; + /// RVB Sensors raw stats + int rvbSensorMaskStat_, rvbSensorStat_; + /// RVB Sniff stats + int rvbSniffMaskStat_, rvbSniffStat_; + /// RVB Sensors raw stats + int rvbBallStat_; + /// Sharps + Sharps sharps_; + /// Others module, jack & colour + bool jackIn_, colorModeBlue_; + int othersStat_; + /// Stat of front sensors + int rvbSniffFrontStat_; + int thresholdFrontSensors_, thresholdBallSensors_, thresholdHoleSensors_; + /// Stock du barillet + etatBarillet stockBarillet[5]; + /// Position du barillet + posBar positionBarillet_; + /// System for analyse a ball + int seenColors_[5], lastSeenColors_[5], comptSeenColors_[5]; + /// Si la turbine avant est allumé + bool frontTurbineIsFull_; + + public: + // Some fucking defines ! + const int unknownColor_, redColor_, blueColor_, greenColor_, whiteColor_, + blackColor_; + const int leftFrontRVB_, rightFrontRVB_, holeRVB_, frontBallRVB_, + rearBallRVB_; + /// Constructeur + Es (const Config & config); + /// On attend ... + bool wait (int timeout = -1); + /// Récupère le File Descriptor + int getFd (void); + /// définition du receiver::receive + void receive (char command, const Proto::Frame & frame); + /// sync.. + bool sync (void); + /// Charge les paramètre du fichier de config + void loadConfig (const Config & config); + + /// Initialise les capteurs et actionneurs, reset + void reset (void); + /// Stat for the main () + void setMainStat (int freq); + /// Shut up ! + void shutUp (void); + /// Set frequency of ack + void setAckStat (int freq); + /// Get the state of the jack + bool isJackOut (void); + /// Get the color mode of the button + bool isColorModeBlue (void); + + /// Envoie de la config des sensors RVB + void setRVBSensorsConfig(int false_ic, int max_ov); + /// Envoie de la config des sniff RVB + void setRVBSniffConfig(int ref_ratio, int green_limit, int clear_limit); + /// Règle les stats des sensors RVB + void setRVBSensorsStat(int mask_captor, int freq); + /// règle la couleur actuelle comme référente + void refColor(int mask_captor, int mode = 0); + /// Règle les stats d'affichage de la couleur + void setRVBSniffStat (int mask_captor, int freq); + /// Configure statistic for the sensor of the ball + void setRVBBallStat (int freq); + /// Set frequency of front sensor in analyse mode + void setRVBSniffFrontStat (int freq); + /// Enable all the sensors or just the 4 and 1 near the ground + void enableAllSensors (bool enable); + // + void setRVBHoleStat (int freq); + + /// Set frequency of jack, selectoul printed out function + /// Use this function with frequency 0 to disable this stat. + void setOthersStat (int freq); + + /// Discute avec les servo... + void setServoPos (int servo_mask, int servoPos); + + /// Set update frequency of sharps + void setSharpUpdate (int sharp_mask, int freq); + /// Set statistics frequency of sharps + void setSharpStat (int sharp_mask, int freq); + /// Set configuration of threshold sharps + void setSharpThreshold (int sharp_num, int threshold_high, + int threshold_low); + + /// Print something on the LCD (max 32 char) + void lcdPrint (const std::string &message); + /// Get the current pressed keys of the LCD + void lcdGetKey (int freq); + + /// Règle la vitesse des turbines + void setTurbineSpeed (int turbNb, int speed); + /// Règle le sens de rotation du barillet + void setTheMeaningOfRotationOfBarillet (int answer); + /// Init the barillet and put it at the right place + void barilletInit (void); + /// Init turbine to minimal speed + void barilletDebutLancement (void); + /// Init front turbine to full speed + void barilletLancement (void); + /// Put barillet in sleep mode + void barilletSleep (void); + /// Dépose une balle du barillet + void deposeBalle(void); + /// Dépose une balle blanche + bool dropWhiteBall(void); + /// Dépose une balle noire + bool dropBlackBall(void); + /// Place un trou vide à l'avant + bool setEmptyHoleFront(void); + /// Extrait une balle + void extraitBalle(void); + /// Rotation du barillet + void rotationBarillet(int posFinal); + /// Empty everything in the barillet + void barilletEmpty (void); + /// Say if barillet is full + bool barilletIsFull(void); + /// What color do you see my lord ? + int colorSeen (int sensor_num); + /// Totems activator + void totemActivator (bool out); + /// Front sensor + bool frontSensor (void) { return front_sensor_; } + /// Clear sensor + void clearFrontSensor (void) { front_sensor_ = false; } + + private: + /// Decode a color into a string + std::string decodeColor (int color); + /// Analyse une balle arrivant par devant + void newBallFront (void); + /// Analyse une balle arrivant par derrière + void newBallRear (void); + /// Update system for one sensor + void updateAnalysisSensor (int value, int index, int threshold); +}; +#endif // es_hh -- cgit v1.2.3