dfgqf
Dependencies: Encoder_Nucleo_16_bits PwmIn mbed
Fork of TestBoardv2_boussole_pixi by
main.cpp@8:527f5db9b3dc, 2017-06-09 (annotated)
- Committer:
- illan
- Date:
- Fri Jun 09 02:09:09 2017 +0000
- Revision:
- 8:527f5db9b3dc
- Parent:
- 6:88b4805d33e1
- Child:
- 9:18bdd03627d1
version test boussole et pixy
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
haarkon | 0:f00e68bef80c | 1 | /** Main Test Board |
haarkon | 0:f00e68bef80c | 2 | * |
haarkon | 0:f00e68bef80c | 3 | * \brief Programme de tests pour le robot NCR 2017 |
haarkon | 0:f00e68bef80c | 4 | * \author H. Angelis |
haarkon | 0:f00e68bef80c | 5 | * \version alpha_1 |
haarkon | 0:f00e68bef80c | 6 | * \date 15/05/17 |
haarkon | 0:f00e68bef80c | 7 | * |
haarkon | 0:f00e68bef80c | 8 | */ |
haarkon | 0:f00e68bef80c | 9 | |
haarkon | 0:f00e68bef80c | 10 | #include "mbed.h" |
haarkon | 0:f00e68bef80c | 11 | #include "PwmIn.h" |
haarkon | 0:f00e68bef80c | 12 | #include "Nucleo_Encoder_16_bits.h" |
haarkon | 0:f00e68bef80c | 13 | |
haarkon | 6:88b4805d33e1 | 14 | #define BOUSSOLE_adress 0xC0 |
haarkon | 6:88b4805d33e1 | 15 | #define PIXY_adress 0x54 |
haarkon | 6:88b4805d33e1 | 16 | |
haarkon | 6:88b4805d33e1 | 17 | #define CC_BLOCSIZE 14 |
haarkon | 6:88b4805d33e1 | 18 | #define N_BLOCSIZE 12 |
haarkon | 6:88b4805d33e1 | 19 | |
haarkon | 6:88b4805d33e1 | 20 | #define N_BLOCCODE 0xAA55 |
haarkon | 6:88b4805d33e1 | 21 | #define CC_BLOCCODE 0xAA56 |
haarkon | 6:88b4805d33e1 | 22 | |
haarkon | 2:1d440e938c44 | 23 | |
haarkon | 6:88b4805d33e1 | 24 | // Comme la nucleo est Little Endian et que l'AS5047D est Big Endian, les codes sont inversés |
haarkon | 6:88b4805d33e1 | 25 | // Registre Valeur (BE) Valeur (LE) |
haarkon | 6:88b4805d33e1 | 26 | // NOP 0xC000 0x0003 |
haarkon | 6:88b4805d33e1 | 27 | // ANGLE 0xFFFF 0xFFFF |
haarkon | 6:88b4805d33e1 | 28 | // ERROR 0x4001 0x8002 |
haarkon | 6:88b4805d33e1 | 29 | // SETTING1 (R) 0xC018 0x1803 |
haarkon | 6:88b4805d33e1 | 30 | // SETTING2 (R) 0x4019 0x8902 |
haarkon | 6:88b4805d33e1 | 31 | // SETTING1 (W) 0x0018 0x1800 |
haarkon | 6:88b4805d33e1 | 32 | // SETTING2 (W) 0x8019 0x9801 |
haarkon | 2:1d440e938c44 | 33 | |
haarkon | 6:88b4805d33e1 | 34 | #define SPI_READ_NOP 0x0003 |
haarkon | 6:88b4805d33e1 | 35 | #define SPI_READ_ANGLE 0xFFFF |
haarkon | 6:88b4805d33e1 | 36 | #define SPI_READ_ERROR 0x8002 |
haarkon | 6:88b4805d33e1 | 37 | #define SPI_READ_SETTINGS1 0x1803 |
haarkon | 6:88b4805d33e1 | 38 | #define SPI_READ_SETTINGS2 0x8902 |
haarkon | 6:88b4805d33e1 | 39 | #define SPI_WRTIE_SETTINGS1 0x1800 |
haarkon | 6:88b4805d33e1 | 40 | #define SPI_WRITE_SETTINGS2 0x9801 |
haarkon | 0:f00e68bef80c | 41 | |
haarkon | 0:f00e68bef80c | 42 | typedef unsigned char Byte; |
haarkon | 0:f00e68bef80c | 43 | typedef unsigned short Word; |
haarkon | 0:f00e68bef80c | 44 | typedef unsigned long lWord; |
haarkon | 0:f00e68bef80c | 45 | |
haarkon | 0:f00e68bef80c | 46 | typedef enum {S_monte = 1, S_descente = 0} T_SERVODIR; |
haarkon | 0:f00e68bef80c | 47 | |
haarkon | 2:1d440e938c44 | 48 | typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState; |
haarkon | 2:1d440e938c44 | 49 | |
haarkon | 0:f00e68bef80c | 50 | typedef union { |
haarkon | 2:1d440e938c44 | 51 | lWord mot; |
haarkon | 0:f00e68bef80c | 52 | Byte tab[4]; |
haarkon | 2:1d440e938c44 | 53 | } T_tmpBuffer; |
haarkon | 2:1d440e938c44 | 54 | |
haarkon | 2:1d440e938c44 | 55 | typedef union { |
haarkon | 2:1d440e938c44 | 56 | Word mot; |
haarkon | 2:1d440e938c44 | 57 | Byte tab[2]; |
haarkon | 2:1d440e938c44 | 58 | } T_structBuffer; |
haarkon | 0:f00e68bef80c | 59 | |
haarkon | 0:f00e68bef80c | 60 | typedef struct { |
haarkon | 0:f00e68bef80c | 61 | Word checksum; |
haarkon | 0:f00e68bef80c | 62 | Word signature; |
haarkon | 0:f00e68bef80c | 63 | Word x; |
haarkon | 0:f00e68bef80c | 64 | Word y; |
haarkon | 0:f00e68bef80c | 65 | Word width; |
haarkon | 0:f00e68bef80c | 66 | Word height; |
haarkon | 2:1d440e938c44 | 67 | Word angle; |
haarkon | 0:f00e68bef80c | 68 | } T_pixyCCBloc; |
haarkon | 0:f00e68bef80c | 69 | |
haarkon | 2:1d440e938c44 | 70 | typedef struct { |
haarkon | 2:1d440e938c44 | 71 | Word checksum; |
haarkon | 2:1d440e938c44 | 72 | Word signature; |
haarkon | 2:1d440e938c44 | 73 | Word x; |
haarkon | 2:1d440e938c44 | 74 | Word y; |
haarkon | 2:1d440e938c44 | 75 | Word width; |
haarkon | 2:1d440e938c44 | 76 | Word height; |
haarkon | 3:3dfe26a10796 | 77 | } T_pixyNMBloc; |
haarkon | 0:f00e68bef80c | 78 | |
haarkon | 0:f00e68bef80c | 79 | typedef union { |
haarkon | 0:f00e68bef80c | 80 | Byte tab[14]; |
haarkon | 0:f00e68bef80c | 81 | T_pixyCCBloc CCbloc; |
haarkon | 2:1d440e938c44 | 82 | } T_pixyCCData; |
haarkon | 2:1d440e938c44 | 83 | |
haarkon | 2:1d440e938c44 | 84 | typedef union { |
haarkon | 2:1d440e938c44 | 85 | Byte tab[12]; |
haarkon | 3:3dfe26a10796 | 86 | T_pixyNMBloc NMbloc; |
haarkon | 3:3dfe26a10796 | 87 | } T_pixyNMData; |
haarkon | 0:f00e68bef80c | 88 | |
haarkon | 0:f00e68bef80c | 89 | |
haarkon | 2:1d440e938c44 | 90 | |
haarkon | 0:f00e68bef80c | 91 | /** Liste des objets |
haarkon | 0:f00e68bef80c | 92 | * |
haarkon | 0:f00e68bef80c | 93 | * Serial #4 Pixy |
haarkon | 0:f00e68bef80c | 94 | * Serial #2 Pc |
haarkon | 0:f00e68bef80c | 95 | * |
haarkon | 0:f00e68bef80c | 96 | * AnalogIn C1, C2, C3, LD1, LD2, SD1, SD2, Vbat |
haarkon | 0:f00e68bef80c | 97 | * |
haarkon | 0:f00e68bef80c | 98 | * DigitalOut Led1, Led2, Trig1, Trig2, Trig3, En, SensG, SensD |
haarkon | 0:f00e68bef80c | 99 | * |
haarkon | 0:f00e68bef80c | 100 | * InterruptIn IndexG, IndexD, Echo1, Echo2, Echo3, BP |
haarkon | 0:f00e68bef80c | 101 | * |
haarkon | 0:f00e68bef80c | 102 | * PwmOut Pwm_MG, Pwm_MD, Servo |
haarkon | 0:f00e68bef80c | 103 | * |
haarkon | 0:f00e68bef80c | 104 | * PwmIn PWMG, PWMD, PWMB |
haarkon | 0:f00e68bef80c | 105 | * |
haarkon | 0:f00e68bef80c | 106 | * I2C Bus_I2C |
haarkon | 0:f00e68bef80c | 107 | * |
haarkon | 0:f00e68bef80c | 108 | * SPI MotG, MotD |
haarkon | 0:f00e68bef80c | 109 | * |
haarkon | 0:f00e68bef80c | 110 | * Nucleo_Encoder_16_bits Gauche, Droite |
haarkon | 0:f00e68bef80c | 111 | * |
haarkon | 0:f00e68bef80c | 112 | * Ticker timer |
haarkon | 0:f00e68bef80c | 113 | */ |
haarkon | 0:f00e68bef80c | 114 | |
haarkon | 0:f00e68bef80c | 115 | /** Liste des PINs |
haarkon | 0:f00e68bef80c | 116 | * |
haarkon | 0:f00e68bef80c | 117 | * PIN MAP (ordre alphabetique) des PINs de la Nucléo 64 utilisée |
haarkon | 0:f00e68bef80c | 118 | * PA_0 -> Pixy RX (Serial) |
haarkon | 0:f00e68bef80c | 119 | * PA_1 -> Pixy TX (Serial) |
haarkon | 0:f00e68bef80c | 120 | * PA_2 -> PC TX (Serial) |
haarkon | 0:f00e68bef80c | 121 | * PA_3 -> PX RX (Serial) |
haarkon | 0:f00e68bef80c | 122 | * PA_4 -> GP2 SD #2 (Analog In) |
haarkon | 0:f00e68bef80c | 123 | * PA_5 -> LED1 (Digital Out) |
haarkon | 0:f00e68bef80c | 124 | * PA_6 -> CNY3 (Analog In) |
haarkon | 0:f00e68bef80c | 125 | * PA_7 -> CNY2 (Analog In) |
haarkon | 0:f00e68bef80c | 126 | * PA_8 -> Servomoteur (PWM Out) |
haarkon | 0:f00e68bef80c | 127 | * PA_9 -> US Trigger #3 (Digital Out) |
haarkon | 1:d95546f84105 | 128 | * PA_10 -> US Echo #1 (Pwm In) |
haarkon | 0:f00e68bef80c | 129 | * PA_11 -> US Echo #2 (Pwm In) |
haarkon | 1:d95546f84105 | 130 | * PA_12 -> SS (SPI Slave Select) (Digital Out) |
haarkon | 0:f00e68bef80c | 131 | * PA_13 |
haarkon | 0:f00e68bef80c | 132 | * PA_14 |
haarkon | 0:f00e68bef80c | 133 | * PA_15 -> Boussole (Pwm In) |
haarkon | 0:f00e68bef80c | 134 | * |
haarkon | 0:f00e68bef80c | 135 | * PB_0 -> GP2 SD #1 (Analog In) |
haarkon | 0:f00e68bef80c | 136 | * PB_1 -> Position D (Pwm In) |
haarkon | 0:f00e68bef80c | 137 | * PB_2 -> Position G (Pwm In) |
haarkon | 0:f00e68bef80c | 138 | * PB_3 -> PWM Mot D (PWM Out) |
haarkon | 0:f00e68bef80c | 139 | * PB_4 -> Enocdeur Droit A (QE) |
haarkon | 0:f00e68bef80c | 140 | * PB_5 -> Enocdeur Droit B (QE) |
haarkon | 0:f00e68bef80c | 141 | * PB_6 -> Enocdeur Gauche A (QE) |
haarkon | 0:f00e68bef80c | 142 | * PB_7 -> Enocdeur Gauche B (QE) |
haarkon | 0:f00e68bef80c | 143 | * PB_8 -> SCL (I2C) |
haarkon | 0:f00e68bef80c | 144 | * PB_9 -> SDA (I2C) |
haarkon | 0:f00e68bef80c | 145 | * PB_10 -> PWM Mot G (PWM Out) |
haarkon | 0:f00e68bef80c | 146 | * PB_11 |
haarkon | 0:f00e68bef80c | 147 | * PB_12 -> US Echo #3 (Pwm In) |
haarkon | 0:f00e68bef80c | 148 | * PB_13 -> SCK Encodeur D (SPI) |
haarkon | 0:f00e68bef80c | 149 | * PB_14 -> MISO Encodeur D (SPI) |
haarkon | 0:f00e68bef80c | 150 | * PB_15 -> MOSI Encodeur D (SPI) |
haarkon | 0:f00e68bef80c | 151 | * |
haarkon | 0:f00e68bef80c | 152 | * PC_0 -> GP2 LD #1 (Analog In) |
haarkon | 0:f00e68bef80c | 153 | * PC_1 -> GP2 LD #2 (Analog In) |
haarkon | 0:f00e68bef80c | 154 | * PC_2 -> US Trigger #2 (Digital Out) |
haarkon | 0:f00e68bef80c | 155 | * PC_3 -> US Trigger #1 (Digital Out) |
haarkon | 0:f00e68bef80c | 156 | * PC_4 -> CNY1 (Analog In) |
haarkon | 0:f00e68bef80c | 157 | * PC_5 -> Vbat (Analog In) |
haarkon | 0:f00e68bef80c | 158 | * PC_6 -> Dir Mot Droit (Digital Out) |
haarkon | 0:f00e68bef80c | 159 | * PC_7 -> I (Encodeur Gauche) (IRQ In) |
haarkon | 0:f00e68bef80c | 160 | * PC_8 -> Dir Mot Gauche (Digital Out) |
haarkon | 0:f00e68bef80c | 161 | * PC_9 -> Enable Moteurs (Digital Out) |
haarkon | 0:f00e68bef80c | 162 | * PC_10 -> SCK Encodeur G (SPI) |
haarkon | 0:f00e68bef80c | 163 | * PC_11 -> MISO Encodeur G (SPI) |
haarkon | 0:f00e68bef80c | 164 | * PC_12 -> MOSI Encodeur G (SPI) |
haarkon | 0:f00e68bef80c | 165 | * PC_13 -> User BP (IRQ In) |
haarkon | 0:f00e68bef80c | 166 | * PC_14 |
haarkon | 0:f00e68bef80c | 167 | * PC_15 |
haarkon | 0:f00e68bef80c | 168 | * |
haarkon | 0:f00e68bef80c | 169 | * PD_1 |
haarkon | 0:f00e68bef80c | 170 | * PD_2 -> Led2 (Digital Out) |
haarkon | 0:f00e68bef80c | 171 | */ |
haarkon | 0:f00e68bef80c | 172 | |
haarkon | 1:d95546f84105 | 173 | Serial Pixy (PA_0, PA_1, 230400); |
haarkon | 5:4955cb4b3646 | 174 | Serial Pc (PA_2, PA_3, 921600); |
haarkon | 0:f00e68bef80c | 175 | |
haarkon | 0:f00e68bef80c | 176 | AnalogIn CNY1 (PC_4); |
haarkon | 0:f00e68bef80c | 177 | AnalogIn CNY2 (PA_7); |
haarkon | 0:f00e68bef80c | 178 | AnalogIn CNY3 (PA_6); |
haarkon | 0:f00e68bef80c | 179 | AnalogIn LD1 (PC_0); |
haarkon | 0:f00e68bef80c | 180 | AnalogIn LD2 (PC_1); |
haarkon | 0:f00e68bef80c | 181 | AnalogIn SD1 (PB_0); |
haarkon | 0:f00e68bef80c | 182 | AnalogIn SD2 (PA_4); |
haarkon | 0:f00e68bef80c | 183 | AnalogIn Vbat (PC_5); |
haarkon | 0:f00e68bef80c | 184 | |
haarkon | 0:f00e68bef80c | 185 | DigitalOut Led1 (PA_5); |
haarkon | 0:f00e68bef80c | 186 | DigitalOut Led2 (PD_2); |
haarkon | 0:f00e68bef80c | 187 | DigitalOut Trig1 (PC_3); |
haarkon | 0:f00e68bef80c | 188 | DigitalOut Trig2 (PC_2); |
haarkon | 0:f00e68bef80c | 189 | DigitalOut Trig3 (PA_9); |
haarkon | 0:f00e68bef80c | 190 | DigitalOut En (PC_9); |
haarkon | 0:f00e68bef80c | 191 | DigitalOut SensG (PC_8); |
haarkon | 0:f00e68bef80c | 192 | DigitalOut SensD (PC_6); |
haarkon | 1:d95546f84105 | 193 | DigitalOut SS (PA_12); |
haarkon | 0:f00e68bef80c | 194 | |
haarkon | 1:d95546f84105 | 195 | InterruptIn Echo1 (PA_10); |
haarkon | 0:f00e68bef80c | 196 | InterruptIn Echo2 (PA_11); |
haarkon | 0:f00e68bef80c | 197 | InterruptIn Echo3 (PB_12); |
haarkon | 0:f00e68bef80c | 198 | InterruptIn BP (PC_13); |
haarkon | 0:f00e68bef80c | 199 | InterruptIn IG (PC_7); |
haarkon | 6:88b4805d33e1 | 200 | InterruptIn PWMG (PB_2); |
haarkon | 6:88b4805d33e1 | 201 | InterruptIn PWMD (PB_1); |
haarkon | 1:d95546f84105 | 202 | |
haarkon | 1:d95546f84105 | 203 | PwmIn PWMB (PA_15); |
haarkon | 0:f00e68bef80c | 204 | |
haarkon | 0:f00e68bef80c | 205 | PwmOut Pwm_MG (PB_10); |
haarkon | 0:f00e68bef80c | 206 | PwmOut Pwm_MD (PB_3); |
haarkon | 0:f00e68bef80c | 207 | PwmOut Servo (PA_8); |
haarkon | 0:f00e68bef80c | 208 | |
haarkon | 0:f00e68bef80c | 209 | I2C Bus_I2C (PB_9, PB_8); |
haarkon | 0:f00e68bef80c | 210 | |
haarkon | 6:88b4805d33e1 | 211 | SPI SPIG (PC_12, PC_11, PC_10); |
haarkon | 6:88b4805d33e1 | 212 | SPI SPID (PB_15, PB_14, PB_13); |
haarkon | 0:f00e68bef80c | 213 | |
haarkon | 0:f00e68bef80c | 214 | Nucleo_Encoder_16_bits Gauche (TIM4); // A = PB_6, B = PB_7 |
haarkon | 0:f00e68bef80c | 215 | Nucleo_Encoder_16_bits Droite (TIM3); // A = PB_4, B = PB_5 |
haarkon | 0:f00e68bef80c | 216 | |
haarkon | 2:1d440e938c44 | 217 | Ticker tick; |
haarkon | 2:1d440e938c44 | 218 | Timer times; |
haarkon | 0:f00e68bef80c | 219 | |
haarkon | 0:f00e68bef80c | 220 | /** Liste des variables globales |
haarkon | 0:f00e68bef80c | 221 | * |
haarkon | 0:f00e68bef80c | 222 | * Tick -> (long) Compte le nombre de MS écoulé et déclenche l'exécution de la boucle en fonction du temps écoulé. |
haarkon | 0:f00e68bef80c | 223 | * FlagIG -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue gauche |
haarkon | 0:f00e68bef80c | 224 | * FlagID -> (int) Indication de la présence de fronts sur l'index de l'encodeur de la roue droite |
haarkon | 0:f00e68bef80c | 225 | * EchoXStart -> (long) Donne le temps en µs de début de l'impulsion d'écho de l'US n°X |
haarkon | 0:f00e68bef80c | 226 | * DistUSX -> (float) Donne la distance en mm mesurée par l'US n°X |
haarkon | 0:f00e68bef80c | 227 | */ |
haarkon | 0:f00e68bef80c | 228 | |
haarkon | 0:f00e68bef80c | 229 | // Structure de temps |
haarkon | 6:88b4805d33e1 | 230 | lWord Tick = 0, Gperiod, Dperiod; |
haarkon | 0:f00e68bef80c | 231 | |
haarkon | 0:f00e68bef80c | 232 | // Sémaphore d'interruption |
haarkon | 3:3dfe26a10796 | 233 | int FlagUS1 = 0, FlagUS2 = 0, FlagUS3 = 0, FlagPixy = 0, FlagPixyOverflow = 0; |
haarkon | 6:88b4805d33e1 | 234 | int FlagTick = 0, FlagTickLed = 0, BPPressed = 0, nbTurnG = 0, nbTurnD = 0; |
haarkon | 3:3dfe26a10796 | 235 | int Pixy_check = -1; |
illan | 8:527f5db9b3dc | 236 | char BOUSSOLE_status[1] = {0}; |
illan | 8:527f5db9b3dc | 237 | char I2C_registerValue[4]; |
illan | 8:527f5db9b3dc | 238 | |
haarkon | 0:f00e68bef80c | 239 | // Dialogue avec la Pixy |
haarkon | 3:3dfe26a10796 | 240 | T_pixyCCData Pixy_CCFIFO[20]; |
haarkon | 3:3dfe26a10796 | 241 | T_pixyNMData Pixy_NMFIFO[20]; |
haarkon | 3:3dfe26a10796 | 242 | Byte Pixy_CCObjet, Pixy_NMObjet; |
haarkon | 0:f00e68bef80c | 243 | |
haarkon | 0:f00e68bef80c | 244 | // Gestion des capteurs Ultrason |
haarkon | 3:3dfe26a10796 | 245 | long Echo1Start, Echo2Start, Echo3Start; |
haarkon | 3:3dfe26a10796 | 246 | double DistUS1, DistUS2, DistUS3; |
illan | 8:527f5db9b3dc | 247 | int I2C_check = -1, BOUSSOLE_check = -1 /*, SPI2_check = -1, SPI3_check = -1, MOTG_check = -1, MOTD_check = -1*/; |
illan | 8:527f5db9b3dc | 248 | int SERVO_pulseWidth = 400, SERVO_max = 1400, SERVO_min = 400; |
illan | 8:527f5db9b3dc | 249 | T_SERVODIR SERVO_dir = S_monte; |
illan | 8:527f5db9b3dc | 250 | double MOTG_duty = 0.5, MOTD_duty = 0.5; |
illan | 8:527f5db9b3dc | 251 | double CAP_I2C, CAP_PWM; |
haarkon | 0:f00e68bef80c | 252 | |
haarkon | 0:f00e68bef80c | 253 | /** Liste des interruptions |
haarkon | 0:f00e68bef80c | 254 | * |
haarkon | 0:f00e68bef80c | 255 | */ |
illan | 8:527f5db9b3dc | 256 | |
illan | 8:527f5db9b3dc | 257 | void capteur_ultrason(void); |
illan | 8:527f5db9b3dc | 258 | void boussole(void); |
illan | 8:527f5db9b3dc | 259 | void capteur_infrarouge(void); |
illan | 8:527f5db9b3dc | 260 | void CNY(void); |
illan | 8:527f5db9b3dc | 261 | void servomoteur(void); |
illan | 8:527f5db9b3dc | 262 | void avancer(void); |
illan | 8:527f5db9b3dc | 263 | void tour_droit(void); |
illan | 8:527f5db9b3dc | 264 | void tour_gauche(void); |
haarkon | 0:f00e68bef80c | 265 | |
haarkon | 0:f00e68bef80c | 266 | void tickTime() |
haarkon | 0:f00e68bef80c | 267 | { |
haarkon | 0:f00e68bef80c | 268 | Tick++; |
haarkon | 0:f00e68bef80c | 269 | FlagTick = 1; |
haarkon | 0:f00e68bef80c | 270 | if ((Tick%100)==0) FlagTickLed = 1; |
haarkon | 0:f00e68bef80c | 271 | } |
haarkon | 0:f00e68bef80c | 272 | |
haarkon | 0:f00e68bef80c | 273 | void BPevent () |
haarkon | 0:f00e68bef80c | 274 | { |
haarkon | 0:f00e68bef80c | 275 | BPPressed = 1; |
haarkon | 0:f00e68bef80c | 276 | } |
haarkon | 0:f00e68bef80c | 277 | |
haarkon | 6:88b4805d33e1 | 278 | void PWM_motGRise (void) |
haarkon | 6:88b4805d33e1 | 279 | { |
haarkon | 6:88b4805d33e1 | 280 | static lWord oldTime; |
haarkon | 6:88b4805d33e1 | 281 | lWord now; |
haarkon | 6:88b4805d33e1 | 282 | now = times.read_us(); |
haarkon | 6:88b4805d33e1 | 283 | Gperiod = now-oldTime; |
haarkon | 6:88b4805d33e1 | 284 | oldTime = now; |
haarkon | 6:88b4805d33e1 | 285 | nbTurnG++; |
haarkon | 6:88b4805d33e1 | 286 | } |
haarkon | 6:88b4805d33e1 | 287 | |
haarkon | 6:88b4805d33e1 | 288 | void PWM_motDRise (void) |
haarkon | 6:88b4805d33e1 | 289 | { |
haarkon | 6:88b4805d33e1 | 290 | static lWord oldTime; |
haarkon | 6:88b4805d33e1 | 291 | lWord now; |
haarkon | 6:88b4805d33e1 | 292 | now = times.read_us(); |
haarkon | 6:88b4805d33e1 | 293 | Dperiod = now-oldTime; |
haarkon | 6:88b4805d33e1 | 294 | oldTime = now; |
haarkon | 6:88b4805d33e1 | 295 | nbTurnD++; |
haarkon | 6:88b4805d33e1 | 296 | } |
haarkon | 6:88b4805d33e1 | 297 | |
haarkon | 0:f00e68bef80c | 298 | void echo1Rise () |
haarkon | 0:f00e68bef80c | 299 | { |
haarkon | 2:1d440e938c44 | 300 | Echo1Start = times.read_us(); |
haarkon | 0:f00e68bef80c | 301 | } |
haarkon | 0:f00e68bef80c | 302 | |
haarkon | 0:f00e68bef80c | 303 | void echo2Rise () |
haarkon | 0:f00e68bef80c | 304 | { |
haarkon | 2:1d440e938c44 | 305 | Echo2Start = times.read_us(); |
haarkon | 0:f00e68bef80c | 306 | } |
haarkon | 0:f00e68bef80c | 307 | |
haarkon | 0:f00e68bef80c | 308 | void echo3Rise () |
haarkon | 0:f00e68bef80c | 309 | { |
haarkon | 2:1d440e938c44 | 310 | Echo3Start = times.read_us(); |
haarkon | 0:f00e68bef80c | 311 | } |
haarkon | 0:f00e68bef80c | 312 | |
haarkon | 0:f00e68bef80c | 313 | void echo1Fall () |
haarkon | 0:f00e68bef80c | 314 | { |
haarkon | 2:1d440e938c44 | 315 | DistUS1 = (double)(times.read_us() - Echo1Start)/5.8; |
haarkon | 0:f00e68bef80c | 316 | FlagUS1 = 1; |
haarkon | 0:f00e68bef80c | 317 | } |
haarkon | 0:f00e68bef80c | 318 | |
haarkon | 0:f00e68bef80c | 319 | void echo2Fall () |
haarkon | 0:f00e68bef80c | 320 | { |
haarkon | 2:1d440e938c44 | 321 | DistUS2 = (double)(times.read_us() - Echo2Start)/5.8; |
haarkon | 0:f00e68bef80c | 322 | FlagUS2 = 1; |
haarkon | 0:f00e68bef80c | 323 | } |
haarkon | 0:f00e68bef80c | 324 | |
haarkon | 0:f00e68bef80c | 325 | void echo3Fall () |
haarkon | 0:f00e68bef80c | 326 | { |
haarkon | 2:1d440e938c44 | 327 | DistUS3 = (double)(times.read_us() - Echo3Start)/5.8; |
haarkon | 0:f00e68bef80c | 328 | FlagUS3 = 1; |
haarkon | 0:f00e68bef80c | 329 | } |
haarkon | 0:f00e68bef80c | 330 | |
haarkon | 0:f00e68bef80c | 331 | void getPixyByte () |
haarkon | 0:f00e68bef80c | 332 | { |
haarkon | 2:1d440e938c44 | 333 | static T_tmpBuffer tmpBuffer; |
haarkon | 2:1d440e938c44 | 334 | static T_structBuffer msgBuffer; |
haarkon | 3:3dfe26a10796 | 335 | static T_pixyState PIXY_state = none; |
haarkon | 2:1d440e938c44 | 336 | static Byte byteCount = 0; |
haarkon | 3:3dfe26a10796 | 337 | static int PIXY_synced = 0, dummy; |
haarkon | 2:1d440e938c44 | 338 | int i, somme; |
haarkon | 3:3dfe26a10796 | 339 | static Byte PIXY_nbCCObjet = 0, PIXY_wCCObjet = 0; |
haarkon | 3:3dfe26a10796 | 340 | static Byte PIXY_nbNMObjet = 0, PIXY_wNMObjet = 0; |
haarkon | 0:f00e68bef80c | 341 | |
haarkon | 2:1d440e938c44 | 342 | Pixy_check = 0; |
haarkon | 0:f00e68bef80c | 343 | |
haarkon | 3:3dfe26a10796 | 344 | if (!PIXY_synced) { // On n'a pas trouvé le START (0x55aa0000) |
haarkon | 2:1d440e938c44 | 345 | tmpBuffer.tab[byteCount] = Pixy.getc(); // On stocke l'octet reçu dans la première case dispo du tableau temporaire |
haarkon | 2:1d440e938c44 | 346 | |
haarkon | 2:1d440e938c44 | 347 | if (byteCount < 3) { // Si on n'a pas encore reçu les 4 premier octets |
haarkon | 2:1d440e938c44 | 348 | byteCount++; // On passe à la case suivante du tableau temporaire |
haarkon | 2:1d440e938c44 | 349 | } else { // Lorsqu'on a 4 octets |
haarkon | 2:1d440e938c44 | 350 | if (tmpBuffer.mot != 0xaa550000) { // Si le code n'est pas le code de START |
haarkon | 2:1d440e938c44 | 351 | for (i=1; i<4; i++) tmpBuffer.tab[i-1] = tmpBuffer.tab[i]; // On décalle les cases du tableau |
haarkon | 2:1d440e938c44 | 352 | byteCount = 3; // Et on attend le caractère suivant |
haarkon | 2:1d440e938c44 | 353 | } else { // Si on a trouvé le code de START |
haarkon | 3:3dfe26a10796 | 354 | PIXY_synced = 1; // On passe en mode synchronisé |
haarkon | 3:3dfe26a10796 | 355 | PIXY_state = begin; |
haarkon | 2:1d440e938c44 | 356 | byteCount = 0; |
haarkon | 0:f00e68bef80c | 357 | } |
haarkon | 0:f00e68bef80c | 358 | } |
haarkon | 2:1d440e938c44 | 359 | } |
haarkon | 2:1d440e938c44 | 360 | |
haarkon | 3:3dfe26a10796 | 361 | if (PIXY_synced) { |
haarkon | 2:1d440e938c44 | 362 | |
haarkon | 3:3dfe26a10796 | 363 | switch (PIXY_state) { |
haarkon | 2:1d440e938c44 | 364 | case begin : // l'aiguillage est là ! |
haarkon | 2:1d440e938c44 | 365 | |
haarkon | 2:1d440e938c44 | 366 | msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus |
haarkon | 2:1d440e938c44 | 367 | byteCount++; |
haarkon | 2:1d440e938c44 | 368 | if (byteCount == 2) { // Quand on a 2 octets |
haarkon | 2:1d440e938c44 | 369 | |
haarkon | 2:1d440e938c44 | 370 | if (msgBuffer.mot == 0xaa55) { // Si c'est un bloc normal (code 0xAA55) |
haarkon | 3:3dfe26a10796 | 371 | PIXY_state = normal; // On part vers le traitement spécifique |
haarkon | 2:1d440e938c44 | 372 | } |
haarkon | 2:1d440e938c44 | 373 | |
haarkon | 2:1d440e938c44 | 374 | if (msgBuffer.mot == 0xaa56) { // Si c'est un bloc Color Code (code 0xAA56) |
haarkon | 3:3dfe26a10796 | 375 | PIXY_state = colorCode; // On part vers le traitement spécifique |
haarkon | 2:1d440e938c44 | 376 | } |
haarkon | 2:1d440e938c44 | 377 | |
haarkon | 2:1d440e938c44 | 378 | if (msgBuffer.mot == 0) { // Si on a un debut de trame (code 0000) |
haarkon | 3:3dfe26a10796 | 379 | PIXY_state = doubleZero; // On part vers le traitement spécifique |
haarkon | 2:1d440e938c44 | 380 | } |
haarkon | 3:3dfe26a10796 | 381 | if ((PIXY_state == begin) || (PIXY_state == none)) { // Si c'est autre chose |
haarkon | 3:3dfe26a10796 | 382 | PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé. |
haarkon | 3:3dfe26a10796 | 383 | PIXY_state = none; // Ceinture et bretelle |
haarkon | 2:1d440e938c44 | 384 | } |
haarkon | 2:1d440e938c44 | 385 | byteCount = 0; |
haarkon | 2:1d440e938c44 | 386 | } |
haarkon | 2:1d440e938c44 | 387 | break; |
haarkon | 2:1d440e938c44 | 388 | |
haarkon | 2:1d440e938c44 | 389 | case normal : // Si on a un bloc normal |
haarkon | 2:1d440e938c44 | 390 | |
haarkon | 3:3dfe26a10796 | 391 | Pixy_NMFIFO[PIXY_wNMObjet].tab[byteCount] = Pixy.getc(); // On stocke les octets un à un dans la structure Bloc |
haarkon | 2:1d440e938c44 | 392 | if (byteCount < 11) { // Tant que la structure n'est pas pleine |
haarkon | 2:1d440e938c44 | 393 | byteCount++; // On passe à l'octet suivant |
haarkon | 2:1d440e938c44 | 394 | } else { // Quand elle est pleine |
haarkon | 2:1d440e938c44 | 395 | byteCount = 0; // On réinitialise |
haarkon | 3:3dfe26a10796 | 396 | PIXY_state = begin; // On retourne à l'aiguillage |
haarkon | 2:1d440e938c44 | 397 | // On calcule la somme de contrôle |
haarkon | 3:3dfe26a10796 | 398 | 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; |
haarkon | 2:1d440e938c44 | 399 | |
haarkon | 3:3dfe26a10796 | 400 | if (somme == Pixy_NMFIFO[PIXY_wNMObjet].NMbloc.checksum) { // Si le checksum est bon, on valide la réception |
haarkon | 3:3dfe26a10796 | 401 | if (PIXY_wNMObjet < 19) PIXY_wNMObjet++; // On incrémente le pointeur d'écriture dans la FIFO Objet |
haarkon | 3:3dfe26a10796 | 402 | else PIXY_wNMObjet = 0; |
haarkon | 3:3dfe26a10796 | 403 | if (PIXY_nbNMObjet < 19) PIXY_nbNMObjet++; // On dit que l'on a un objet CC de plus |
haarkon | 2:1d440e938c44 | 404 | else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow |
haarkon | 2:1d440e938c44 | 405 | } |
haarkon | 2:1d440e938c44 | 406 | } |
haarkon | 2:1d440e938c44 | 407 | break; |
haarkon | 2:1d440e938c44 | 408 | |
haarkon | 2:1d440e938c44 | 409 | case colorCode : // Si on a un bloc colorCode |
haarkon | 2:1d440e938c44 | 410 | |
haarkon | 3:3dfe26a10796 | 411 | Pixy_CCFIFO[PIXY_wCCObjet].tab[byteCount] = dummy; // On stocke les octets un à un dans la structure CCBloc |
haarkon | 2:1d440e938c44 | 412 | if (byteCount < 13) byteCount++; // tant que la structure n'est pas pleine on passe à l'octet suivant |
haarkon | 2:1d440e938c44 | 413 | else { // Quand elle est pleine |
haarkon | 2:1d440e938c44 | 414 | byteCount = 0; // On réinitialise |
haarkon | 3:3dfe26a10796 | 415 | PIXY_state = begin; // On retourne à l'aiguillage |
haarkon | 2:1d440e938c44 | 416 | // On calcule la somme de contrôle |
haarkon | 3:3dfe26a10796 | 417 | 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; |
haarkon | 2:1d440e938c44 | 418 | |
haarkon | 3:3dfe26a10796 | 419 | if (somme == Pixy_CCFIFO[PIXY_wCCObjet].CCbloc.checksum) { // Si le checksum est bon |
haarkon | 3:3dfe26a10796 | 420 | if (PIXY_wCCObjet < 19) PIXY_wCCObjet++; // On incrémente le pointeur d'écriture dans la FIFO CCObjet |
haarkon | 3:3dfe26a10796 | 421 | else PIXY_wCCObjet = 0; |
haarkon | 3:3dfe26a10796 | 422 | if (PIXY_nbCCObjet < 19) PIXY_nbCCObjet++; // On dit que l'on a un objet CC de plus à traiter |
haarkon | 2:1d440e938c44 | 423 | else FlagPixyOverflow = 1; // Si on a plus de 20 CC objets (en attente) => Overflow |
haarkon | 2:1d440e938c44 | 424 | } |
haarkon | 2:1d440e938c44 | 425 | } |
haarkon | 2:1d440e938c44 | 426 | break; |
haarkon | 2:1d440e938c44 | 427 | |
haarkon | 2:1d440e938c44 | 428 | case doubleZero : // Si on a reçu le code de début d'une nouvelle trame. |
haarkon | 2:1d440e938c44 | 429 | |
haarkon | 2:1d440e938c44 | 430 | msgBuffer.tab[byteCount%2] = Pixy.getc(); // on stocke les octets reçus |
haarkon | 2:1d440e938c44 | 431 | byteCount++; |
haarkon | 2:1d440e938c44 | 432 | if (byteCount == 2) { // Quand on a 2 octets |
haarkon | 2:1d440e938c44 | 433 | if (msgBuffer.mot == 0xaa55) { // On doit impérativement trouver le code 0xAA55 |
haarkon | 3:3dfe26a10796 | 434 | PIXY_state = begin; // Si c'est le cas, alors tout va bien et on va à l'aiguillage |
haarkon | 3:3dfe26a10796 | 435 | Pixy_NMObjet = PIXY_nbNMObjet; // On met à jour les variables pour le traitement |
haarkon | 3:3dfe26a10796 | 436 | Pixy_CCObjet = PIXY_nbCCObjet; |
haarkon | 3:3dfe26a10796 | 437 | PIXY_nbCCObjet = 0; |
haarkon | 3:3dfe26a10796 | 438 | PIXY_nbNMObjet = 0; |
haarkon | 3:3dfe26a10796 | 439 | FlagPixy = 1; // On valide le traitement de la trame précédente. |
haarkon | 2:1d440e938c44 | 440 | } else { // Si on trouve autre chose |
haarkon | 3:3dfe26a10796 | 441 | PIXY_synced = 0; // C'est qu'on est perdu donc plus synchronisé. |
haarkon | 3:3dfe26a10796 | 442 | PIXY_state = none; // Ceinture et bretelle |
haarkon | 2:1d440e938c44 | 443 | } |
haarkon | 2:1d440e938c44 | 444 | byteCount = 0; |
haarkon | 2:1d440e938c44 | 445 | } |
haarkon | 2:1d440e938c44 | 446 | break; |
haarkon | 0:f00e68bef80c | 447 | } |
haarkon | 0:f00e68bef80c | 448 | } |
haarkon | 0:f00e68bef80c | 449 | } |
haarkon | 0:f00e68bef80c | 450 | |
haarkon | 2:1d440e938c44 | 451 | |
haarkon | 0:f00e68bef80c | 452 | int main() |
haarkon | 0:f00e68bef80c | 453 | { |
haarkon | 0:f00e68bef80c | 454 | |
illan | 8:527f5db9b3dc | 455 | int i = 0, val_H_balle = 0, val_W_balle=0, max_val_W_balle = 0, indice_balle = 0, val_carre_balle=0, val_x_balle=0; |
haarkon | 5:4955cb4b3646 | 456 | |
haarkon | 3:3dfe26a10796 | 457 | Byte PIXY_rCCObjet = 0, PIXY_rNMObjet = 0; |
haarkon | 2:1d440e938c44 | 458 | int PIXY_objet; |
haarkon | 0:f00e68bef80c | 459 | |
illan | 8:527f5db9b3dc | 460 | |
haarkon | 0:f00e68bef80c | 461 | |
haarkon | 0:f00e68bef80c | 462 | char MENU_choix = 0; |
haarkon | 0:f00e68bef80c | 463 | |
haarkon | 0:f00e68bef80c | 464 | |
illan | 8:527f5db9b3dc | 465 | double BOUSSOLE_periode; |
illan | 8:527f5db9b3dc | 466 | |
illan | 8:527f5db9b3dc | 467 | double Vbat_val; |
illan | 8:527f5db9b3dc | 468 | |
illan | 8:527f5db9b3dc | 469 | |
illan | 8:527f5db9b3dc | 470 | |
haarkon | 0:f00e68bef80c | 471 | |
haarkon | 6:88b4805d33e1 | 472 | int MOTG_evol = 1, MOTD_evol = 1; |
illan | 8:527f5db9b3dc | 473 | |
haarkon | 5:4955cb4b3646 | 474 | |
haarkon | 2:1d440e938c44 | 475 | times.reset(); |
haarkon | 2:1d440e938c44 | 476 | times.start(); |
haarkon | 0:f00e68bef80c | 477 | |
haarkon | 6:88b4805d33e1 | 478 | // Initialisation des interruptions |
haarkon | 2:1d440e938c44 | 479 | tick.attach(&tickTime, 0.001); |
haarkon | 0:f00e68bef80c | 480 | |
haarkon | 6:88b4805d33e1 | 481 | BP.rise (&BPevent); |
haarkon | 0:f00e68bef80c | 482 | |
haarkon | 6:88b4805d33e1 | 483 | Echo1.rise (&echo1Rise); |
haarkon | 6:88b4805d33e1 | 484 | Echo2.rise (&echo2Rise); |
haarkon | 6:88b4805d33e1 | 485 | Echo3.rise (&echo3Rise); |
haarkon | 6:88b4805d33e1 | 486 | Echo1.fall (&echo1Fall); |
haarkon | 6:88b4805d33e1 | 487 | Echo2.fall (&echo2Fall); |
haarkon | 6:88b4805d33e1 | 488 | Echo3.fall (&echo3Fall); |
haarkon | 6:88b4805d33e1 | 489 | |
haarkon | 6:88b4805d33e1 | 490 | PWMG.rise (&PWM_motGRise); |
haarkon | 6:88b4805d33e1 | 491 | PWMD.rise (&PWM_motDRise); |
haarkon | 6:88b4805d33e1 | 492 | |
haarkon | 6:88b4805d33e1 | 493 | Pixy.attach (&getPixyByte); |
haarkon | 0:f00e68bef80c | 494 | |
haarkon | 1:d95546f84105 | 495 | BP.enable_irq(); |
haarkon | 0:f00e68bef80c | 496 | IG.enable_irq(); |
haarkon | 0:f00e68bef80c | 497 | Echo1.enable_irq(); |
haarkon | 0:f00e68bef80c | 498 | Echo2.enable_irq(); |
haarkon | 0:f00e68bef80c | 499 | Echo3.enable_irq(); |
haarkon | 6:88b4805d33e1 | 500 | PWMG.enable_irq(); |
haarkon | 6:88b4805d33e1 | 501 | PWMD.enable_irq(); |
haarkon | 0:f00e68bef80c | 502 | |
haarkon | 6:88b4805d33e1 | 503 | // Initialisation des périphériques |
haarkon | 6:88b4805d33e1 | 504 | // Bus I2C |
haarkon | 6:88b4805d33e1 | 505 | Bus_I2C.frequency (100000); |
haarkon | 0:f00e68bef80c | 506 | |
haarkon | 6:88b4805d33e1 | 507 | // PWM des moteurs |
haarkon | 0:f00e68bef80c | 508 | Pwm_MG.period_us(50); |
haarkon | 0:f00e68bef80c | 509 | Pwm_MD.period_us(50); |
haarkon | 0:f00e68bef80c | 510 | En = 0; |
haarkon | 5:4955cb4b3646 | 511 | |
haarkon | 6:88b4805d33e1 | 512 | // Bus SPI |
haarkon | 6:88b4805d33e1 | 513 | SPIG.format (16,1); |
haarkon | 6:88b4805d33e1 | 514 | SPIG.frequency (1000000); |
haarkon | 6:88b4805d33e1 | 515 | |
haarkon | 6:88b4805d33e1 | 516 | SPID.format (16,1); |
haarkon | 6:88b4805d33e1 | 517 | SPID.frequency (1000000); |
haarkon | 6:88b4805d33e1 | 518 | |
haarkon | 6:88b4805d33e1 | 519 | SS = 1; |
haarkon | 6:88b4805d33e1 | 520 | |
haarkon | 6:88b4805d33e1 | 521 | // Led |
haarkon | 0:f00e68bef80c | 522 | Led2 = 0; |
haarkon | 0:f00e68bef80c | 523 | |
haarkon | 6:88b4805d33e1 | 524 | Servo.period_ms (20); |
haarkon | 6:88b4805d33e1 | 525 | Servo.pulsewidth_us(200); |
haarkon | 0:f00e68bef80c | 526 | |
haarkon | 0:f00e68bef80c | 527 | while(1) { |
haarkon | 0:f00e68bef80c | 528 | |
haarkon | 0:f00e68bef80c | 529 | do { |
haarkon | 0:f00e68bef80c | 530 | Led1 = 0; |
haarkon | 0:f00e68bef80c | 531 | Pc.printf ("\n\n\n\n\rProgramme de test\n\n\rEntrez le code du test a effectuer :\n\n"); |
haarkon | 0:f00e68bef80c | 532 | Pc.printf ("\r1- Capteurs Ultra Son (les 3)\n"); |
haarkon | 0:f00e68bef80c | 533 | Pc.printf ("\r2- Boussole et I2C\n"); |
haarkon | 0:f00e68bef80c | 534 | Pc.printf ("\r3- Capteurs GP2 (les 4)\n"); |
haarkon | 0:f00e68bef80c | 535 | Pc.printf ("\r4- Capteurs CNY70 (les 3)\n"); |
haarkon | 6:88b4805d33e1 | 536 | Pc.printf ("\r5- VBAT \t! erreur de composant la mesure est fausse !\n"); |
haarkon | 6:88b4805d33e1 | 537 | Pc.printf ("\r6- Moteur Gauche\n"); |
haarkon | 6:88b4805d33e1 | 538 | Pc.printf ("\r7- Moteur Droit\n"); |
haarkon | 0:f00e68bef80c | 539 | Pc.printf ("\r8- Servomoteur\n"); |
haarkon | 6:88b4805d33e1 | 540 | Pc.printf ("\r9- PIXY (CMUCAM5)\n"); |
haarkon | 0:f00e68bef80c | 541 | MENU_choix = Pc.getc (); |
haarkon | 0:f00e68bef80c | 542 | } while (((MENU_choix-'0')<1) || ((MENU_choix-'0')>9)); |
haarkon | 0:f00e68bef80c | 543 | |
haarkon | 0:f00e68bef80c | 544 | switch (MENU_choix-'0') { |
haarkon | 0:f00e68bef80c | 545 | |
haarkon | 0:f00e68bef80c | 546 | case 1 : |
haarkon | 0:f00e68bef80c | 547 | Pc.printf ("\n\n\rTest des captreurs Ultrason\n"); |
haarkon | 0:f00e68bef80c | 548 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
illan | 8:527f5db9b3dc | 549 | do |
illan | 8:527f5db9b3dc | 550 | { |
illan | 8:527f5db9b3dc | 551 | capteur_ultrason(); |
illan | 8:527f5db9b3dc | 552 | } |
illan | 8:527f5db9b3dc | 553 | while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 554 | MENU_choix = Pc.getc(); |
haarkon | 0:f00e68bef80c | 555 | break; |
haarkon | 0:f00e68bef80c | 556 | |
haarkon | 0:f00e68bef80c | 557 | case 2 : |
haarkon | 0:f00e68bef80c | 558 | Pc.printf ("\n\n\rBoussole\n"); |
haarkon | 0:f00e68bef80c | 559 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 0:f00e68bef80c | 560 | |
haarkon | 0:f00e68bef80c | 561 | Pc.printf ("\n\rVerif du bus I2C :"); |
haarkon | 0:f00e68bef80c | 562 | I2C_check = Bus_I2C.write (BOUSSOLE_adress,BOUSSOLE_status,1,false); |
haarkon | 0:f00e68bef80c | 563 | if (I2C_check==0) { |
haarkon | 0:f00e68bef80c | 564 | Pc.printf (" OK\n"); |
haarkon | 0:f00e68bef80c | 565 | Bus_I2C.write(BOUSSOLE_adress,BOUSSOLE_status, 1, true); |
haarkon | 0:f00e68bef80c | 566 | Bus_I2C.read (BOUSSOLE_adress,I2C_registerValue,4); |
haarkon | 0:f00e68bef80c | 567 | Pc.printf ("\rVersion Firmware boussole : %03d\n", I2C_registerValue[0]); |
haarkon | 0:f00e68bef80c | 568 | } else { |
haarkon | 0:f00e68bef80c | 569 | Pc.printf (" FAIL\n"); |
haarkon | 0:f00e68bef80c | 570 | } |
haarkon | 0:f00e68bef80c | 571 | |
haarkon | 3:3dfe26a10796 | 572 | BOUSSOLE_periode = PWMB.period(); |
haarkon | 0:f00e68bef80c | 573 | Pc.printf ("\rVerif de la PWM :"); |
haarkon | 3:3dfe26a10796 | 574 | if ((BOUSSOLE_periode > 0.11) || (BOUSSOLE_periode < 0.06)) { |
haarkon | 0:f00e68bef80c | 575 | Pc.printf (" FAIL\n\n"); |
haarkon | 0:f00e68bef80c | 576 | } else { |
haarkon | 0:f00e68bef80c | 577 | Pc.printf (" OK\n\n"); |
haarkon | 0:f00e68bef80c | 578 | BOUSSOLE_check = 0; |
haarkon | 0:f00e68bef80c | 579 | } |
haarkon | 0:f00e68bef80c | 580 | |
haarkon | 0:f00e68bef80c | 581 | do { |
illan | 8:527f5db9b3dc | 582 | boussole(); |
illan | 8:527f5db9b3dc | 583 | if(CAP_PWM<160) |
illan | 8:527f5db9b3dc | 584 | { |
illan | 8:527f5db9b3dc | 585 | tour_droit(); |
illan | 8:527f5db9b3dc | 586 | } |
illan | 8:527f5db9b3dc | 587 | else if(CAP_PWM>200) |
illan | 8:527f5db9b3dc | 588 | { |
illan | 8:527f5db9b3dc | 589 | tour_gauche(); |
illan | 8:527f5db9b3dc | 590 | } |
illan | 8:527f5db9b3dc | 591 | else |
illan | 8:527f5db9b3dc | 592 | { |
illan | 8:527f5db9b3dc | 593 | avancer(); |
illan | 8:527f5db9b3dc | 594 | } |
haarkon | 0:f00e68bef80c | 595 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 596 | MENU_choix = Pc.getc(); |
illan | 8:527f5db9b3dc | 597 | En=0; |
haarkon | 0:f00e68bef80c | 598 | break; |
haarkon | 0:f00e68bef80c | 599 | |
haarkon | 0:f00e68bef80c | 600 | case 3 : |
haarkon | 0:f00e68bef80c | 601 | Pc.printf ("\n\n\rGP2xx\n"); |
haarkon | 0:f00e68bef80c | 602 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 0:f00e68bef80c | 603 | do { |
illan | 8:527f5db9b3dc | 604 | capteur_infrarouge(); |
illan | 8:527f5db9b3dc | 605 | |
haarkon | 0:f00e68bef80c | 606 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 607 | MENU_choix = Pc.getc(); |
haarkon | 0:f00e68bef80c | 608 | break; |
haarkon | 0:f00e68bef80c | 609 | |
haarkon | 0:f00e68bef80c | 610 | case 4 : |
haarkon | 0:f00e68bef80c | 611 | Pc.printf ("\n\n\rCNY70\n"); |
haarkon | 0:f00e68bef80c | 612 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 0:f00e68bef80c | 613 | do { |
illan | 8:527f5db9b3dc | 614 | CNY(); |
haarkon | 0:f00e68bef80c | 615 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 616 | MENU_choix = Pc.getc(); |
haarkon | 0:f00e68bef80c | 617 | break; |
haarkon | 0:f00e68bef80c | 618 | |
haarkon | 0:f00e68bef80c | 619 | case 5 : |
haarkon | 0:f00e68bef80c | 620 | Pc.printf ("\n\n\rVbat\n"); |
haarkon | 0:f00e68bef80c | 621 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 0:f00e68bef80c | 622 | do { |
haarkon | 0:f00e68bef80c | 623 | if (FlagTickLed) { |
haarkon | 0:f00e68bef80c | 624 | Led1 = !Led1; |
haarkon | 0:f00e68bef80c | 625 | FlagTickLed = 0; |
haarkon | 0:f00e68bef80c | 626 | |
haarkon | 0:f00e68bef80c | 627 | Vbat_val = Vbat; |
haarkon | 0:f00e68bef80c | 628 | Pc.printf ("\rVbat = %5.3lf V", Vbat_val*3.3*4.3); |
haarkon | 0:f00e68bef80c | 629 | } |
haarkon | 0:f00e68bef80c | 630 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 631 | MENU_choix = Pc.getc(); |
haarkon | 0:f00e68bef80c | 632 | break; |
haarkon | 0:f00e68bef80c | 633 | |
haarkon | 0:f00e68bef80c | 634 | case 6 : |
haarkon | 0:f00e68bef80c | 635 | Pc.printf ("\n\n\rMoteur Gauche\n"); |
haarkon | 0:f00e68bef80c | 636 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 5:4955cb4b3646 | 637 | |
haarkon | 5:4955cb4b3646 | 638 | En = 1; |
haarkon | 5:4955cb4b3646 | 639 | SensG = 1; |
haarkon | 6:88b4805d33e1 | 640 | Led2 = 1; |
haarkon | 5:4955cb4b3646 | 641 | MOTG_duty = 0.5; |
haarkon | 6:88b4805d33e1 | 642 | MOTG_evol = 1; |
haarkon | 5:4955cb4b3646 | 643 | Pwm_MG = 0.5; |
haarkon | 6:88b4805d33e1 | 644 | |
haarkon | 0:f00e68bef80c | 645 | do { |
haarkon | 0:f00e68bef80c | 646 | if (FlagTickLed) { |
haarkon | 0:f00e68bef80c | 647 | Led1 = !Led1; |
haarkon | 0:f00e68bef80c | 648 | FlagTickLed = 0; |
haarkon | 0:f00e68bef80c | 649 | } |
haarkon | 5:4955cb4b3646 | 650 | if (BPPressed) { |
haarkon | 5:4955cb4b3646 | 651 | BPPressed = 0; |
haarkon | 6:88b4805d33e1 | 652 | SensG = !SensG; |
haarkon | 6:88b4805d33e1 | 653 | Led2 = !Led2; |
haarkon | 6:88b4805d33e1 | 654 | } |
haarkon | 5:4955cb4b3646 | 655 | |
haarkon | 6:88b4805d33e1 | 656 | if (((Tick%1000)==0) && FlagTick) { |
haarkon | 6:88b4805d33e1 | 657 | FlagTick = 0; |
haarkon | 6:88b4805d33e1 | 658 | if (MOTG_evol) { |
haarkon | 6:88b4805d33e1 | 659 | if (MOTG_duty < 0.9) MOTG_duty += 0.1; |
haarkon | 6:88b4805d33e1 | 660 | else { |
haarkon | 6:88b4805d33e1 | 661 | MOTG_evol = 0; |
haarkon | 6:88b4805d33e1 | 662 | MOTG_duty = 0.9; |
haarkon | 6:88b4805d33e1 | 663 | } |
haarkon | 5:4955cb4b3646 | 664 | } else { |
haarkon | 6:88b4805d33e1 | 665 | if (MOTG_duty > 0.1) MOTG_duty -= 0.1; |
haarkon | 6:88b4805d33e1 | 666 | else { |
haarkon | 6:88b4805d33e1 | 667 | MOTG_evol = 1; |
haarkon | 6:88b4805d33e1 | 668 | MOTG_duty = 0.1; |
haarkon | 6:88b4805d33e1 | 669 | } |
haarkon | 5:4955cb4b3646 | 670 | } |
haarkon | 5:4955cb4b3646 | 671 | } |
haarkon | 6:88b4805d33e1 | 672 | |
haarkon | 6:88b4805d33e1 | 673 | Pwm_MG = MOTG_duty; |
haarkon | 6:88b4805d33e1 | 674 | Pc.printf ("\rPWM = %2.1lf => Pos = %10ld Tick, Period = %ldus", MOTG_duty, Gauche.GetCounter(), Gperiod); |
haarkon | 6:88b4805d33e1 | 675 | |
haarkon | 6:88b4805d33e1 | 676 | |
haarkon | 0:f00e68bef80c | 677 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 678 | MENU_choix = Pc.getc(); |
haarkon | 6:88b4805d33e1 | 679 | |
haarkon | 5:4955cb4b3646 | 680 | En = 0; |
haarkon | 5:4955cb4b3646 | 681 | if (SensG == 0) Pwm_MG = 0; |
haarkon | 5:4955cb4b3646 | 682 | else Pwm_MG = 1; |
haarkon | 6:88b4805d33e1 | 683 | |
haarkon | 0:f00e68bef80c | 684 | break; |
haarkon | 0:f00e68bef80c | 685 | |
haarkon | 0:f00e68bef80c | 686 | case 7 : |
haarkon | 0:f00e68bef80c | 687 | Pc.printf ("\n\n\rMoteur Droit\n"); |
haarkon | 0:f00e68bef80c | 688 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 5:4955cb4b3646 | 689 | |
haarkon | 5:4955cb4b3646 | 690 | En = 1; |
haarkon | 5:4955cb4b3646 | 691 | SensD = 1; |
haarkon | 6:88b4805d33e1 | 692 | Led2 = 1; |
haarkon | 5:4955cb4b3646 | 693 | MOTD_duty = 0.5; |
haarkon | 6:88b4805d33e1 | 694 | MOTD_evol = 1; |
haarkon | 5:4955cb4b3646 | 695 | Pwm_MD = 0.5; |
haarkon | 5:4955cb4b3646 | 696 | |
haarkon | 0:f00e68bef80c | 697 | do { |
haarkon | 0:f00e68bef80c | 698 | if (FlagTickLed) { |
haarkon | 0:f00e68bef80c | 699 | Led1 = !Led1; |
haarkon | 0:f00e68bef80c | 700 | FlagTickLed = 0; |
haarkon | 0:f00e68bef80c | 701 | } |
haarkon | 5:4955cb4b3646 | 702 | if (BPPressed) { |
haarkon | 5:4955cb4b3646 | 703 | BPPressed = 0; |
haarkon | 6:88b4805d33e1 | 704 | SensD = !SensD; |
haarkon | 6:88b4805d33e1 | 705 | Led2 = !Led2; |
haarkon | 6:88b4805d33e1 | 706 | } |
haarkon | 6:88b4805d33e1 | 707 | |
haarkon | 6:88b4805d33e1 | 708 | if (((Tick%1000)==0) && FlagTick) { |
haarkon | 6:88b4805d33e1 | 709 | FlagTick = 0; |
haarkon | 6:88b4805d33e1 | 710 | if (MOTD_evol) { |
haarkon | 6:88b4805d33e1 | 711 | if (MOTD_duty < 0.9) MOTD_duty += 0.1; |
haarkon | 6:88b4805d33e1 | 712 | else { |
haarkon | 6:88b4805d33e1 | 713 | MOTD_evol = 0; |
haarkon | 6:88b4805d33e1 | 714 | MOTD_duty = 0.9; |
haarkon | 6:88b4805d33e1 | 715 | } |
haarkon | 5:4955cb4b3646 | 716 | } else { |
haarkon | 6:88b4805d33e1 | 717 | if (MOTD_duty > 0.1) MOTD_duty -= 0.1; |
haarkon | 6:88b4805d33e1 | 718 | else { |
haarkon | 6:88b4805d33e1 | 719 | MOTD_evol = 1; |
haarkon | 6:88b4805d33e1 | 720 | MOTD_duty = 0.1; |
haarkon | 6:88b4805d33e1 | 721 | } |
haarkon | 5:4955cb4b3646 | 722 | } |
haarkon | 5:4955cb4b3646 | 723 | } |
haarkon | 6:88b4805d33e1 | 724 | Pwm_MD = MOTD_duty; |
haarkon | 6:88b4805d33e1 | 725 | Pc.printf ("\rPWM = %2.1lf => Pos = %10ld Tick, Period = %ldus", MOTD_duty, Droite.GetCounter(), Dperiod); |
haarkon | 6:88b4805d33e1 | 726 | |
haarkon | 0:f00e68bef80c | 727 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 728 | MENU_choix = Pc.getc(); |
haarkon | 6:88b4805d33e1 | 729 | |
haarkon | 5:4955cb4b3646 | 730 | En = 0; |
haarkon | 5:4955cb4b3646 | 731 | if (SensD == 0) Pwm_MD = 0; |
haarkon | 5:4955cb4b3646 | 732 | else Pwm_MD = 1; |
haarkon | 6:88b4805d33e1 | 733 | |
haarkon | 0:f00e68bef80c | 734 | break; |
haarkon | 0:f00e68bef80c | 735 | |
haarkon | 0:f00e68bef80c | 736 | case 8 : |
haarkon | 0:f00e68bef80c | 737 | Pc.printf ("\n\n\rServo Moteur\n"); |
haarkon | 0:f00e68bef80c | 738 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 6:88b4805d33e1 | 739 | |
haarkon | 0:f00e68bef80c | 740 | do { |
illan | 8:527f5db9b3dc | 741 | servomoteur(); |
haarkon | 0:f00e68bef80c | 742 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 743 | MENU_choix = Pc.getc(); |
illan | 8:527f5db9b3dc | 744 | |
illan | 8:527f5db9b3dc | 745 | En = 0; |
illan | 8:527f5db9b3dc | 746 | |
haarkon | 0:f00e68bef80c | 747 | break; |
haarkon | 0:f00e68bef80c | 748 | |
haarkon | 0:f00e68bef80c | 749 | case 9 : |
haarkon | 0:f00e68bef80c | 750 | Pc.printf ("\n\n\rPixy\n"); |
haarkon | 0:f00e68bef80c | 751 | Pc.printf ("\rAppuyez sur Entree pour quitter\n"); |
haarkon | 2:1d440e938c44 | 752 | |
haarkon | 2:1d440e938c44 | 753 | if (Pixy_check == 0) Pc.printf ("\n\rPIXY is ALIVE\n"); |
haarkon | 2:1d440e938c44 | 754 | else Pc.printf ("\n\rPIXY don't talk\n"); |
haarkon | 2:1d440e938c44 | 755 | |
haarkon | 0:f00e68bef80c | 756 | do { |
haarkon | 2:1d440e938c44 | 757 | if (FlagPixy) { |
haarkon | 2:1d440e938c44 | 758 | |
haarkon | 2:1d440e938c44 | 759 | if (FlagPixyOverflow) { |
haarkon | 2:1d440e938c44 | 760 | Pc.printf ("\rSome Data were lost\n"); |
haarkon | 2:1d440e938c44 | 761 | FlagPixyOverflow = 0; |
haarkon | 0:f00e68bef80c | 762 | } |
haarkon | 3:3dfe26a10796 | 763 | for (PIXY_objet = 0; PIXY_objet < Pixy_NMObjet; PIXY_objet++) { |
haarkon | 3:3dfe26a10796 | 764 | 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); |
haarkon | 2:1d440e938c44 | 765 | |
haarkon | 3:3dfe26a10796 | 766 | if (PIXY_rNMObjet<19) PIXY_rNMObjet++; |
haarkon | 3:3dfe26a10796 | 767 | else PIXY_rNMObjet = 0; |
haarkon | 2:1d440e938c44 | 768 | } |
haarkon | 3:3dfe26a10796 | 769 | Pixy_NMObjet = 0; |
haarkon | 0:f00e68bef80c | 770 | |
haarkon | 3:3dfe26a10796 | 771 | for (PIXY_objet = 0; PIXY_objet < Pixy_CCObjet; PIXY_objet++) { |
haarkon | 3:3dfe26a10796 | 772 | 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); |
haarkon | 1:d95546f84105 | 773 | |
haarkon | 2:1d440e938c44 | 774 | if (PIXY_rCCObjet<19) PIXY_rCCObjet++; |
haarkon | 2:1d440e938c44 | 775 | else PIXY_rCCObjet = 0; |
haarkon | 2:1d440e938c44 | 776 | } |
illan | 8:527f5db9b3dc | 777 | val_W_balle = 0; |
illan | 8:527f5db9b3dc | 778 | val_H_balle = 0; |
illan | 8:527f5db9b3dc | 779 | val_carre_balle = 0; |
illan | 8:527f5db9b3dc | 780 | max_val_W_balle = 0; |
illan | 8:527f5db9b3dc | 781 | indice_balle = 0; |
illan | 8:527f5db9b3dc | 782 | for(i=0;i<14;i++){ |
illan | 8:527f5db9b3dc | 783 | val_W_balle=Pixy_NMFIFO[i].NMbloc.width; |
illan | 8:527f5db9b3dc | 784 | val_H_balle=Pixy_NMFIFO[i].NMbloc.height; |
illan | 8:527f5db9b3dc | 785 | |
illan | 8:527f5db9b3dc | 786 | val_carre_balle = val_H_balle/val_W_balle; |
illan | 8:527f5db9b3dc | 787 | |
illan | 8:527f5db9b3dc | 788 | val_x_balle =Pixy_NMFIFO[i].NMbloc.x; |
illan | 8:527f5db9b3dc | 789 | |
illan | 8:527f5db9b3dc | 790 | |
illan | 8:527f5db9b3dc | 791 | if(val_W_balle>max_val_W_balle){ |
illan | 8:527f5db9b3dc | 792 | max_val_W_balle=val_W_balle; |
illan | 8:527f5db9b3dc | 793 | indice_balle=i; |
illan | 8:527f5db9b3dc | 794 | if(val_x_balle>130 && val_x_balle<170){ |
illan | 8:527f5db9b3dc | 795 | avancer(); |
illan | 8:527f5db9b3dc | 796 | } |
illan | 8:527f5db9b3dc | 797 | else{ |
illan | 8:527f5db9b3dc | 798 | En = 0; |
illan | 8:527f5db9b3dc | 799 | } |
illan | 8:527f5db9b3dc | 800 | |
illan | 8:527f5db9b3dc | 801 | } |
illan | 8:527f5db9b3dc | 802 | } |
illan | 8:527f5db9b3dc | 803 | Pc.printf("\rNMobj sig = %hd : X=%5hd,Y=%5hd (W=%5hd, H=%5hd)\n",Pixy_NMFIFO[indice_balle].NMbloc.signature,Pixy_NMFIFO[indice_balle].NMbloc.x,Pixy_NMFIFO[indice_balle].NMbloc.y,Pixy_NMFIFO[indice_balle].NMbloc.width,Pixy_NMFIFO[indice_balle].NMbloc.height); |
illan | 8:527f5db9b3dc | 804 | |
haarkon | 3:3dfe26a10796 | 805 | Pixy_CCObjet = 0; |
haarkon | 3:3dfe26a10796 | 806 | Pc.printf("\n\r"); |
haarkon | 1:d95546f84105 | 807 | FlagPixy = 0; |
illan | 8:527f5db9b3dc | 808 | wait_ms(500); |
haarkon | 0:f00e68bef80c | 809 | } |
haarkon | 1:d95546f84105 | 810 | |
haarkon | 1:d95546f84105 | 811 | if (FlagTickLed) { |
haarkon | 1:d95546f84105 | 812 | Led1 = !Led1; |
haarkon | 1:d95546f84105 | 813 | FlagTickLed = 0; |
haarkon | 1:d95546f84105 | 814 | } |
haarkon | 0:f00e68bef80c | 815 | } while(!Pc.readable()); |
haarkon | 0:f00e68bef80c | 816 | MENU_choix = Pc.getc(); |
haarkon | 0:f00e68bef80c | 817 | break; |
haarkon | 0:f00e68bef80c | 818 | |
haarkon | 0:f00e68bef80c | 819 | } |
haarkon | 0:f00e68bef80c | 820 | } |
illan | 8:527f5db9b3dc | 821 | } |
illan | 8:527f5db9b3dc | 822 | |
illan | 8:527f5db9b3dc | 823 | void capteur_ultrason(void) |
illan | 8:527f5db9b3dc | 824 | { |
illan | 8:527f5db9b3dc | 825 | if (FlagTickLed) { |
illan | 8:527f5db9b3dc | 826 | Led1 = !Led1; |
illan | 8:527f5db9b3dc | 827 | FlagTickLed = 0; |
illan | 8:527f5db9b3dc | 828 | } |
illan | 8:527f5db9b3dc | 829 | |
illan | 8:527f5db9b3dc | 830 | // Gestion des US |
illan | 8:527f5db9b3dc | 831 | if (((Tick%150)==0) && FlagTick) { |
illan | 8:527f5db9b3dc | 832 | Trig1 = 1; |
illan | 8:527f5db9b3dc | 833 | wait_us(20); |
illan | 8:527f5db9b3dc | 834 | Trig1 = 0; |
illan | 8:527f5db9b3dc | 835 | FlagTick = 0; |
illan | 8:527f5db9b3dc | 836 | } |
illan | 8:527f5db9b3dc | 837 | |
illan | 8:527f5db9b3dc | 838 | if (((Tick%150)==50) && FlagTick) { |
illan | 8:527f5db9b3dc | 839 | Trig2 = 1; |
illan | 8:527f5db9b3dc | 840 | wait_us(20); |
illan | 8:527f5db9b3dc | 841 | Trig2 = 0; |
illan | 8:527f5db9b3dc | 842 | FlagTick = 0; |
illan | 8:527f5db9b3dc | 843 | } |
illan | 8:527f5db9b3dc | 844 | |
illan | 8:527f5db9b3dc | 845 | if (((Tick%150)==100) && FlagTick) { |
illan | 8:527f5db9b3dc | 846 | Trig3 = 1; |
illan | 8:527f5db9b3dc | 847 | wait_us(20); |
illan | 8:527f5db9b3dc | 848 | Trig3 = 0; |
illan | 8:527f5db9b3dc | 849 | FlagTick = 0; |
illan | 8:527f5db9b3dc | 850 | } |
illan | 8:527f5db9b3dc | 851 | |
illan | 8:527f5db9b3dc | 852 | if (FlagUS1==1) { |
illan | 8:527f5db9b3dc | 853 | Pc.printf ("\rUS 1 = %04d mm", (int)DistUS1); |
illan | 8:527f5db9b3dc | 854 | FlagUS1 = 0; |
illan | 8:527f5db9b3dc | 855 | } |
illan | 8:527f5db9b3dc | 856 | |
illan | 8:527f5db9b3dc | 857 | if (FlagUS2==1) { |
illan | 8:527f5db9b3dc | 858 | Pc.printf ("\r\t\t\tUS 2 = %04d mm", (int)DistUS2); |
illan | 8:527f5db9b3dc | 859 | FlagUS2 = 0; |
illan | 8:527f5db9b3dc | 860 | } |
illan | 8:527f5db9b3dc | 861 | |
illan | 8:527f5db9b3dc | 862 | if (FlagUS3==1) { |
illan | 8:527f5db9b3dc | 863 | Pc.printf ("\r\t\t\t\t\t\tUS 3 = %04d mm", (int)DistUS3); |
illan | 8:527f5db9b3dc | 864 | FlagUS3 = 0; |
illan | 8:527f5db9b3dc | 865 | } |
illan | 8:527f5db9b3dc | 866 | } |
illan | 8:527f5db9b3dc | 867 | |
illan | 8:527f5db9b3dc | 868 | void boussole(void) |
illan | 8:527f5db9b3dc | 869 | { |
illan | 8:527f5db9b3dc | 870 | |
illan | 8:527f5db9b3dc | 871 | |
illan | 8:527f5db9b3dc | 872 | |
illan | 8:527f5db9b3dc | 873 | if (FlagTickLed) { |
illan | 8:527f5db9b3dc | 874 | Led1 = !Led1; |
illan | 8:527f5db9b3dc | 875 | FlagTickLed = 0; |
illan | 8:527f5db9b3dc | 876 | } |
illan | 8:527f5db9b3dc | 877 | |
illan | 8:527f5db9b3dc | 878 | if (((Tick%150)==0) && FlagTick) { |
illan | 8:527f5db9b3dc | 879 | FlagTick = 0; |
illan | 8:527f5db9b3dc | 880 | if (BOUSSOLE_check==0) { |
illan | 8:527f5db9b3dc | 881 | CAP_PWM = ((PWMB.pulsewidth()*1000)-1)*10; |
illan | 8:527f5db9b3dc | 882 | Pc.printf ("\r PWM = %4.1lf", CAP_PWM); |
illan | 8:527f5db9b3dc | 883 | } |
illan | 8:527f5db9b3dc | 884 | if (I2C_check==0) { |
illan | 8:527f5db9b3dc | 885 | Bus_I2C.write(BOUSSOLE_adress,BOUSSOLE_status, 1, true); |
illan | 8:527f5db9b3dc | 886 | Bus_I2C.read (BOUSSOLE_adress,I2C_registerValue,4); |
illan | 8:527f5db9b3dc | 887 | CAP_I2C = (double)(((unsigned short)I2C_registerValue[2]<<8)+(unsigned short)I2C_registerValue[3])/10.0; |
illan | 8:527f5db9b3dc | 888 | Pc.printf ("\r\t\t I2C = %4.1lf", CAP_I2C); |
illan | 8:527f5db9b3dc | 889 | } |
illan | 8:527f5db9b3dc | 890 | } |
illan | 8:527f5db9b3dc | 891 | } |
illan | 8:527f5db9b3dc | 892 | |
illan | 8:527f5db9b3dc | 893 | void capteur_infrarouge(void) |
illan | 8:527f5db9b3dc | 894 | { |
illan | 8:527f5db9b3dc | 895 | double SD1_val, SD2_val, LD1_val, LD2_val; |
illan | 8:527f5db9b3dc | 896 | double SD1_dist, SD2_dist, LD1_dist, LD2_dist; |
illan | 8:527f5db9b3dc | 897 | |
illan | 8:527f5db9b3dc | 898 | if (FlagTickLed) { |
illan | 8:527f5db9b3dc | 899 | Led1 = !Led1; |
illan | 8:527f5db9b3dc | 900 | FlagTickLed = 0; |
illan | 8:527f5db9b3dc | 901 | |
illan | 8:527f5db9b3dc | 902 | SD1_val = SD1; |
illan | 8:527f5db9b3dc | 903 | SD2_val = SD2; |
illan | 8:527f5db9b3dc | 904 | LD1_val = LD1; |
illan | 8:527f5db9b3dc | 905 | LD2_val = LD2; |
illan | 8:527f5db9b3dc | 906 | |
illan | 8:527f5db9b3dc | 907 | if (SD1_val < 0.06) { |
illan | 8:527f5db9b3dc | 908 | SD1_val = 0; |
illan | 8:527f5db9b3dc | 909 | SD1_dist = 40; |
illan | 8:527f5db9b3dc | 910 | } else { |
illan | 8:527f5db9b3dc | 911 | SD1_dist = 11.611/(SD1_val*3.3-0.0237); |
illan | 8:527f5db9b3dc | 912 | if (SD1_dist > 40) SD1_dist = 40; |
illan | 8:527f5db9b3dc | 913 | } |
illan | 8:527f5db9b3dc | 914 | |
illan | 8:527f5db9b3dc | 915 | if (SD2_val < 0.06) { |
illan | 8:527f5db9b3dc | 916 | SD2_val = 0; |
illan | 8:527f5db9b3dc | 917 | SD2_dist = 40; |
illan | 8:527f5db9b3dc | 918 | } else { |
illan | 8:527f5db9b3dc | 919 | SD2_dist = 11.611/(SD2_val*3.3-0.0237); |
illan | 8:527f5db9b3dc | 920 | if (SD2_dist > 40) SD2_dist = 40; |
illan | 8:527f5db9b3dc | 921 | } |
illan | 8:527f5db9b3dc | 922 | |
illan | 8:527f5db9b3dc | 923 | if (LD1_val < 0.1) { |
illan | 8:527f5db9b3dc | 924 | LD1_val = 0; |
illan | 8:527f5db9b3dc | 925 | LD1_dist = 150; |
illan | 8:527f5db9b3dc | 926 | } else { |
illan | 8:527f5db9b3dc | 927 | LD1_dist = 59.175/(LD1_val*3.3-0.0275); |
illan | 8:527f5db9b3dc | 928 | if (LD1_dist > 150) LD1_dist = 150; |
illan | 8:527f5db9b3dc | 929 | } |
illan | 8:527f5db9b3dc | 930 | |
illan | 8:527f5db9b3dc | 931 | if (LD2_val < 0.1) { |
illan | 8:527f5db9b3dc | 932 | LD2_val = 0; |
illan | 8:527f5db9b3dc | 933 | LD2_dist = 150; |
illan | 8:527f5db9b3dc | 934 | } else { |
illan | 8:527f5db9b3dc | 935 | LD2_dist = 59.175/(LD2_val*3.3-0.0275); |
illan | 8:527f5db9b3dc | 936 | if (LD2_dist > 150) LD2_dist = 150; |
illan | 8:527f5db9b3dc | 937 | } |
illan | 8:527f5db9b3dc | 938 | |
illan | 8:527f5db9b3dc | 939 | 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); |
illan | 8:527f5db9b3dc | 940 | } |
illan | 8:527f5db9b3dc | 941 | } |
illan | 8:527f5db9b3dc | 942 | |
illan | 8:527f5db9b3dc | 943 | void CNY(void) |
illan | 8:527f5db9b3dc | 944 | { |
illan | 8:527f5db9b3dc | 945 | double CNY1_val, CNY2_val, CNY3_val; |
illan | 8:527f5db9b3dc | 946 | |
illan | 8:527f5db9b3dc | 947 | if (FlagTickLed) { |
illan | 8:527f5db9b3dc | 948 | Led1 = !Led1; |
illan | 8:527f5db9b3dc | 949 | FlagTickLed = 0; |
illan | 8:527f5db9b3dc | 950 | |
illan | 8:527f5db9b3dc | 951 | CNY1_val = CNY1; |
illan | 8:527f5db9b3dc | 952 | CNY2_val = CNY2; |
illan | 8:527f5db9b3dc | 953 | CNY3_val = CNY3; |
illan | 8:527f5db9b3dc | 954 | |
illan | 8:527f5db9b3dc | 955 | 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); |
illan | 8:527f5db9b3dc | 956 | } |
illan | 8:527f5db9b3dc | 957 | } |
illan | 8:527f5db9b3dc | 958 | |
illan | 8:527f5db9b3dc | 959 | |
illan | 8:527f5db9b3dc | 960 | void servomoteur(void) |
illan | 8:527f5db9b3dc | 961 | { |
illan | 8:527f5db9b3dc | 962 | |
illan | 8:527f5db9b3dc | 963 | |
illan | 8:527f5db9b3dc | 964 | if (FlagTickLed) { |
illan | 8:527f5db9b3dc | 965 | Led1 = !Led1; |
illan | 8:527f5db9b3dc | 966 | FlagTickLed = 0; |
illan | 8:527f5db9b3dc | 967 | } |
illan | 8:527f5db9b3dc | 968 | |
illan | 8:527f5db9b3dc | 969 | if (((Tick%250)==0) && FlagTick) { |
illan | 8:527f5db9b3dc | 970 | FlagTick = 0; |
illan | 8:527f5db9b3dc | 971 | if (SERVO_dir == S_monte) { |
illan | 8:527f5db9b3dc | 972 | if (SERVO_pulseWidth < (SERVO_max - 100)) SERVO_pulseWidth +=100; |
illan | 8:527f5db9b3dc | 973 | else { |
illan | 8:527f5db9b3dc | 974 | SERVO_dir = S_descente; |
illan | 8:527f5db9b3dc | 975 | SERVO_pulseWidth = SERVO_max; |
illan | 8:527f5db9b3dc | 976 | } |
illan | 8:527f5db9b3dc | 977 | } else { |
illan | 8:527f5db9b3dc | 978 | if (SERVO_pulseWidth > (SERVO_min + 100)) SERVO_pulseWidth -=100; |
illan | 8:527f5db9b3dc | 979 | else { |
illan | 8:527f5db9b3dc | 980 | SERVO_dir = S_monte; |
illan | 8:527f5db9b3dc | 981 | SERVO_pulseWidth = SERVO_min; |
illan | 8:527f5db9b3dc | 982 | } |
illan | 8:527f5db9b3dc | 983 | } |
illan | 8:527f5db9b3dc | 984 | |
illan | 8:527f5db9b3dc | 985 | Servo.pulsewidth_us (SERVO_pulseWidth); |
illan | 8:527f5db9b3dc | 986 | Pc.printf ("\rPulse = %d",SERVO_pulseWidth); |
illan | 8:527f5db9b3dc | 987 | } |
illan | 8:527f5db9b3dc | 988 | } |
illan | 8:527f5db9b3dc | 989 | |
illan | 8:527f5db9b3dc | 990 | void avancer(void) |
illan | 8:527f5db9b3dc | 991 | { |
illan | 8:527f5db9b3dc | 992 | En = 1; |
illan | 8:527f5db9b3dc | 993 | SensD = 1; |
illan | 8:527f5db9b3dc | 994 | Led2 = 1; |
illan | 8:527f5db9b3dc | 995 | MOTD_duty = 0.48; |
illan | 8:527f5db9b3dc | 996 | Pwm_MD = 0.5; |
illan | 8:527f5db9b3dc | 997 | SensG = 0; |
illan | 8:527f5db9b3dc | 998 | MOTG_duty = 0.5; |
illan | 8:527f5db9b3dc | 999 | Pwm_MG = 0.5; |
illan | 8:527f5db9b3dc | 1000 | |
illan | 8:527f5db9b3dc | 1001 | Pwm_MG = MOTG_duty; |
illan | 8:527f5db9b3dc | 1002 | Pwm_MD = MOTD_duty; |
illan | 8:527f5db9b3dc | 1003 | } |
illan | 8:527f5db9b3dc | 1004 | void tour_droit(void) |
illan | 8:527f5db9b3dc | 1005 | { |
illan | 8:527f5db9b3dc | 1006 | En = 1; |
illan | 8:527f5db9b3dc | 1007 | SensD = 0; |
illan | 8:527f5db9b3dc | 1008 | Led2 = 1; |
illan | 8:527f5db9b3dc | 1009 | MOTD_duty = 0.5; |
illan | 8:527f5db9b3dc | 1010 | Pwm_MD = 0.5; |
illan | 8:527f5db9b3dc | 1011 | SensG = 0; |
illan | 8:527f5db9b3dc | 1012 | MOTG_duty = 0.5; |
illan | 8:527f5db9b3dc | 1013 | Pwm_MG = 0.5; |
illan | 8:527f5db9b3dc | 1014 | |
illan | 8:527f5db9b3dc | 1015 | Pwm_MG = MOTG_duty; |
illan | 8:527f5db9b3dc | 1016 | Pwm_MD = MOTD_duty; |
illan | 8:527f5db9b3dc | 1017 | } |
illan | 8:527f5db9b3dc | 1018 | void tour_gauche(void) |
illan | 8:527f5db9b3dc | 1019 | { |
illan | 8:527f5db9b3dc | 1020 | En = 1; |
illan | 8:527f5db9b3dc | 1021 | SensD = 1; |
illan | 8:527f5db9b3dc | 1022 | Led2 = 1; |
illan | 8:527f5db9b3dc | 1023 | MOTD_duty = 0.5; |
illan | 8:527f5db9b3dc | 1024 | Pwm_MD = 0.5; |
illan | 8:527f5db9b3dc | 1025 | SensG = 1; |
illan | 8:527f5db9b3dc | 1026 | MOTG_duty = 0.5; |
illan | 8:527f5db9b3dc | 1027 | Pwm_MG = 0.5; |
illan | 8:527f5db9b3dc | 1028 | |
illan | 8:527f5db9b3dc | 1029 | Pwm_MG = MOTG_duty; |
illan | 8:527f5db9b3dc | 1030 | Pwm_MD = MOTD_duty; |
illan | 8:527f5db9b3dc | 1031 | } |