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.
main.cpp@28:f1dd68d07aec, 2020-02-03 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |