From 78c6eb9bba686db209f9eb0886b5f3b2c0af3a33 Mon Sep 17 00:00:00 2001 From: schodet Date: Wed, 10 Sep 2003 20:18:46 +0000 Subject: Apres 2003 --- 2003/i/buzz/src/ia/Makefile.defs | 8 + 2003/i/buzz/src/ia/ia.cc | 72 ++++++++ 2003/i/buzz/src/ia/ia.h | 55 +++++++ 2003/i/buzz/src/logger/logger.cc | 24 +++ 2003/i/buzz/src/logger/logger.h | 45 +++++ 2003/i/buzz/src/motor/Makefile.defs | 2 +- 2003/i/buzz/src/motor/motor.cc | 300 ++++++++++++++++++++++++++++++++-- 2003/i/buzz/src/motor/motor.h | 60 ++++++- 2003/i/buzz/src/motor/test_motor.cc | 59 ++++++- 2003/i/buzz/src/qia/Makefile.defs | 4 + 2003/i/buzz/src/qia/qbuzz.cc | 16 ++ 2003/i/buzz/src/qia/qia.cc | 146 +++++++++++++++++ 2003/i/buzz/src/qia/qia.h | 34 ++++ 2003/i/buzz/src/serial/test_serial.cc | 2 +- 14 files changed, 798 insertions(+), 29 deletions(-) create mode 100644 2003/i/buzz/src/ia/Makefile.defs create mode 100644 2003/i/buzz/src/ia/ia.cc create mode 100644 2003/i/buzz/src/ia/ia.h create mode 100644 2003/i/buzz/src/logger/logger.cc create mode 100644 2003/i/buzz/src/logger/logger.h create mode 100644 2003/i/buzz/src/qia/Makefile.defs create mode 100644 2003/i/buzz/src/qia/qbuzz.cc create mode 100644 2003/i/buzz/src/qia/qia.cc create mode 100644 2003/i/buzz/src/qia/qia.h (limited to '2003') diff --git a/2003/i/buzz/src/ia/Makefile.defs b/2003/i/buzz/src/ia/Makefile.defs new file mode 100644 index 0000000..19ac605 --- /dev/null +++ b/2003/i/buzz/src/ia/Makefile.defs @@ -0,0 +1,8 @@ +LIBS += ia.a +TARGETS += buzz +ia_a_SOURCES = ia.cc +buzz_SOURCES = buzz.cc ia.a motor.a automate.a busp.a erreur.a config.a + +buzz: $(buzz_SOURCES:%.cc=%.o) + +ia.a: ${ia_a_SOURCES:%.cc=ia.a(%.o)} diff --git a/2003/i/buzz/src/ia/ia.cc b/2003/i/buzz/src/ia/ia.cc new file mode 100644 index 0000000..14f47a2 --- /dev/null +++ b/2003/i/buzz/src/ia/ia.cc @@ -0,0 +1,72 @@ +// ia.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "ia.h" + +// Instance unique. +Ia *Ia::m_instance = 0; + +// Constructeur. +Ia (const char *strat) +{ + // Instancie les objets du robot. + m_thresholds = new Thresholds ("rc/vision/palets.rgb"); + m_camera = new Camera (); + m_image = new Image (c, t); + m_grafcet = new Grafcet (strat); + // Init. + m_instance = this; + m_paletFound = false; + for (int i = 0; i < 8; ++i) + { + m_var[i] = 0; + m_tempo[i] = 0; + } +} + +// Destructeur. +~Ia (void) +{ + m_instance = 0; + delete m_grafcet; + delete m_image; + delete m_camera; + delete m_thresholds; +} + +// Cherche un palet. +bool +Ia::seekPalet (void) +{ + i->reread (); +} + +// Va vers le palet précédement trouvé. +void +Ia::goPalet (void) +{ +} + +// Variable de l'ia. +int getVar (int var) +{ + return m_var[var]; +} + +void setVar (int var, int val) +{ + m_var[var] = val; +} + +// Tempos de l'ia. +void resetTempo (int tempo) +{ + m_tempo[tempo] = m_date.start (); +} + +int getTempo (int tempo) +{ + return m_date.start () - m_tempo[tempo]; +} + diff --git a/2003/i/buzz/src/ia/ia.h b/2003/i/buzz/src/ia/ia.h new file mode 100644 index 0000000..5ca9092 --- /dev/null +++ b/2003/i/buzz/src/ia/ia.h @@ -0,0 +1,55 @@ +#ifndef ia_h +#define ia_h +// ia.h +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +#include "date/date.h" +#include "automate/grafcet.h" +#include "busp/busp.h" +#include "camera/camera.h" +#include "date/date.h" +#include "motor/motor.h" +#include "vision/image.h" +#include "vision/thresholds.h" + +class Ia +{ + // Objets du robot. + Date m_date; + Busp m_busp; + Motor m_motor; + Image *m_image; + Thresholds *m_thresholds; + Camera *m_camera; + Grafcet *m_grafcet; + // Logique de recherche de palet. + bool m_paletFound; + double m_paletAngle, m_paletDistance; + // Instance unique. + static Ia *m_instance; + // Variables de l'ia. + int m_var[8]; + // Tempos de l'ia. + int m_tempo[8]; + public: + // Constructeur. + Ia (const char *strat); + // Destructeur. + ~Ia (void); + // Renvoie une référence vers l'instance unique. + Ia &getInstance (void) { return *m_instance; } + // Cherche un palet. + bool seekPalet (void); + // A-t-on trouvé un palet. + bool paletFound (void) { return m_paletFound; } + // Va vers le palet précédement trouvé. + void goPalet (void); + // Variable de l'ia. + int getVar (int var); + void setVar (int var, int val); + // Tempos de l'ia. + void resetTempo (int tempo); + int getTempo (int tempo); +}; + +#endif // ia_h diff --git a/2003/i/buzz/src/logger/logger.cc b/2003/i/buzz/src/logger/logger.cc new file mode 100644 index 0000000..56bca37 --- /dev/null +++ b/2003/i/buzz/src/logger/logger.cc @@ -0,0 +1,24 @@ +// logger.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "logger.h" + +// Pointeur vers l'instance unique. +Logger *Logger::m_instance = 0; + +// Constructeur. +Logger::Logger (const iostream *s) +{ + // Pointeur d'instance. + m_instance = this; + // Stream. + m_s = s; +} + +// Destructeur. +Logger::~Logger (void) +{ + m_instance = 0; +} + diff --git a/2003/i/buzz/src/logger/logger.h b/2003/i/buzz/src/logger/logger.h new file mode 100644 index 0000000..599ba61 --- /dev/null +++ b/2003/i/buzz/src/logger/logger.h @@ -0,0 +1,45 @@ +#ifndef logger_h +#define logger_h +// logger.h +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet + +class iostream; + +class Logger +{ + public: + enum LogType { + logAutomate, + logBusp, + logBuspActionneurs, + logBuspCapteurs, + logBuspGPS, + logBuspIr, + logBuspServo, + logMotor, + logVision, + logMax + }; + private: + static Logger *m_instance; + bool m_enable[logMax]; + iostream *m_s; + public: + // Constructeur. + Logger (iostream *s); + // Destructeur. + ~Logger (void); + // Retourne une référence vers l'instance unique. + static Logger &getInstance (void) { return m_instance; } +}; + +class LoggerB +{ + public: + // Constructeur. + LoggerB (iostream *s); + // Destructeur. +}; + +#endif // logger_h diff --git a/2003/i/buzz/src/motor/Makefile.defs b/2003/i/buzz/src/motor/Makefile.defs index 27a3470..fa3c82b 100644 --- a/2003/i/buzz/src/motor/Makefile.defs +++ b/2003/i/buzz/src/motor/Makefile.defs @@ -1,6 +1,6 @@ TARGETS += test_motor LIBS += motor.a -test_motor_SOURCES = test_motor.cc motor.a serial.a erreur.a config.a +test_motor_SOURCES = test_motor.cc motor.a serial.a erreur.a config.a date.a motor_a_SOURCES = motor.cc test_motor: $(test_motor_SOURCES:%.cc=%.o) diff --git a/2003/i/buzz/src/motor/motor.cc b/2003/i/buzz/src/motor/motor.cc index 93d36b2..00880bb 100644 --- a/2003/i/buzz/src/motor/motor.cc +++ b/2003/i/buzz/src/motor/motor.cc @@ -4,71 +4,220 @@ // #include "motor.h" #include "config/config.h" +#include "date/date.h" #include #define MOTOR_DEV "/dev/tty00" +#define MOTOR_DEBUG + +// Pointeur vers l'instance unique. +Motor *Motor::m_instance = 0; + // Constructeur. Motor::Motor (void) : m_serial (MOTOR_DEV) { m_recv_n = 0; - running = false; + m_running = false; + m_capteursFetch = false; + m_capteurs = 1; + m_last_com = 'Z'; + m_last_a1 = m_last_a2 = m_last_a3 = -1; // Paramètres par defaut. m_speed = m_accel = m_raccel = m_rspeed = 10; + m_ed2 = 190; + m_x = 0.0; + m_y = 0.0; + m_dir = 90.0; + m_factor = m_rfactor = 1.0; // Lit la conf. Config rc ("rc/motor"); while (!rc.eof ()) { - if (rc.isId ("accel")) + if (rc.isId ("go")) { rc.getId (); - rc >> m_accel; + rc >> m_inf_speed; + rc >> m_inf_accel; + } + else if (rc.isId ("turnangle")) + { + rc.getId (); + rc >> m_rspeed; + rc >> m_raccel; } - else if (rc.isId ("speed")) + else if (rc.isId ("godistance")) { rc.getId (); rc >> m_speed; + rc >> m_accel; } - else if (rc.isId ("raccel")) + else if (rc.isId ("turn")) { rc.getId (); - rc >> m_raccel; + rc >> m_inf_rspeed; + rc >> m_inf_raccel; } - else if (rc.isId ("rspeed")) + else if (rc.isId ("entraxe")) { rc.getId (); - rc >> m_rspeed; + rc >> m_ed2; + m_ed2 /= 2; + } + else if (rc.isId ("xorig")) + { + rc.getId (); + rc >> m_x; + } + else if (rc.isId ("yorig")) + { + rc.getId (); + rc >> m_y; + } + else if (rc.isId ("dirorig")) + { + rc.getId (); + rc >> m_dir; + } + else if (rc.isId ("factors")) + { + rc.getId (); + rc >> m_factor >> m_rfactor; } else rc.noId (); } + // Mémorise le pointeur d'instance. + m_instance = this; } // Destructeur. Motor::~Motor (void) { + stop (); + m_instance = 0; +} + +// Change la position courante. +void +Motor::setPos (double x, double y) +{ + m_x = x; m_y = y; +} + +// Change la position courante. +void +Motor::setPos (double x, double y, double dir) +{ + m_x = x; m_y = y; m_dir = dir; +} + +// Récupère la position courante. +void +Motor::getPos (double &x, double &y, double &dir) +{ + x = m_x; y = m_y; dir = m_dir; } // Avance d'une distance d, à la vitesse s. void Motor::goDistance (int d, int s) { + d = (int) ((double) d * m_factor); if (d > 0) - send ('F', d, s == -1 ? m_speed : s, m_accel); + send ('F', d, m_accel, s == -1 ? m_speed : s); else - send ('R', -d, s == -1 ? m_speed : s, m_accel); - running = true; + send ('R', -d, m_accel, s == -1 ? m_speed : s); + m_running = true; } // Tourne d'un angle d, à la vitesse s. void Motor::turnAngle (int d, int s) { + d = (int) ((double) d * m_rfactor); if (d > 0) - send ('G', d, s == -1 ? m_speed : s, m_accel); + send ('G', d, m_raccel, s == -1 ? m_rspeed : s); else - send ('D', -d, s == -1 ? m_speed : s, m_accel); - running = true; + send ('D', -d, m_raccel, s == -1 ? m_rspeed : s); + m_running = true; +} + +// Avance indéfiniment à la vitesse s. +void +Motor::go (int s) +{ + if (s == 0) + send ('f', m_inf_accel, m_inf_speed); + else if (s > 0) + send ('f', m_inf_accel, s); + else + send ('r', m_inf_accel, -s); + m_running = true; +} + +// Avance indéfiniment à la vitesse sg et sd, respectivement pour le +// moteur gauche et droit. +void +Motor::go (int sg, int sd) +{ + // TODO. +} + +// Tourne indéfiniment à la vitesse s. +void +Motor::turn (int s) +{ + if (s == 0) + send ('g', m_inf_raccel, m_inf_rspeed); + else if (s > 0) + send ('g', m_inf_raccel, s); + else + send ('d', m_inf_raccel, -s); + m_running = true; +} + +// Avance indéfiniment en tournant à la vitesse max s, de rayon r. +void +Motor::goTurn (int s, int r) +{ + int s2; + if (r == 0) + go (s); + else + { + s2 = s * (r - m_ed2) / (r + m_ed2); + if (r < 0) + go (s2, s); + else + go (s, s2); + } +} + +// Stoppe. +void +Motor::stop (void) +{ + send ('s'); + m_running = true; +} + +// Stop progressif. +void +Motor::stopp (void) +{ + send ('S'); + m_running = true; +} + +// Reset. +void +Motor::reset (void) +{ + send ('Z'); + m_running = true; + //for (int i = 0; i < 40; ++i) + // send ('+'); } // Traite les message entrants. @@ -83,7 +232,28 @@ Motor::readMsg (void) switch (m_recv_buf[1]) { case 'Y': - running = false; + m_running = false; + break; + case '?': + if (m_running || m_capteursFetch || !m_servoFinnish) + send (m_last_com, m_last_a1, m_last_a2, m_last_a3); + break; + case 'h': + m_capteurs = m_recv_buf[2]; + m_capteursFetch = false; + break; + case 'q': + m_doneG = m_recv_buf[2] << 24 | + m_recv_buf[3] << 16 | + m_recv_buf[4] << 8 | + m_recv_buf[5]; + m_doneD = m_recv_buf[6] << 24 | + m_recv_buf[7] << 16 | + m_recv_buf[8] << 8 | + m_recv_buf[9]; + break; + case 'H': + m_servoFinnish = true; break; } } @@ -91,6 +261,12 @@ Motor::readMsg (void) } } +// Traite l'information de bouclage. +void +Motor::readTicks (int g, int d) +{ +} + // Envoie une commande. void Motor::send (char com, int a1, int a2, int a3) @@ -98,6 +274,10 @@ Motor::send (char com, int a1, int a2, int a3) char data[32]; int n = 0; int be, le; + m_last_com = com; + m_last_a1 = a1; + m_last_a2 = a2; + m_last_a3 = a3; data[n++] = '<'; data[n++] = com; if (a1 != -1) @@ -146,10 +326,98 @@ Motor::recv (void) if (c == '>') { m_recv_buf[m_recv_n] = '\0'; - cout << "motor " << m_recv_buf << endl; +#ifdef MOTOR_DEBUG + if (m_recv_buf[1] != 'h') + cout << "motor " << m_recv_buf << endl; +#endif // MOTOR_DEBUG return true; } } return false; } +// Demande les infos capteurs. +void +Motor::fetchCapteurs (void) +{ + send ('h'); + m_capteursFetch = true; +} + +// Attend le top départ. +void +Motor::waitRound (void) +{ + while (!(getCapteurs () & 8)) + { + Date::wait (50); + } +} + +// Récupère la distance parcouru. +int +Motor::getDone (void) +{ + m_doneG = 0; + while (m_doneG == 0) + { + send ('q'); + for (int i = 0; i < 10 && m_doneG == 0; ++i) + { + readMsg (); + Date::wait (50); + } + } + return ((m_doneG - m_doneGs) + (m_doneD - m_doneDs) / 2); +} + +// Mémorise la distance parcourue pour le moment. +void +Motor::setDone (void) +{ + m_doneG = 0; + while (m_doneG == 0) + { + send ('q'); + for (int i = 0; i < 10 && m_doneG == 0; ++i) + { + readMsg (); + Date::wait (50); + } + } + m_doneDs = m_doneD; + m_doneGs = m_doneG; +} + +// Gère les servos. +void +Motor::setServo (int s) +{ + m_servoFinnish = false; + while (!m_servoFinnish) + { + send ('H', s); + for (int i = 0; i < 10 && !m_servoFinnish; ++i) + { + readMsg (); + Date::wait (50); + } + } +} + +// Retourne les infos capteurs. +int +Motor::getCapteurs (void) +{ + m_capteursFetch = true; + while (m_capteursFetch) + { + send ('h'); + for (int i = 0; i < 10 && m_capteursFetch; ++i) + { + readMsg (); + Date::wait (50); + } + } + return m_capteurs; +} diff --git a/2003/i/buzz/src/motor/motor.h b/2003/i/buzz/src/motor/motor.h index 330ce88..a51b140 100644 --- a/2003/i/buzz/src/motor/motor.h +++ b/2003/i/buzz/src/motor/motor.h @@ -15,21 +15,77 @@ class Motor // Paramètre vitesse/acceleration. int m_accel, m_speed; int m_raccel, m_rspeed; + int m_inf_accel, m_inf_speed; + int m_inf_raccel, m_inf_rspeed; + // Paramètres géométriques. + int m_ed2; + double m_factor, m_rfactor; // Operations en cours. - bool running; + bool m_running; + char m_last_com; + int m_last_a1, m_last_a2, m_last_a3; + // Calcul de position. + double m_x, m_y, m_dir; + // Capteurs. + char m_capteurs; + bool m_capteursFetch; + // Servo. + bool m_servoFinnish; + // Distance effectuée. + int m_doneG, m_doneD; + int m_doneGs, m_doneDs; + // Instance unique. + static Motor *m_instance; public: // Constructeur. Motor (void); // Destructeur. ~Motor (void); + // Change la position courante. + void setPos (double x, double y); + // Change la position courante. + void setPos (double x, double y, double dir); + // Récupère la position courante. TODO: valider avec une date. + void getPos (double &x, double &y, double &dir); + // Retourne une référence vers l'instance unique. + static Motor &getInstance (void) { return *m_instance; } // Avance d'une distance d, à la vitesse s. void goDistance (int d, int s = -1); // Tourne d'un angle d, à la vitesse s. void turnAngle (int d, int s = -1); + // Avance indéfiniment à la vitesse s. + void go (int s = 0); + // Avance indéfiniment à la vitesse sg et sd, respectivement pour le + // moteur gauche et droit. + void go (int sg, int sd); + // Tourne indéfiniment à la vitesse s. + void turn (int s = 0); + // Avance indéfiniment en tournant à la vitesse max s, de rayon r. + void goTurn (int s, int r); + // Stoppe. + void stop (void); + // Stop progressif. + void stopp (void); + // Reset. + void reset (void); // Retourne true si la commande est terminée. - bool finnish (void) { readMsg (); return !running; } + bool finnish (void) { readMsg (); return !m_running; } // Traite les message entrants. void readMsg (void); + // Traite l'information de bouclage. + void readTicks (int g, int d); + // Demande les infos capteurs. + void fetchCapteurs (void); + // Retourne les infos capteurs. + int getCapteurs (void); + // Gère les servos. + void setServo (int s); + // Attend le top départ. + void waitRound (void); + // Récupère la distance parcouru. + int getDone (void); + // Mémorise la distance parcourue pour le moment. + void setDone (void); private: // Envoie une commande. void send (char com, int a1 = -1, int a2 = -1, int a3 = -1); diff --git a/2003/i/buzz/src/motor/test_motor.cc b/2003/i/buzz/src/motor/test_motor.cc index 636d743..b9e5066 100644 --- a/2003/i/buzz/src/motor/test_motor.cc +++ b/2003/i/buzz/src/motor/test_motor.cc @@ -4,24 +4,65 @@ // #include "motor.h" #include "erreur/erreur.h" +#include "date/date.h" #include #include +#include int -main (void) +main (int argc, char **argv) { + cout << "hello" << endl; try { Motor m; - m.goDistance (2000); - while (!m.finnish ()) sleep (1); - m.turnAngle (180); - while (!m.finnish ()) sleep (1); - m.goDistance (2000); - while (!m.finnish ()) sleep (1); - m.turnAngle (-180); - while (!m.finnish ()) sleep (1); + cout << "world" << endl; + int i = 1; + int c; + while (i < argc) + { + switch (argv[i][0]) + { + case 'j': + cout << "jack" << endl; + i++; + m.waitRound (); + break; + case 'h': + i++; + cout << "capteurs "; + c = m.getCapteurs (); + for (int j = 1; j < 0x100; j <<= 1) + { + cout << (c & j ? '#' : '_') << ' '; + } + cout << endl; + break; + case 't': + cout << "turn" << endl; + i++; + if (i >= argc) return 1; + m.turnAngle (atoi (argv[i++])); + break; + case 'z': + cout << "rezet" << endl; + i++; + m.reset (); + break; + case 'H': + i++; + if (i >= argc) return 1; + cout << "servo " << atoi (argv[i]); + m.setServo (atoi (argv[i++])); + break; + default: + cout << "go" << endl; + m.goDistance (atoi (argv[i++])); + break; + } + while (!m.finnish ()) Date::wait (50); + } return 0; } catch (Erreur &e) diff --git a/2003/i/buzz/src/qia/Makefile.defs b/2003/i/buzz/src/qia/Makefile.defs new file mode 100644 index 0000000..df06f6a --- /dev/null +++ b/2003/i/buzz/src/qia/Makefile.defs @@ -0,0 +1,4 @@ +TARGETS += qbuzz +qbuzz_SOURCES = qbuzz.cc qia.cc motor.a serial.a erreur.a config.a date.a + +qbuzz: $(qbuzz_SOURCES:%.cc=%.o) diff --git a/2003/i/buzz/src/qia/qbuzz.cc b/2003/i/buzz/src/qia/qbuzz.cc new file mode 100644 index 0000000..e0e4fe6 --- /dev/null +++ b/2003/i/buzz/src/qia/qbuzz.cc @@ -0,0 +1,16 @@ +// qbuzz.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +#include "motor/motor.h" +#include "busp/busp.h" +#include "qia.h" + + +int +main (int argc, char **argv) +{ + bool vert = argc >= 2 && argv[1][0] == 'v'; + + QIa qia (vert); + qia.go (); +} diff --git a/2003/i/buzz/src/qia/qia.cc b/2003/i/buzz/src/qia/qia.cc new file mode 100644 index 0000000..79eba39 --- /dev/null +++ b/2003/i/buzz/src/qia/qia.cc @@ -0,0 +1,146 @@ +// qia.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "qia.h" +#include "config/config.h" + +// Constructeur. +QIa::QIa (bool vert) +{ + Config rc ("rc/qia"); + m_pathSize = 0; + while (!rc.eof ()) + { + if (rc.isId ("path")) + { + rc.getId (); + while (!rc.eof ()) + { + m_path.push_back (rc.getNum ()); + m_pathSize++; + } + } + else rc.noId (); + } + // Initialisation. + m_pathNext = 0; + m_vert = vert; +} + +// Lance l'automate. +void +QIa::go (void) +{ + // Reset les cartes. + m_motor.reset (); + // Positionne les servos. + m_motor.setServo (1); + m_motor.setServo (8); + // Attend le jack. + m_motor.waitRound (); + // Démare le chrono. + m_date.startRound (); + // Lit le chemin. + int d; + while (m_pathNext < m_pathSize) + { + d = m_path[m_pathNext++]; + if (!d) + // Virages. + turn (); + else + // Sections droites. + ahead (d); + } + // Stop, on bouge plus. + while (1) Date::wait (999); +} + +// Tourne. +void +QIa::turn (void) +{ + int a = m_path[m_pathNext++]; + m_motor.turnAngle (a); + while (!m_motor.finnish ()) Date::wait (50); +} + +// Tout droit. +void +QIa::ahead (int d) +{ + while (!m_motor.finnish ()) + { + // Fait avancer le moteur. + m_motor.goDistance (d); + // Mémorise la distance parcourue. + //m_motor.setDone (); + // Tant que ça roule. + while (!m_motor.finnish ()) + { + Date::wait (50); + // Teste la barière + if (m_motor.getCapteurs () & 0x20) + { + while (!m_motor.getCapteurs () & 0x20) + { + Date::wait (10); + m_motor.readMsg (); + } +// // Avance tout doucement. +// m_motor.goDistance (150, 25); +// // Jusqu'au capteur barrière ou rien trouvé. +// while (!m_motor.finnish () && +// !(m_busp.getCapteurs ().get () & 0x02)) +// { +// m_motor.readMsg (); +// Date::wait (50); +// } +// // Arrète le moteur. +// m_motor.stop (); +// while (!m_motor.finnish ()) +// { +// m_motor.readMsg (); +// Date::wait (50); +// } + // Regarde la couleur. + if ((m_motor.getCapteurs () & 0x80) && m_vert + || !(m_motor.getCapteurs () & 0x80) && !m_vert) + { +// // Repart dans l'autre sens. +// m_motor.go (-25); +// while (m_busp.getCapteurs ().get () & 0x02) +// { +// m_motor.readMsg (); +// Date::wait (50); +// } +// // Stop. +// m_motor.stop (); +// while (!m_motor.finnish ()) +// { +// m_motor.readMsg (); +// Date::wait (50); +// } + // Retourne le palet. + m_motor.setServo (7); +// // Recule. +// m_motor.goDistance (-30); +// // Réavance le robot. +// m_motor.goDistance (140, 25); +// while (!m_motor.finnish ()) +// { +// m_motor.readMsg (); +// Date::wait (50); +// } + Date::wait (2000); + // Retourne les doigts. + m_motor.setServo (8); + } + } + // Lit la distance parcourue. + //d -= m_motor.getDone (); + continue; + } + } +} diff --git a/2003/i/buzz/src/qia/qia.h b/2003/i/buzz/src/qia/qia.h new file mode 100644 index 0000000..069d057 --- /dev/null +++ b/2003/i/buzz/src/qia/qia.h @@ -0,0 +1,34 @@ +#ifndef qia_h +#define qia_h +// qia.h - Ia, vite fait... +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +#include "motor/motor.h" +#include "date/date.h" +#include "busp/busp.h" + +#include + + +class QIa +{ + // Objets instanciés + Motor m_motor; + Date m_date; + // Chemin utilisé. + vector m_path; + int m_pathNext, m_pathSize; + // Couleur des palets. + bool m_vert; + public: + // Constructeur. + QIa (bool vert); + // Lance l'automate. + void go (void); + // Tourne. + void turn (void); + // Tout droit. + void ahead (int d); +}; + +#endif // qia_h diff --git a/2003/i/buzz/src/serial/test_serial.cc b/2003/i/buzz/src/serial/test_serial.cc index 74001a1..029f359 100644 --- a/2003/i/buzz/src/serial/test_serial.cc +++ b/2003/i/buzz/src/serial/test_serial.cc @@ -16,7 +16,7 @@ main (void) //char c; //do //{ - s.write ("Coucou !\n", 9); + s.write ("", 14); //c = s.getchar (); //sleep (1); //} -- cgit v1.2.3