Waël Hazami / Mbed 2 deprecated Lib_PIXY2

Dependencies:   mbed

Committer:
Wael_H
Date:
Mon Feb 03 09:33:58 2020 +0000
Revision:
28:f1dd68d07aec
Parent:
27:bee63ac9b70b
library Pixy2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
theolp 22:5f76404e2cbc 1 #include "pixy2.h"
theolp 22:5f76404e2cbc 2
Wael_H 28:f1dd68d07aec 3 #define NB_FONCTIONNALITES 8
theolp 22:5f76404e2cbc 4
theolp 22:5f76404e2cbc 5 Serial pc(USBTX, USBRX, 9600);
theolp 22:5f76404e2cbc 6
Wael_H 28:f1dd68d07aec 7 // debug en cas d'erreur de checksum
Wael_H 28:f1dd68d07aec 8 int sommeDeControle,sommeRecue;
theolp 22:5f76404e2cbc 9
Wael_H 28:f1dd68d07aec 10 // Gestion appui sur BP
theolp 27:bee63ac9b70b 11 bool FLAG_BP = false;
Wael_H 28:f1dd68d07aec 12 int nb_appui = -1;
theolp 22:5f76404e2cbc 13
Wael_H 28:f1dd68d07aec 14 void appui_BP(void)
Wael_H 28:f1dd68d07aec 15 {
Wael_H 28:f1dd68d07aec 16 if(!FLAG_BP) // pour éviter les rebonds
Wael_H 28:f1dd68d07aec 17 nb_appui = (nb_appui+1)%NB_FONCTIONNALITES;
Wael_H 28:f1dd68d07aec 18 FLAG_BP = true;
Wael_H 28:f1dd68d07aec 19 }
theolp 22:5f76404e2cbc 20
Wael_H 28:f1dd68d07aec 21 /* PROGRAMME DE TEST DES FEATURES FONCTIONNEL */
theolp 22:5f76404e2cbc 22
theolp 22:5f76404e2cbc 23 int main(void)
theolp 22:5f76404e2cbc 24 {
theolp 22:5f76404e2cbc 25 PIXY2 maPixy(PC_12, PD_2); // PC_12 : UART5_TX --- PD_2 : UART5_RX
theolp 22:5f76404e2cbc 26
Wael_H 28:f1dd68d07aec 27 T_pixy2Version *version;
Wael_H 28:f1dd68d07aec 28 T_pixy2Resolution *resolution;
Wael_H 28:f1dd68d07aec 29 T_pixy2ReturnCode *framerate;
Wael_H 28:f1dd68d07aec 30 T_pixy2Pixel *pixel;
Wael_H 28:f1dd68d07aec 31 T_pixy2ErrorCode cr;
Wael_H 28:f1dd68d07aec 32
theolp 22:5f76404e2cbc 33 // Initialisations
theolp 22:5f76404e2cbc 34 InterruptIn BP(USER_BUTTON);
theolp 22:5f76404e2cbc 35 BP.rise(&appui_BP);
Wael_H 28:f1dd68d07aec 36
Wael_H 28:f1dd68d07aec 37 Timer timeOut;
Wael_H 28:f1dd68d07aec 38 timeOut.start();
Wael_H 28:f1dd68d07aec 39
Wael_H 28:f1dd68d07aec 40 typedef enum {IDLE, SND, CHECKSUM_ERROR, TIMEOUT, OK} T_state;
theolp 22:5f76404e2cbc 41 T_state etat = IDLE;
Wael_H 28:f1dd68d07aec 42
theolp 22:5f76404e2cbc 43 while(1) {
theolp 22:5f76404e2cbc 44
theolp 22:5f76404e2cbc 45 switch (etat) {
theolp 22:5f76404e2cbc 46 case IDLE :
Wael_H 28:f1dd68d07aec 47 if (FLAG_BP) {
theolp 22:5f76404e2cbc 48 pc.printf("Envoi...\n\r");
theolp 27:bee63ac9b70b 49 FLAG_BP = false;
Wael_H 28:f1dd68d07aec 50 timeOut.reset();
Wael_H 28:f1dd68d07aec 51 etat = SND;
theolp 22:5f76404e2cbc 52 }
theolp 22:5f76404e2cbc 53 break;
theolp 27:bee63ac9b70b 54
Wael_H 28:f1dd68d07aec 55 case SND :
Wael_H 28:f1dd68d07aec 56 switch(nb_appui) {
Wael_H 28:f1dd68d07aec 57 case 0:
Wael_H 28:f1dd68d07aec 58 cr = maPixy.pixy2_getVersion(&version);
Wael_H 28:f1dd68d07aec 59 break;
Wael_H 28:f1dd68d07aec 60
Wael_H 28:f1dd68d07aec 61 case 1:
Wael_H 28:f1dd68d07aec 62 cr = maPixy.pixy2_getResolution(&resolution);
Wael_H 28:f1dd68d07aec 63 break;
Wael_H 28:f1dd68d07aec 64
Wael_H 28:f1dd68d07aec 65 case 2:
Wael_H 28:f1dd68d07aec 66 cr = maPixy.pixy2_getFPS(&framerate);
Wael_H 28:f1dd68d07aec 67 break;
Wael_H 28:f1dd68d07aec 68
Wael_H 28:f1dd68d07aec 69 case 3:
Wael_H 28:f1dd68d07aec 70 cr = maPixy.pixy2_getRGB(resolution->pixFrameWidth / 2, resolution->pixFrameHeight / 2, 0, &pixel);
Wael_H 28:f1dd68d07aec 71 break;
Wael_H 28:f1dd68d07aec 72
Wael_H 28:f1dd68d07aec 73 case 4:
Wael_H 28:f1dd68d07aec 74 cr = maPixy.pixy2_setLED(0,0,255);
Wael_H 28:f1dd68d07aec 75 break;
Wael_H 28:f1dd68d07aec 76
Wael_H 28:f1dd68d07aec 77 case 5:
Wael_H 28:f1dd68d07aec 78 cr = maPixy.pixy2_setLamp(1,1);
Wael_H 28:f1dd68d07aec 79 break;
Wael_H 28:f1dd68d07aec 80
Wael_H 28:f1dd68d07aec 81 case 6:
Wael_H 28:f1dd68d07aec 82 cr = maPixy.pixy2_setCameraBrightness(255);
Wael_H 28:f1dd68d07aec 83 break;
Wael_H 28:f1dd68d07aec 84
Wael_H 28:f1dd68d07aec 85 case 7:
Wael_H 28:f1dd68d07aec 86 cr = maPixy.pixy2_getAllFeature(PIXY2_VECTOR | PIXY2_INTERSECTION | PIXY2_BARCODE);
Wael_H 28:f1dd68d07aec 87 if(cr != PIXY2_BUSY)
Wael_H 28:f1dd68d07aec 88 {
Wael_H 28:f1dd68d07aec 89 if(cr <= 7)
Wael_H 28:f1dd68d07aec 90 {
Wael_H 28:f1dd68d07aec 91 if((cr & PIXY2_VECTOR) == PIXY2_VECTOR)
Wael_H 28:f1dd68d07aec 92 {
Wael_H 28:f1dd68d07aec 93 pc.printf("\n\r%d vecteurs detect\202s\n\r", maPixy.Pixy2_numVectors);
Wael_H 28:f1dd68d07aec 94 etat = OK;
Wael_H 28:f1dd68d07aec 95 }
Wael_H 28:f1dd68d07aec 96 if((cr & PIXY2_INTERSECTION) == PIXY2_INTERSECTION)
Wael_H 28:f1dd68d07aec 97 {
Wael_H 28:f1dd68d07aec 98 pc.printf("\n\r%d intersections detect\202es\n\r", maPixy.Pixy2_numIntersections);
Wael_H 28:f1dd68d07aec 99 etat = OK;
Wael_H 28:f1dd68d07aec 100 }
Wael_H 28:f1dd68d07aec 101 if((cr & PIXY2_BARCODE) == PIXY2_BARCODE)
Wael_H 28:f1dd68d07aec 102 {
Wael_H 28:f1dd68d07aec 103 pc.printf("\n\r%d codes barre detect\202s\n\r", maPixy.Pixy2_numBarcodes);
Wael_H 28:f1dd68d07aec 104 etat = OK;
Wael_H 28:f1dd68d07aec 105 }
Wael_H 28:f1dd68d07aec 106 }
Wael_H 28:f1dd68d07aec 107 else if(cr > 7)
Wael_H 28:f1dd68d07aec 108 pc.printf("Aucune feature recue !\n\r");
Wael_H 28:f1dd68d07aec 109 }
Wael_H 28:f1dd68d07aec 110 break;
theolp 27:bee63ac9b70b 111 }
Wael_H 28:f1dd68d07aec 112
Wael_H 28:f1dd68d07aec 113 // Test des possibles erreurs
Wael_H 28:f1dd68d07aec 114 if (cr == PIXY2_BAD_CHECKSUM)
Wael_H 28:f1dd68d07aec 115 etat = CHECKSUM_ERROR;
Wael_H 28:f1dd68d07aec 116 else if (timeOut.read()>2.f)
theolp 27:bee63ac9b70b 117 etat = TIMEOUT;
Wael_H 28:f1dd68d07aec 118 else if (cr == PIXY2_OK)
Wael_H 28:f1dd68d07aec 119 etat = OK;
Wael_H 28:f1dd68d07aec 120 else if (cr != PIXY2_BUSY)
Wael_H 28:f1dd68d07aec 121 pc.printf("Valeur de retour : %d\n\r", cr);
Wael_H 28:f1dd68d07aec 122 break;
Wael_H 28:f1dd68d07aec 123
Wael_H 28:f1dd68d07aec 124 case OK :
Wael_H 28:f1dd68d07aec 125 switch(nb_appui) {
Wael_H 28:f1dd68d07aec 126 case 0:
Wael_H 28:f1dd68d07aec 127 pc.printf("Version de la camera : %s\n\r", version->pixHFString);
Wael_H 28:f1dd68d07aec 128 break;
Wael_H 28:f1dd68d07aec 129
Wael_H 28:f1dd68d07aec 130 case 1:
Wael_H 28:f1dd68d07aec 131 pc.printf("Resolution de la camera : %d - %d\n\r", resolution->pixFrameWidth, resolution->pixFrameHeight);
Wael_H 28:f1dd68d07aec 132 break;
Wael_H 28:f1dd68d07aec 133
Wael_H 28:f1dd68d07aec 134 case 2:
Wael_H 28:f1dd68d07aec 135 pc.printf("Framerate : %d\n\r", framerate->pixReturn);
Wael_H 28:f1dd68d07aec 136 break;
Wael_H 28:f1dd68d07aec 137
Wael_H 28:f1dd68d07aec 138 case 3:
Wael_H 28:f1dd68d07aec 139 pc.printf("Pixel au centre de l'\202cran: R : %d, G : %d, B : %d\n\r", pixel->pixRed, pixel->pixGreen, pixel->pixBlue);
Wael_H 28:f1dd68d07aec 140 break;
Wael_H 28:f1dd68d07aec 141
Wael_H 28:f1dd68d07aec 142 case 4:
Wael_H 28:f1dd68d07aec 143 pc.printf("Led bleue allum\202e !\n\r");
Wael_H 28:f1dd68d07aec 144 break;
Wael_H 28:f1dd68d07aec 145
Wael_H 28:f1dd68d07aec 146 case 5:
Wael_H 28:f1dd68d07aec 147 pc.printf("Leds blanches allum\202es !\n\r");
Wael_H 28:f1dd68d07aec 148 break;
Wael_H 28:f1dd68d07aec 149
Wael_H 28:f1dd68d07aec 150 case 6:
Wael_H 28:f1dd68d07aec 151 pc.printf("Luminosit\202 de la camera a fond !\n\r");
Wael_H 28:f1dd68d07aec 152 break;
Wael_H 28:f1dd68d07aec 153
Wael_H 28:f1dd68d07aec 154 case 7:
Wael_H 28:f1dd68d07aec 155 for (int i=0; i<maPixy.Pixy2_numVectors; i++)
Wael_H 28:f1dd68d07aec 156 {
Wael_H 28:f1dd68d07aec 157 pc.printf("\n1er pt du %de vecteur : x: %d, y: %d\n\r", i+1, maPixy.Pixy2_vectors[i].pixX0, maPixy.Pixy2_vectors[i].pixY0);
Wael_H 28:f1dd68d07aec 158 pc.printf("2e pt du %de vecteur : x: %d, y: %d\n\r", i+1, maPixy.Pixy2_vectors[i].pixX1, maPixy.Pixy2_vectors[i].pixY1);
Wael_H 28:f1dd68d07aec 159 }
Wael_H 28:f1dd68d07aec 160 for (int i=0; i<maPixy.Pixy2_numIntersections; i++)
Wael_H 28:f1dd68d07aec 161 {
Wael_H 28:f1dd68d07aec 162 pc.printf("\npt de l'intersection %d : x: %d, y: %d\n\r", i+1, maPixy.Pixy2_intersections[i].pixX, maPixy.Pixy2_intersections[i].pixY);
Wael_H 28:f1dd68d07aec 163 pc.printf("Nombre de droites sur cette intersection : %d\n\r", maPixy.Pixy2_intersections[i].pixN);
Wael_H 28:f1dd68d07aec 164 }
Wael_H 28:f1dd68d07aec 165 for (int i=0; i<maPixy.Pixy2_numBarcodes; i++)
Wael_H 28:f1dd68d07aec 166 {
Wael_H 28:f1dd68d07aec 167 pc.printf("\nCoordonn\202es du code barre %d : x: %d, y: %d\n\r", i+1, maPixy.Pixy2_barcodes[i].pixX, maPixy.Pixy2_barcodes[i].pixY);
Wael_H 28:f1dd68d07aec 168 pc.printf("Nombre associ\202 a ce code barre : %d\n\r", maPixy.Pixy2_barcodes[i].pixCode);
Wael_H 28:f1dd68d07aec 169 }
Wael_H 28:f1dd68d07aec 170 break;
theolp 27:bee63ac9b70b 171 }
Wael_H 28:f1dd68d07aec 172 etat = IDLE;
theolp 27:bee63ac9b70b 173 break;
Wael_H 28:f1dd68d07aec 174
theolp 22:5f76404e2cbc 175 case CHECKSUM_ERROR :
theolp 22:5f76404e2cbc 176 pc.printf("Erreur de CheckSum...\n\r");
theolp 22:5f76404e2cbc 177 pc.printf("CheckSum Recu : %d\n\r", sommeRecue);
Wael_H 28:f1dd68d07aec 178 pc.printf("CheckSum Calcule : %d\n\r", sommeDeControle);
theolp 22:5f76404e2cbc 179 etat = IDLE;
theolp 22:5f76404e2cbc 180 break;
theolp 22:5f76404e2cbc 181
Wael_H 28:f1dd68d07aec 182 case TIMEOUT :
Wael_H 28:f1dd68d07aec 183 pc.printf("Erreur Timeout...\n\rError %d\n\r", cr);
Wael_H 28:f1dd68d07aec 184 maPixy.affDataSize();
Wael_H 28:f1dd68d07aec 185 etat = IDLE;
theolp 27:bee63ac9b70b 186 break;
theolp 27:bee63ac9b70b 187 }
theolp 27:bee63ac9b70b 188 }
theolp 22:5f76404e2cbc 189 }