Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Encoder_Nucleo_16_bits PwmIn mbed
Fork of TestBoard by
Revision 8:ad8b64ca548d, committed 2017-06-09
- Comitter:
- DOREL
- Date:
- Fri Jun 09 17:06:05 2017 +0000
- Parent:
- 7:075ba099309b
- Commit message:
- Automate;
Changed in this revision
--- a/TestBoard.lib Thu Jun 08 13:04:22 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/teams/IUT-DE-CACHAN-GE1/code/TestBoard/#4955cb4b3646
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/function_library.h Fri Jun 09 17:06:05 2017 +0000
@@ -0,0 +1,275 @@
+//Variables
+
+Serial Pixy (PA_0, PA_1, 230400);
+Serial Pc (PA_2, PA_3, 921600);
+
+AnalogIn CNY1 (PC_4);
+AnalogIn CNY2 (PA_7);
+AnalogIn CNY3 (PA_6);
+AnalogIn LD1 (PC_0);
+AnalogIn LD2 (PC_1);
+AnalogIn SD1 (PB_0);
+AnalogIn SD2 (PA_4);
+AnalogIn Vbat (PC_5);
+
+DigitalOut Led1 (PA_5);
+DigitalOut Led2 (PD_2);
+DigitalOut Trig1 (PC_3);
+DigitalOut Trig2 (PC_2);
+DigitalOut Trig3 (PA_9);
+DigitalOut En (PC_9);
+DigitalOut SensG (PC_8);
+DigitalOut SensD (PC_6);
+DigitalOut SS (PA_12);
+
+InterruptIn Echo1 (PA_10);
+InterruptIn Echo2 (PA_11);
+InterruptIn Echo3 (PB_12);
+InterruptIn BP (PC_13);
+InterruptIn IG (PC_7);
+InterruptIn PWMG (PB_2);
+InterruptIn PWMD (PB_1);
+
+PwmIn PWMB (PA_15);
+
+PwmOut Pwm_MG (PB_10);
+PwmOut Pwm_MD (PB_3);
+PwmOut Servo (PA_8);
+
+I2C Bus_I2C (PB_9, PB_8);
+
+SPI SPIG (PC_12, PC_11, PC_10);
+SPI SPID (PB_15, PB_14, PB_13);
+
+Nucleo_Encoder_16_bits Gauche (TIM4); // A = PB_6, B = PB_7
+Nucleo_Encoder_16_bits Droite (TIM3); // A = PB_4, B = PB_5
+
+Ticker tick;
+Timer times;
+
+/** Liste des variables globales
+ *
+ * Tick -> (long) Compte le nombre de MS écoulé et déclenche l'exécution de la boucle en fonction du temps écoulé.
+ * FlagIG -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue gauche
+ * FlagID -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue droite
+ * EchoXStart -> (long) Donne le temps en µs de début de l'impulsion d'écho de l'US n°X
+ * DistUSX -> (float) Donne la distance en mm mesurée par l'US n°X
+ */
+
+// Structure de temps
+lWord Tick = 0, Gperiod, Dperiod;
+
+// Sémaphore d'interruption
+int FlagUS1 = 0, FlagUS2 = 0, FlagUS3 = 0, FlagPixy = 0, FlagPixyOverflow = 0;
+int FlagTick = 0, FlagTickLed = 0, BPPressed = 0, nbTurnG = 0, nbTurnD = 0;
+int Pixy_check = -1;
+
+// Dialogue avec la Pixy
+T_pixyCCData Pixy_CCFIFO[20];
+T_pixyNMData Pixy_NMFIFO[20];
+Byte Pixy_CCObjet, Pixy_NMObjet;
+
+// Gestion des capteurs Ultrason
+long Echo1Start, Echo2Start, Echo3Start;
+double DistUS1, DistUS2, DistUS3;
+
+/** Liste des interruptions
+ *
+ */
+
+void tickTime() {
+ Tick++;
+ FlagTick = 1;
+ if ((Tick%100)==0) FlagTickLed = 1;
+}
+
+void BPevent () {
+ BPPressed = 1;
+}
+
+void PWM_motGRise (void) {
+ static lWord oldTime;
+ lWord now;
+ now = times.read_us();
+ Gperiod = now-oldTime;
+ oldTime = now;
+ nbTurnG++;
+}
+
+void PWM_motDRise (void) {
+ static lWord oldTime;
+ lWord now;
+ now = times.read_us();
+ Dperiod = now-oldTime;
+ oldTime = now;
+ nbTurnD++;
+}
+
+void echo1Rise () {
+ Echo1Start = times.read_us();
+}
+
+void echo2Rise () {
+ Echo2Start = times.read_us();
+}
+
+void echo3Rise () {
+ Echo3Start = times.read_us();
+}
+
+void echo1Fall () {
+ DistUS1 = (double)(times.read_us() - Echo1Start)/5.8;
+ FlagUS1 = 1;
+}
+
+void echo2Fall () {
+ DistUS2 = (double)(times.read_us() - Echo2Start)/5.8;
+ FlagUS2 = 1;
+}
+
+void echo3Fall () {
+ DistUS3 = (double)(times.read_us() - Echo3Start)/5.8;
+ FlagUS3 = 1;
+}
+
+void getPixyByte () {
+ static T_tmpBuffer tmpBuffer;
+ static T_structBuffer msgBuffer;
+ static T_pixyState PIXY_state = none;
+ static Byte byteCount = 0;
+ static int PIXY_synced = 0, dummy;
+ int i, somme;
+ static Byte PIXY_nbCCObjet = 0, PIXY_wCCObjet = 0;
+ static Byte PIXY_nbNMObjet = 0, PIXY_wNMObjet = 0;
+
+ Pixy_check = 0;
+
+ if (!PIXY_synced) { // On n'a pas trouvé le START (0x55aa0000)
+ tmpBuffer.tab[byteCount] = Pixy.getc(); // On stocke l'octet reçu dans la première case dispo du tableau temporaire
+
+ if (byteCount < 3) { // Si on n'a pas encore reçu les 4 premier octets
+ byteCount++; // On passe à la case suivante du tableau temporaire
+ } else { // Lorsqu'on a 4 octets
+ if (tmpBuffer.mot != 0xaa550000) { // Si le code n'est pas le code de START
+ for (i=1; i<4; i++) tmpBuffer.tab[i-1] = tmpBuffer.tab[i]; // On décalle les cases du tableau
+ byteCount = 3; // Et on attend le caractère suivant
+ } else { // Si on a trouvé le code de START
+ PIXY_synced = 1; // On passe en mode synchronisé
+ PIXY_state = begin;
+ byteCount = 0;
+ }
+ }
+ }
+
+ if (PIXY_synced) {
+
+ switch (PIXY_state) {
+ case begin : // l'aiguillage est là !
+
+ msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus
+ byteCount++;
+ if (byteCount == 2) { // Quand on a 2 octets
+
+ if (msgBuffer.mot == 0xaa55) { // Si c'est un bloc normal (code 0xAA55)
+ PIXY_state = normal; // On part vers le traitement spécifique
+ }
+
+ if (msgBuffer.mot == 0xaa56) { // Si c'est un bloc Color Code (code 0xAA56)
+ PIXY_state = colorCode; // On part vers le traitement spécifique
+ }
+
+ if (msgBuffer.mot == 0) { // Si on a un debut de trame (code 0000)
+ PIXY_state = doubleZero; // On part vers le traitement spécifique
+ }
+ if ((PIXY_state == begin) || (PIXY_state == none)) { // Si c'est autre chose
+ PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé.
+ PIXY_state = none; // Ceinture et bretelle
+ }
+ byteCount = 0;
+ }
+ break;
+
+ case normal : // Si on a un bloc normal
+
+ Pixy_NMFIFO[PIXY_wNMObjet].tab[byteCount] = Pixy.getc(); // On stocke les octets un à un dans la structure Bloc
+ if (byteCount < 11) { // Tant que la structure n'est pas pleine
+ byteCount++; // On passe à l'octet suivant
+ } else { // Quand elle est pleine
+ byteCount = 0; // On réinitialise
+ PIXY_state = begin; // On retourne à l'aiguillage
+ // On calcule la somme de contrôle
+ somme = Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.signature + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.x + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.y + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.width + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.height;
+
+ if (somme == Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.checksum) { // Si le checksum est bon, on valide la réception
+ if (PIXY_wNMObjet < 19) PIXY_wNMObjet++; // On incrémente le pointeur d'écriture dans la FIFO Objet
+ else PIXY_wNMObjet = 0;
+ if (PIXY_nbNMObjet < 19) PIXY_nbNMObjet++; // On dit que l'on a un objet CC de plus
+ else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow
+ }
+ }
+ break;
+
+ case colorCode : // Si on a un bloc colorCode
+
+ Pixy_CCFIFO[PIXY_wCCObjet].tab[byteCount] = dummy; // On stocke les octets un à un dans la structure CCBloc
+ if (byteCount < 13) byteCount++; // tant que la structure n'est pas pleine on passe à l'octet suivant
+ else { // Quand elle est pleine
+ byteCount = 0; // On réinitialise
+ PIXY_state = begin; // On retourne à l'aiguillage
+ // On calcule la somme de contrôle
+ somme = Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.signature + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.x + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.y + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.width + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.height + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.angle;
+
+ if (somme == Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.checksum) { // Si le checksum est bon
+ if (PIXY_wCCObjet < 19) PIXY_wCCObjet++; // On incrémente le pointeur d'écriture dans la FIFO CCObjet
+ else PIXY_wCCObjet = 0;
+ if (PIXY_nbCCObjet < 19) PIXY_nbCCObjet++; // On dit que l'on a un objet CC de plus à traiter
+ else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow
+ }
+ }
+ break;
+
+ case doubleZero : // Si on a reçu le code de début d'une nouvelle trame.
+
+ msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus
+ byteCount++;
+ if (byteCount == 2) { // Quand on a 2 octets
+ if (msgBuffer.mot == 0xaa55) { // On doit impérativement trouver le code 0xAA55
+ PIXY_state = begin; // Si c'est le cas, alors tout va bien et on va à l'aiguillage
+ Pixy_NMObjet = PIXY_nbNMObjet; // On met à jour les variables pour le traitement
+ Pixy_CCObjet = PIXY_nbCCObjet;
+ PIXY_nbCCObjet = 0;
+ PIXY_nbNMObjet = 0;
+ FlagPixy = 1; // On valide le traitement de la trame précédente.
+ } else { // Si on trouve autre chose
+ PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé.
+ PIXY_state = none; // Ceinture et bretelle
+ }
+ byteCount = 0;
+ }
+ break;
+ }
+ }
+}
+
+void ir_read(double SD2,double LD2,double *SD2_dist,double *LD2_dist) {
+ double SD2_val, LD2_val;
+
+ SD2_val = SD2;
+ LD2_val = LD2;
+
+ if (SD2_val < 0.06) {
+ SD2_val = 0;
+ *SD2_dist = 40;
+ } else {
+ *SD2_dist = 11.611/(SD2_val*3.3-0.0237);
+ if (*SD2_dist > 40) *SD2_dist = 40;
+ }
+
+ if (LD2_val < 0.1) {
+ LD2_val = 0;
+ *LD2_dist = 150;
+ } else {
+ *LD2_dist = 59.175/(LD2_val*3.3-0.0275);
+ if (*LD2_dist > 150) *LD2_dist = 150;
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include_define_typedeflibrary.h Fri Jun 09 17:06:05 2017 +0000
@@ -0,0 +1,90 @@
+//Include
+
+#include "mbed.h"
+#include "PwmIn.h"
+#include "Nucleo_Encoder_16_bits.h"
+
+//Defines
+
+#define BOUSSOLE_adress 0xC0
+#define PIXY_adress 0x54
+
+#define CC_BLOCSIZE 14
+#define N_BLOCSIZE 12
+
+#define N_BLOCCODE 0xAA55
+#define CC_BLOCCODE 0xAA56
+
+#define SPI_READ_NOP 0x0003
+#define SPI_READ_ANGLE 0xFFFF
+#define SPI_READ_ERROR 0x8002
+#define SPI_READ_SETTINGS1 0x1803
+#define SPI_READ_SETTINGS2 0x8902
+#define SPI_WRTIE_SETTINGS1 0x1800
+#define SPI_WRITE_SETTINGS2 0x9801
+
+//Defines automate
+
+#define START 0
+#define SEEK_BALL 1
+#define TURN_TO_BALL 2
+#define GO_TO_BALL 3
+#define CAPTURE_AND_TURN 4
+#define WALL_CAPTURE_AND_TURN 5
+#define RELEASE_CAPTURE 6
+#define BALL_LAUNCHING 7
+#define STOP_BALL_LAUNCHING 8
+#define TURN_TO_BASE 9
+#define RETURN 10
+#define WALL_RETURN 11
+#define STOP_RETURN 12
+#define SEEK_ROTATION 13
+
+//Typedef
+
+typedef unsigned char Byte;
+typedef unsigned short Word;
+typedef unsigned long lWord;
+
+typedef enum {S_monte = 1, S_descente = 0} T_SERVODIR;
+
+typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState;
+
+typedef union {
+ lWord mot;
+ Byte tab[4];
+} T_tmpBuffer;
+
+typedef union {
+ Word mot;
+ Byte tab[2];
+} T_structBuffer;
+
+typedef struct {
+ Word checksum;
+ Word signature;
+ Word x;
+ Word y;
+ Word width;
+ Word height;
+ Word angle;
+} T_pixyCCBloc;
+
+typedef struct {
+ Word checksum;
+ Word signature;
+ Word x;
+ Word y;
+ Word width;
+ Word height;
+} T_pixyNMBloc;
+
+typedef union {
+ Byte tab[14];
+ T_pixyCCBloc CCbloc;
+} T_pixyCCData;
+
+typedef union {
+ Byte tab[12];
+ T_pixyNMBloc NMbloc;
+} T_pixyNMData;
\ No newline at end of file
--- a/main.cpp Thu Jun 08 13:04:22 2017 +0000
+++ b/main.cpp Fri Jun 09 17:06:05 2017 +0000
@@ -7,431 +7,8 @@
*
*/
-#include "mbed.h"
-#include "PwmIn.h"
-#include "Nucleo_Encoder_16_bits.h"
-
-#define BOUSSOLE_adress 0xC0
-#define PIXY_adress 0x54
-
-#define CC_BLOCSIZE 14
-#define N_BLOCSIZE 12
-
-#define N_BLOCCODE 0xAA55
-#define CC_BLOCCODE 0xAA56
-
-
-// Comme la nucleo est Little Endian et que l'AS5047D est Big Endian, les codes sont inversés
-// Registre Valeur (BE) Valeur (LE)
-// NOP 0xC000 0x0003
-// ANGLE 0xFFFF 0xFFFF
-// ERROR 0x4001 0x8002
-// SETTING1 (R) 0xC018 0x1803
-// SETTING2 (R) 0x4019 0x8902
-// SETTING1 (W) 0x0018 0x1800
-// SETTING2 (W) 0x8019 0x9801
-
-#define SPI_READ_NOP 0x0003
-#define SPI_READ_ANGLE 0xFFFF
-#define SPI_READ_ERROR 0x8002
-#define SPI_READ_SETTINGS1 0x1803
-#define SPI_READ_SETTINGS2 0x8902
-#define SPI_WRTIE_SETTINGS1 0x1800
-#define SPI_WRITE_SETTINGS2 0x9801
-
-typedef unsigned char Byte;
-typedef unsigned short Word;
-typedef unsigned long lWord;
-
-typedef enum {S_monte = 1, S_descente = 0} T_SERVODIR;
-
-typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState;
-
-typedef union {
- lWord mot;
- Byte tab[4];
-} T_tmpBuffer;
-
-typedef union {
- Word mot;
- Byte tab[2];
-} T_structBuffer;
-
-typedef struct {
- Word checksum;
- Word signature;
- Word x;
- Word y;
- Word width;
- Word height;
- Word angle;
-} T_pixyCCBloc;
-
-typedef struct {
- Word checksum;
- Word signature;
- Word x;
- Word y;
- Word width;
- Word height;
-} T_pixyNMBloc;
-
-typedef union {
- Byte tab[14];
- T_pixyCCBloc CCbloc;
-} T_pixyCCData;
-
-typedef union {
- Byte tab[12];
- T_pixyNMBloc NMbloc;
-} T_pixyNMData;
-
-
-
-/** Liste des objets
- *
- * Serial #4 Pixy
- * Serial #2 Pc
- *
- * AnalogIn C1, C2, C3, LD1, LD2, SD1, SD2, Vbat
- *
- * DigitalOut Led1, Led2, Trig1, Trig2, Trig3, En, SensG, SensD
- *
- * InterruptIn IndexG, IndexD, Echo1, Echo2, Echo3, BP
- *
- * PwmOut Pwm_MG, Pwm_MD, Servo
- *
- * PwmIn PWMG, PWMD, PWMB
- *
- * I2C Bus_I2C
- *
- * SPI MotG, MotD
- *
- * Nucleo_Encoder_16_bits Gauche, Droite
- *
- * Ticker timer
- */
-
-/** Liste des PINs
- *
- * PIN MAP (ordre alphabetique) des PINs de la Nucléo 64 utilisée
- * PA_0 -> Pixy RX (Serial)
- * PA_1 -> Pixy TX (Serial)
- * PA_2 -> PC TX (Serial)
- * PA_3 -> PX RX (Serial)
- * PA_4 -> GP2 SD #2 (Analog In)
- * PA_5 -> LED1 (Digital Out)
- * PA_6 -> CNY3 (Analog In)
- * PA_7 -> CNY2 (Analog In)
- * PA_8 -> Servomoteur (PWM Out)
- * PA_9 -> US Trigger #3 (Digital Out)
- * PA_10 -> US Echo #1 (Pwm In)
- * PA_11 -> US Echo #2 (Pwm In)
- * PA_12 -> SS (SPI Slave Select) (Digital Out)
- * PA_13
- * PA_14
- * PA_15 -> Boussole (Pwm In)
- *
- * PB_0 -> GP2 SD #1 (Analog In)
- * PB_1 -> Position D (Pwm In)
- * PB_2 -> Position G (Pwm In)
- * PB_3 -> PWM Mot D (PWM Out)
- * PB_4 -> Enocdeur Droit A (QE)
- * PB_5 -> Enocdeur Droit B (QE)
- * PB_6 -> Enocdeur Gauche A (QE)
- * PB_7 -> Enocdeur Gauche B (QE)
- * PB_8 -> SCL (I2C)
- * PB_9 -> SDA (I2C)
- * PB_10 -> PWM Mot G (PWM Out)
- * PB_11
- * PB_12 -> US Echo #3 (Pwm In)
- * PB_13 -> SCK Encodeur D (SPI)
- * PB_14 -> MISO Encodeur D (SPI)
- * PB_15 -> MOSI Encodeur D (SPI)
- *
- * PC_0 -> GP2 LD #1 (Analog In)
- * PC_1 -> GP2 LD #2 (Analog In)
- * PC_2 -> US Trigger #2 (Digital Out)
- * PC_3 -> US Trigger #1 (Digital Out)
- * PC_4 -> CNY1 (Analog In)
- * PC_5 -> Vbat (Analog In)
- * PC_6 -> Dir Mot Droit (Digital Out)
- * PC_7 -> I (Encodeur Gauche) (IRQ In)
- * PC_8 -> Dir Mot Gauche (Digital Out)
- * PC_9 -> Enable Moteurs (Digital Out)
- * PC_10 -> SCK Encodeur G (SPI)
- * PC_11 -> MISO Encodeur G (SPI)
- * PC_12 -> MOSI Encodeur G (SPI)
- * PC_13 -> User BP (IRQ In)
- * PC_14
- * PC_15
- *
- * PD_1
- * PD_2 -> Led2 (Digital Out)
- */
-
-Serial Pixy (PA_0, PA_1, 230400);
-Serial Pc (PA_2, PA_3, 921600);
-
-AnalogIn CNY1 (PC_4);
-AnalogIn CNY2 (PA_7);
-AnalogIn CNY3 (PA_6);
-AnalogIn LD1 (PC_0);
-AnalogIn LD2 (PC_1);
-AnalogIn SD1 (PB_0);
-AnalogIn SD2 (PA_4);
-AnalogIn Vbat (PC_5);
-
-DigitalOut Led1 (PA_5);
-DigitalOut Led2 (PD_2);
-DigitalOut Trig1 (PC_3);
-DigitalOut Trig2 (PC_2);
-DigitalOut Trig3 (PA_9);
-DigitalOut En (PC_9);
-DigitalOut SensG (PC_8);
-DigitalOut SensD (PC_6);
-DigitalOut SS (PA_12);
-
-InterruptIn Echo1 (PA_10);
-InterruptIn Echo2 (PA_11);
-InterruptIn Echo3 (PB_12);
-InterruptIn BP (PC_13);
-InterruptIn IG (PC_7);
-InterruptIn PWMG (PB_2);
-InterruptIn PWMD (PB_1);
-
-PwmIn PWMB (PA_15);
-
-PwmOut Pwm_MG (PB_10);
-PwmOut Pwm_MD (PB_3);
-PwmOut Servo (PA_8);
-
-I2C Bus_I2C (PB_9, PB_8);
-
-SPI SPIG (PC_12, PC_11, PC_10);
-SPI SPID (PB_15, PB_14, PB_13);
-
-Nucleo_Encoder_16_bits Gauche (TIM4); // A = PB_6, B = PB_7
-Nucleo_Encoder_16_bits Droite (TIM3); // A = PB_4, B = PB_5
-
-Ticker tick;
-Timer times;
-
-/** Liste des variables globales
- *
- * Tick -> (long) Compte le nombre de MS écoulé et déclenche l'exécution de la boucle en fonction du temps écoulé.
- * FlagIG -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue gauche
- * FlagID -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue droite
- * EchoXStart -> (long) Donne le temps en µs de début de l'impulsion d'écho de l'US n°X
- * DistUSX -> (float) Donne la distance en mm mesurée par l'US n°X
- */
-
-// Structure de temps
-lWord Tick = 0, Gperiod, Dperiod;
-
-// Sémaphore d'interruption
-int FlagUS1 = 0, FlagUS2 = 0, FlagUS3 = 0, FlagPixy = 0, FlagPixyOverflow = 0;
-int FlagTick = 0, FlagTickLed = 0, BPPressed = 0, nbTurnG = 0, nbTurnD = 0;
-int Pixy_check = -1;
-
-// Dialogue avec la Pixy
-T_pixyCCData Pixy_CCFIFO[20];
-T_pixyNMData Pixy_NMFIFO[20];
-Byte Pixy_CCObjet, Pixy_NMObjet;
-
-// Gestion des capteurs Ultrason
-long Echo1Start, Echo2Start, Echo3Start;
-double DistUS1, DistUS2, DistUS3;
-
-/** Liste des interruptions
- *
- */
-
-void tickTime()
-{
- Tick++;
- FlagTick = 1;
- if ((Tick%100)==0) FlagTickLed = 1;
-}
-
-void BPevent ()
-{
- BPPressed = 1;
-}
-
-void PWM_motGRise (void)
-{
- static lWord oldTime;
- lWord now;
- now = times.read_us();
- Gperiod = now-oldTime;
- oldTime = now;
- nbTurnG++;
-}
-
-void PWM_motDRise (void)
-{
- static lWord oldTime;
- lWord now;
- now = times.read_us();
- Dperiod = now-oldTime;
- oldTime = now;
- nbTurnD++;
-}
-
-void echo1Rise ()
-{
- Echo1Start = times.read_us();
-}
-
-void echo2Rise ()
-{
- Echo2Start = times.read_us();
-}
-
-void echo3Rise ()
-{
- Echo3Start = times.read_us();
-}
-
-void echo1Fall ()
-{
- DistUS1 = (double)(times.read_us() - Echo1Start)/5.8;
- FlagUS1 = 1;
-}
-
-void echo2Fall ()
-{
- DistUS2 = (double)(times.read_us() - Echo2Start)/5.8;
- FlagUS2 = 1;
-}
-
-void echo3Fall ()
-{
- DistUS3 = (double)(times.read_us() - Echo3Start)/5.8;
- FlagUS3 = 1;
-}
-
-void getPixyByte ()
-{
- static T_tmpBuffer tmpBuffer;
- static T_structBuffer msgBuffer;
- static T_pixyState PIXY_state = none;
- static Byte byteCount = 0;
- static int PIXY_synced = 0, dummy;
- int i, somme;
- static Byte PIXY_nbCCObjet = 0, PIXY_wCCObjet = 0;
- static Byte PIXY_nbNMObjet = 0, PIXY_wNMObjet = 0;
-
- Pixy_check = 0;
-
- if (!PIXY_synced) { // On n'a pas trouvé le START (0x55aa0000)
- tmpBuffer.tab[byteCount] = Pixy.getc(); // On stocke l'octet reçu dans la première case dispo du tableau temporaire
-
- if (byteCount < 3) { // Si on n'a pas encore reçu les 4 premier octets
- byteCount++; // On passe à la case suivante du tableau temporaire
- } else { // Lorsqu'on a 4 octets
- if (tmpBuffer.mot != 0xaa550000) { // Si le code n'est pas le code de START
- for (i=1; i<4; i++) tmpBuffer.tab[i-1] = tmpBuffer.tab[i]; // On décalle les cases du tableau
- byteCount = 3; // Et on attend le caractère suivant
- } else { // Si on a trouvé le code de START
- PIXY_synced = 1; // On passe en mode synchronisé
- PIXY_state = begin;
- byteCount = 0;
- }
- }
- }
-
- if (PIXY_synced) {
-
- switch (PIXY_state) {
- case begin : // l'aiguillage est là !
-
- msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus
- byteCount++;
- if (byteCount == 2) { // Quand on a 2 octets
-
- if (msgBuffer.mot == 0xaa55) { // Si c'est un bloc normal (code 0xAA55)
- PIXY_state = normal; // On part vers le traitement spécifique
- }
-
- if (msgBuffer.mot == 0xaa56) { // Si c'est un bloc Color Code (code 0xAA56)
- PIXY_state = colorCode; // On part vers le traitement spécifique
- }
-
- if (msgBuffer.mot == 0) { // Si on a un debut de trame (code 0000)
- PIXY_state = doubleZero; // On part vers le traitement spécifique
- }
- if ((PIXY_state == begin) || (PIXY_state == none)) { // Si c'est autre chose
- PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé.
- PIXY_state = none; // Ceinture et bretelle
- }
- byteCount = 0;
- }
- break;
-
- case normal : // Si on a un bloc normal
-
- Pixy_NMFIFO[PIXY_wNMObjet].tab[byteCount] = Pixy.getc(); // On stocke les octets un à un dans la structure Bloc
- if (byteCount < 11) { // Tant que la structure n'est pas pleine
- byteCount++; // On passe à l'octet suivant
- } else { // Quand elle est pleine
- byteCount = 0; // On réinitialise
- PIXY_state = begin; // On retourne à l'aiguillage
- // On calcule la somme de contrôle
- somme = Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.signature + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.x + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.y + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.width + Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.height;
-
- if (somme == Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.checksum) { // Si le checksum est bon, on valide la réception
- if (PIXY_wNMObjet < 19) PIXY_wNMObjet++; // On incrémente le pointeur d'écriture dans la FIFO Objet
- else PIXY_wNMObjet = 0;
- if (PIXY_nbNMObjet < 19) PIXY_nbNMObjet++; // On dit que l'on a un objet CC de plus
- else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow
- }
- }
- break;
-
- case colorCode : // Si on a un bloc colorCode
-
- Pixy_CCFIFO[PIXY_wCCObjet].tab[byteCount] = dummy; // On stocke les octets un à un dans la structure CCBloc
- if (byteCount < 13) byteCount++; // tant que la structure n'est pas pleine on passe à l'octet suivant
- else { // Quand elle est pleine
- byteCount = 0; // On réinitialise
- PIXY_state = begin; // On retourne à l'aiguillage
- // On calcule la somme de contrôle
- somme = Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.signature + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.x + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.y + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.width + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.height + Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.angle;
-
- if (somme == Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.checksum) { // Si le checksum est bon
- if (PIXY_wCCObjet < 19) PIXY_wCCObjet++; // On incrémente le pointeur d'écriture dans la FIFO CCObjet
- else PIXY_wCCObjet = 0;
- if (PIXY_nbCCObjet < 19) PIXY_nbCCObjet++; // On dit que l'on a un objet CC de plus à traiter
- else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow
- }
- }
- break;
-
- case doubleZero : // Si on a reçu le code de début d'une nouvelle trame.
-
- msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus
- byteCount++;
- if (byteCount == 2) { // Quand on a 2 octets
- if (msgBuffer.mot == 0xaa55) { // On doit impérativement trouver le code 0xAA55
- PIXY_state = begin; // Si c'est le cas, alors tout va bien et on va à l'aiguillage
- Pixy_NMObjet = PIXY_nbNMObjet; // On met à jour les variables pour le traitement
- Pixy_CCObjet = PIXY_nbCCObjet;
- PIXY_nbCCObjet = 0;
- PIXY_nbNMObjet = 0;
- FlagPixy = 1; // On valide le traitement de la trame précédente.
- } else { // Si on trouve autre chose
- PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé.
- PIXY_state = none; // Ceinture et bretelle
- }
- byteCount = 0;
- }
- break;
- }
- }
-}
-
+#include "include_define_typedeflibrary.h"
+#include "function_library.h"
int main()
{
@@ -451,12 +28,23 @@
double BOUSSOLE_periode;
double CAP_I2C, CAP_PWM;
- double SD1_val, SD2_val, LD1_val, LD2_val, CNY1_val, CNY2_val, CNY3_val, Vbat_val;
- double SD1_dist, SD2_dist, LD1_dist, LD2_dist;
+ double CNY1_val, CNY2_val, CNY3_val, Vbat_val;
+ double SD2_dist, LD2_dist;
int MOTG_evol = 1, MOTD_evol = 1;
double MOTG_duty = 0.5, MOTD_duty = 0.5;
+ //Variables Automate
+ int etat_actuel = 0, etat_futur = 0, etat_precedent = 0; //Need etat_precedent ?
+
+ //Variables test capteurs
+ int ball_found = 0, ball_forward = 0, ball_captured = 0, face_ennemy_side = 0, face_our_side = 0;
+ int wall = 0, white_line_crossed = 0, return_done = 0, rotation_done; //Rename white_line_crossed
+
+ //Variables
+
+ int orientation_camp_adversaire, orientation_mon_camp;
+
times.reset();
times.start();
@@ -508,384 +96,130 @@
Servo.period_ms (20);
Servo.pulsewidth_us(200);
-
+
while(1) {
- do {
- Led1 = 0;
- Pc.printf ("\n\n\n\n\rProgramme de test\n\n\rEntrez le code du test a effectuer :\n\n");
- Pc.printf ("\r1- Capteurs Ultra Son (les 3)\n");
- Pc.printf ("\r2- Boussole et I2C\n");
- Pc.printf ("\r3- Capteurs GP2 (les 4)\n");
- Pc.printf ("\r4- Capteurs CNY70 (les 3)\n");
- Pc.printf ("\r5- VBAT \t! erreur de composant la mesure est fausse !\n");
- Pc.printf ("\r6- Moteur Gauche\n");
- Pc.printf ("\r7- Moteur Droit\n");
- Pc.printf ("\r8- Servomoteur\n");
- Pc.printf ("\r9- PIXY (CMUCAM5)\n");
- MENU_choix = Pc.getc ();
- } while (((MENU_choix-'0')<1) || ((MENU_choix-'0')>9));
-
- switch (MENU_choix-'0') {
-
- case 1 :
- Pc.printf ("\n\n\rTest des captreurs Ultrason\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
- do {
-
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
-
- // Gestion des US
- if (((Tick%150)==0) && FlagTick) {
- Trig1 = 1;
- wait_us(20);
- Trig1 = 0;
- FlagTick = 0;
- }
-
- if (((Tick%150)==50) && FlagTick) {
- Trig2 = 1;
- wait_us(20);
- Trig2 = 0;
- FlagTick = 0;
- }
-
- if (((Tick%150)==100) && FlagTick) {
- Trig3 = 1;
- wait_us(20);
- Trig3 = 0;
- FlagTick = 0;
- }
-
- if (FlagUS1==1) {
- Pc.printf ("\rUS 1 = %04d mm", (int)DistUS1);
- FlagUS1 = 0;
- }
-
- if (FlagUS2==1) {
- Pc.printf ("\r\t\t\tUS 2 = %04d mm", (int)DistUS2);
- FlagUS2 = 0;
- }
-
- if (FlagUS3==1) {
- Pc.printf ("\r\t\t\t\t\t\tUS 3 = %04d mm", (int)DistUS3);
- FlagUS3 = 0;
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+ //capteurs_read(); //Lecture tous les capteurs
+ CAP_PWM = ((PWMB.pulsewidth()*1000)-1)*10;
+ Pc.printf ("\r PWM = %4.1lf", CAP_PWM);
+ //capteurs_test(); //Teste les valeurs des capteurs et change des variables booleenne
+ etat_actuel = etat_futur;
+
+ switch(etat_actuel) {
+ case START:
+ etat_futur = STOP_RETURN;
+ break;
+
+ case SEEK_BALL:
+ if(ball_found) etat_futur = TURN_TO_BALL;
+ if(!ball_found) etat_futur = SEEK_ROTATION;
+ break;
+
+ case SEEK_ROTATION:
+ if(rotation_done) etat_futur = SEEK_BALL;
+
+ case TURN_TO_BALL:
+ if(ball_forward) etat_futur = GO_TO_BALL;
+ break;
+
+ case GO_TO_BALL:
+ if(!ball_forward) etat_futur = TURN_TO_BALL;
+ if(ball_captured & face_ennemy_side) etat_futur = BALL_LAUNCHING;
+ if(ball_captured & !face_ennemy_side) etat_futur = CAPTURE_AND_TURN;
break;
-
- case 2 :
- Pc.printf ("\n\n\rBoussole\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
-
- Pc.printf ("\n\rVerif du bus I2C :");
- I2C_check = Bus_I2C.write (BOUSSOLE_adress,BOUSSOLE_status,1,false);
- if (I2C_check==0) {
- Pc.printf (" OK\n");
- Bus_I2C.write(BOUSSOLE_adress,BOUSSOLE_status, 1, true);
- Bus_I2C.read (BOUSSOLE_adress,I2C_registerValue,4);
- Pc.printf ("\rVersion Firmware boussole : %03d\n", I2C_registerValue[0]);
- } else {
- Pc.printf (" FAIL\n");
- }
-
- BOUSSOLE_periode = PWMB.period();
- Pc.printf ("\rVerif de la PWM :");
- if ((BOUSSOLE_periode > 0.11) || (BOUSSOLE_periode < 0.06)) {
- Pc.printf (" FAIL\n\n");
- } else {
- Pc.printf (" OK\n\n");
- BOUSSOLE_check = 0;
- }
-
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
-
- if (((Tick%150)==0) && FlagTick) {
- FlagTick = 0;
- if (BOUSSOLE_check==0) {
- CAP_PWM = ((PWMB.pulsewidth()*1000)-1)*10;
- Pc.printf ("\r PWM = %4.1lf", CAP_PWM);
- }
- if (I2C_check==0) {
- Bus_I2C.write(BOUSSOLE_adress,BOUSSOLE_status, 1, true);
- Bus_I2C.read (BOUSSOLE_adress,I2C_registerValue,4);
- CAP_I2C = (double)(((unsigned short)I2C_registerValue[2]<<8)+(unsigned short)I2C_registerValue[3])/10.0;
- Pc.printf ("\r\t\t I2C = %4.1lf", CAP_I2C);
- }
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case CAPTURE_AND_TURN:
+ if(face_ennemy_side) etat_futur = RELEASE_CAPTURE;
+ break;
+
+ case WALL_CAPTURE_AND_TURN:
+ if(!wall & face_ennemy_side) etat_futur = RELEASE_CAPTURE;
+ break;
+
+ case RELEASE_CAPTURE:
+ etat_futur = BALL_LAUNCHING;
break;
-
- case 3 :
- Pc.printf ("\n\n\rGP2xx\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
-
- SD1_val = SD1;
- SD2_val = SD2;
- LD1_val = LD1;
- LD2_val = LD2;
-
- if (SD1_val < 0.06) {
- SD1_val = 0;
- SD1_dist = 40;
- } else {
- SD1_dist = 11.611/(SD1_val*3.3-0.0237);
- if (SD1_dist > 40) SD1_dist = 40;
- }
-
- if (SD2_val < 0.06) {
- SD2_val = 0;
- SD2_dist = 40;
- } else {
- SD2_dist = 11.611/(SD2_val*3.3-0.0237);
- if (SD2_dist > 40) SD2_dist = 40;
- }
-
- if (LD1_val < 0.1) {
- LD1_val = 0;
- LD1_dist = 150;
- } else {
- LD1_dist = 59.175/(LD1_val*3.3-0.0275);
- if (LD1_dist > 150) LD1_dist = 150;
- }
-
- if (LD2_val < 0.1) {
- LD2_val = 0;
- LD2_dist = 150;
- } else {
- LD2_dist = 59.175/(LD2_val*3.3-0.0275);
- if (LD2_dist > 150) LD2_dist = 150;
- }
-
- Pc.printf ("\r SD1 = %3.1lf cm - SD2 = %3.1lf cm - LD1 = %4.1lf cm - LD2 = %4.1lf cm", SD1_dist, SD2_dist, LD1_dist, LD2_dist);
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case BALL_LAUNCHING:
+ if(wall) etat_futur = WALL_CAPTURE_AND_TURN ;
+ if(white_line_crossed) etat_futur = STOP_BALL_LAUNCHING;
+ break;
+
+ case STOP_BALL_LAUNCHING: //Add tempo ?
+ etat_futur = TURN_TO_BASE;
break;
-
- case 4 :
- Pc.printf ("\n\n\rCNY70\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
-
- CNY1_val = CNY1;
- CNY2_val = CNY2;
- CNY3_val = CNY3;
-
- Pc.printf ("\r CNY1 = %3.2lf V\t CNY2 = %3.2lf V\t CNY3 = %3.2lf V", CNY1_val*3.3, CNY2_val*3.3, CNY3_val*3.3);
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case TURN_TO_BASE:
+ if(face_our_side) etat_futur = RETURN;
+ break;
+
+ case RETURN: //return_done is a tempo ?
+ if(return_done) etat_futur = STOP_RETURN;
+ else if(wall) etat_futur = WALL_RETURN;
break;
-
- case 5 :
- Pc.printf ("\n\n\rVbat\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
-
- Vbat_val = Vbat;
- Pc.printf ("\rVbat = %5.3lf V", Vbat_val*3.3*4.3);
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case WALL_RETURN:
+ if(!wall) etat_futur = STOP_RETURN;
+ break;
+
+ case STOP_RETURN:
+ etat_futur = SEEK_BALL;
+ break;
+
+ default :
+ etat_futur = STOP_RETURN;
break;
-
- case 6 :
- Pc.printf ("\n\n\rMoteur Gauche\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
-
- En = 1;
- SensG = 1;
- Led2 = 1;
- MOTG_duty = 0.5;
- MOTG_evol = 1;
- Pwm_MG = 0.5;
-
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
- if (BPPressed) {
- BPPressed = 0;
- SensG = !SensG;
- Led2 = !Led2;
- }
-
- if (((Tick%1000)==0) && FlagTick) {
- FlagTick = 0;
- if (MOTG_evol) {
- if (MOTG_duty < 0.9) MOTG_duty += 0.1;
- else {
- MOTG_evol = 0;
- MOTG_duty = 0.9;
- }
- } else {
- if (MOTG_duty > 0.1) MOTG_duty -= 0.1;
- else {
- MOTG_evol = 1;
- MOTG_duty = 0.1;
- }
- }
- }
-
- Pwm_MG = MOTG_duty;
- Pc.printf ("\rPWM = %2.1lf => Pos = %10ld Tick, Period = %ldus", MOTG_duty, Gauche.GetCounter(), Gperiod);
-
-
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
-
- En = 0;
- if (SensG == 0) Pwm_MG = 0;
- else Pwm_MG = 1;
-
+ }
+
+ switch(etat_actuel) {
+ case START:
+ orientation_camp_adversaire = (int)CAP_PWM;
+ orientation_mon_camp =(((int)CAP_PWM+180)%360);
+ break;
+
+ case SEEK_BALL:
+ break;
+
+ case TURN_TO_BALL:
+ break;
+
+ case GO_TO_BALL:
+ //Avancer droit (ralentir a la fin)
break;
-
- case 7 :
- Pc.printf ("\n\n\rMoteur Droit\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
-
- En = 1;
- SensD = 1;
- Led2 = 1;
- MOTD_duty = 0.5;
- MOTD_evol = 1;
- Pwm_MD = 0.5;
-
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
- if (BPPressed) {
- BPPressed = 0;
- SensD = !SensD;
- Led2 = !Led2;
- }
-
- if (((Tick%1000)==0) && FlagTick) {
- FlagTick = 0;
- if (MOTD_evol) {
- if (MOTD_duty < 0.9) MOTD_duty += 0.1;
- else {
- MOTD_evol = 0;
- MOTD_duty = 0.9;
- }
- } else {
- if (MOTD_duty > 0.1) MOTD_duty -= 0.1;
- else {
- MOTD_evol = 1;
- MOTD_duty = 0.1;
- }
- }
- }
- Pwm_MD = MOTD_duty;
- Pc.printf ("\rPWM = %2.1lf => Pos = %10ld Tick, Period = %ldus", MOTD_duty, Droite.GetCounter(), Dperiod);
-
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
-
- En = 0;
- if (SensD == 0) Pwm_MD = 0;
- else Pwm_MD = 1;
-
+
+ case CAPTURE_AND_TURN:
+ //Baisser cage
+ //Tourner
+ //-------------------->Separer etapes ?
+ break;
+
+ case RELEASE_CAPTURE:
+ //Lever cage
+ break;
+
+ case BALL_LAUNCHING:
+ //Avancer droit a fond
break;
-
- case 8 :
- Pc.printf ("\n\n\rServo Moteur\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
-
- do {
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
-
- if (((Tick%250)==0) && FlagTick) {
- FlagTick = 0;
- if (SERVO_dir == S_monte) {
- if (SERVO_pulseWidth < (SERVO_max - 100)) SERVO_pulseWidth +=100;
- else {
- SERVO_dir = S_descente;
- SERVO_pulseWidth = SERVO_max;
- }
- } else {
- if (SERVO_pulseWidth > (SERVO_min + 100)) SERVO_pulseWidth -=100;
- else {
- SERVO_dir = S_monte;
- SERVO_pulseWidth = SERVO_min;
- }
- }
-
- Servo.pulsewidth_us (SERVO_pulseWidth);
- Pc.printf ("\rPulse = %d",SERVO_pulseWidth);
- }
-
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case STOP_BALL_LAUNCHING:
+ //Arreter
+
+ break;
+
+ case TURN_TO_BASE:
+ //Faire demi tour
break;
-
- case 9 :
- Pc.printf ("\n\n\rPixy\n");
- Pc.printf ("\rAppuyez sur Entree pour quitter\n");
-
- if (Pixy_check == 0) Pc.printf ("\n\rPIXY is ALIVE\n");
- else Pc.printf ("\n\rPIXY don't talk\n");
-
- do {
- if (FlagPixy) {
-
- if (FlagPixyOverflow) {
- Pc.printf ("\rSome Data were lost\n");
- FlagPixyOverflow = 0;
- }
- for (PIXY_objet = 0; PIXY_objet < Pixy_NMObjet; PIXY_objet++) {
- Pc.printf ("\rNMobj #%hd/%hd : sig = %hd : X=%5hd, Y=%5hd (W=%5hd, H=%5hd)\n", PIXY_objet+1, Pixy_NMObjet, Pixy_NMFIFO[PIXY_rNMObjet].NMbloc.signature, Pixy_NMFIFO[PIXY_rNMObjet].NMbloc.x, Pixy_NMFIFO[PIXY_rNMObjet].NMbloc.y, Pixy_NMFIFO[PIXY_rNMObjet].NMbloc.width, Pixy_NMFIFO[PIXY_rNMObjet].NMbloc.height);
-
- if (PIXY_rNMObjet<19) PIXY_rNMObjet++;
- else PIXY_rNMObjet = 0;
- }
- Pixy_NMObjet = 0;
-
- for (PIXY_objet = 0; PIXY_objet < Pixy_CCObjet; PIXY_objet++) {
- Pc.printf ("\rCCobj #%hd/%hd : sig = %hd : X=%5hd, Y=%5hd (W=%5hd, H=%5hd)\n", PIXY_objet+1, Pixy_CCObjet, Pixy_CCFIFO[PIXY_rCCObjet].CCbloc.signature, Pixy_CCFIFO[PIXY_rCCObjet].CCbloc.x, Pixy_CCFIFO[PIXY_rCCObjet].CCbloc.y, Pixy_CCFIFO[PIXY_rCCObjet].CCbloc.width, Pixy_CCFIFO[PIXY_rCCObjet].CCbloc.height);
-
- if (PIXY_rCCObjet<19) PIXY_rCCObjet++;
- else PIXY_rCCObjet = 0;
- }
- Pixy_CCObjet = 0;
- Pc.printf("\n\r");
- FlagPixy = 0;
- }
-
- if (FlagTickLed) {
- Led1 = !Led1;
- FlagTickLed = 0;
- }
- } while(!Pc.readable());
- MENU_choix = Pc.getc();
+
+ case RETURN:
+ //Avancer pendant x secondes
break;
-
+
+ case STOP_RETURN:
+ //S'arreter
+ break;
+
+ default :
+ break;
}
}
}
\ No newline at end of file
