Library for Pixy - CMUCAM5 smart camera
Dependents: TestPixy FRC_2018 FRC2018_Bis 0hackton_08_06_18 ... more
Fork of Pixy by
Pixy.h@1:183ebbbc9c2e, 2018-05-21 (annotated)
- Committer:
- haarkon
- Date:
- Mon May 21 16:14:19 2018 +0000
- Revision:
- 1:183ebbbc9c2e
- Parent:
- 0:6f78c735f07c
- Child:
- 2:90355c600404
Cosmetic modifications (still untested);
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
haarkon | 0:6f78c735f07c | 1 | /** |
haarkon | 0:6f78c735f07c | 2 | * @author Hugues Angelis |
haarkon | 0:6f78c735f07c | 3 | * |
haarkon | 0:6f78c735f07c | 4 | * @section LICENSE |
haarkon | 0:6f78c735f07c | 5 | * |
haarkon | 0:6f78c735f07c | 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
haarkon | 0:6f78c735f07c | 7 | * of this software and associated documentation files (the "Software"), to deal |
haarkon | 0:6f78c735f07c | 8 | * in the Software without restriction, including without limitation the rights |
haarkon | 0:6f78c735f07c | 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
haarkon | 0:6f78c735f07c | 10 | * copies of the Software, and to permit persons to whom the Software is |
haarkon | 0:6f78c735f07c | 11 | * furnished to do so, subject to the following conditions: |
haarkon | 0:6f78c735f07c | 12 | * |
haarkon | 0:6f78c735f07c | 13 | * The above copyright notice and this permission notice shall be included in |
haarkon | 0:6f78c735f07c | 14 | * all copies or substantial portions of the Software. |
haarkon | 0:6f78c735f07c | 15 | * |
haarkon | 0:6f78c735f07c | 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
haarkon | 0:6f78c735f07c | 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
haarkon | 0:6f78c735f07c | 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
haarkon | 0:6f78c735f07c | 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
haarkon | 0:6f78c735f07c | 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
haarkon | 0:6f78c735f07c | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
haarkon | 0:6f78c735f07c | 22 | * THE SOFTWARE. |
haarkon | 0:6f78c735f07c | 23 | * |
haarkon | 0:6f78c735f07c | 24 | * @section DESCRIPTION |
haarkon | 0:6f78c735f07c | 25 | * |
haarkon | 0:6f78c735f07c | 26 | * CMUCAM 5 - Pixy |
haarkon | 0:6f78c735f07c | 27 | * |
haarkon | 0:6f78c735f07c | 28 | * Datasheet, FAQ and PC drivers : |
haarkon | 0:6f78c735f07c | 29 | * |
haarkon | 0:6f78c735f07c | 30 | * http://www.cmucam.org/projects/cmucam5 |
haarkon | 0:6f78c735f07c | 31 | */ |
haarkon | 0:6f78c735f07c | 32 | |
haarkon | 0:6f78c735f07c | 33 | #ifndef PIXY_H |
haarkon | 0:6f78c735f07c | 34 | #define PIXY_H |
haarkon | 0:6f78c735f07c | 35 | |
haarkon | 0:6f78c735f07c | 36 | /** |
haarkon | 0:6f78c735f07c | 37 | * Includes |
haarkon | 0:6f78c735f07c | 38 | */ |
haarkon | 0:6f78c735f07c | 39 | #include "mbed.h" |
haarkon | 0:6f78c735f07c | 40 | |
haarkon | 0:6f78c735f07c | 41 | /** |
haarkon | 0:6f78c735f07c | 42 | * Defines |
haarkon | 0:6f78c735f07c | 43 | */ |
haarkon | 0:6f78c735f07c | 44 | #define CC_BLOCSIZE 14 |
haarkon | 0:6f78c735f07c | 45 | #define N_BLOCSIZE 12 |
haarkon | 0:6f78c735f07c | 46 | |
haarkon | 0:6f78c735f07c | 47 | #define N_BLOCCODE 0xAA55 |
haarkon | 0:6f78c735f07c | 48 | #define CC_BLOCCODE 0xAA56 |
haarkon | 0:6f78c735f07c | 49 | |
haarkon | 0:6f78c735f07c | 50 | /** |
haarkon | 0:6f78c735f07c | 51 | * Types |
haarkon | 0:6f78c735f07c | 52 | */ |
haarkon | 0:6f78c735f07c | 53 | typedef unsigned char Byte; |
haarkon | 0:6f78c735f07c | 54 | typedef unsigned short Word; |
haarkon | 0:6f78c735f07c | 55 | typedef unsigned long lWord; |
haarkon | 0:6f78c735f07c | 56 | |
haarkon | 0:6f78c735f07c | 57 | typedef struct { |
haarkon | 0:6f78c735f07c | 58 | Word checksum; |
haarkon | 0:6f78c735f07c | 59 | Word signature; |
haarkon | 0:6f78c735f07c | 60 | Word x; |
haarkon | 0:6f78c735f07c | 61 | Word y; |
haarkon | 0:6f78c735f07c | 62 | Word width; |
haarkon | 0:6f78c735f07c | 63 | Word height; |
haarkon | 0:6f78c735f07c | 64 | Word angle; |
haarkon | 0:6f78c735f07c | 65 | } T_pixyCCBloc; |
haarkon | 0:6f78c735f07c | 66 | |
haarkon | 0:6f78c735f07c | 67 | typedef struct { |
haarkon | 0:6f78c735f07c | 68 | Word checksum; |
haarkon | 0:6f78c735f07c | 69 | Word signature; |
haarkon | 0:6f78c735f07c | 70 | Word x; |
haarkon | 0:6f78c735f07c | 71 | Word y; |
haarkon | 0:6f78c735f07c | 72 | Word width; |
haarkon | 0:6f78c735f07c | 73 | Word height; |
haarkon | 0:6f78c735f07c | 74 | } T_pixyNMBloc; |
haarkon | 0:6f78c735f07c | 75 | |
haarkon | 0:6f78c735f07c | 76 | typedef union { |
haarkon | 0:6f78c735f07c | 77 | Byte tab[14]; |
haarkon | 0:6f78c735f07c | 78 | T_pixyCCBloc CCbloc; |
haarkon | 0:6f78c735f07c | 79 | } T_pixyCCData; |
haarkon | 0:6f78c735f07c | 80 | |
haarkon | 0:6f78c735f07c | 81 | typedef union { |
haarkon | 0:6f78c735f07c | 82 | Byte tab[12]; |
haarkon | 0:6f78c735f07c | 83 | T_pixyNMBloc NMbloc; |
haarkon | 0:6f78c735f07c | 84 | } T_pixyNMData; |
haarkon | 0:6f78c735f07c | 85 | |
haarkon | 0:6f78c735f07c | 86 | typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState; |
haarkon | 0:6f78c735f07c | 87 | |
haarkon | 0:6f78c735f07c | 88 | typedef union { |
haarkon | 0:6f78c735f07c | 89 | lWord mot; |
haarkon | 0:6f78c735f07c | 90 | Byte tab[4]; |
haarkon | 0:6f78c735f07c | 91 | } T_tmpBuffer; |
haarkon | 0:6f78c735f07c | 92 | |
haarkon | 0:6f78c735f07c | 93 | typedef union { |
haarkon | 0:6f78c735f07c | 94 | Word mot; |
haarkon | 0:6f78c735f07c | 95 | Byte tab[2]; |
haarkon | 0:6f78c735f07c | 96 | } T_structBuffer; |
haarkon | 0:6f78c735f07c | 97 | |
haarkon | 0:6f78c735f07c | 98 | |
haarkon | 0:6f78c735f07c | 99 | |
haarkon | 0:6f78c735f07c | 100 | /** |
haarkon | 0:6f78c735f07c | 101 | * Pixy |
haarkon | 0:6f78c735f07c | 102 | */ |
haarkon | 0:6f78c735f07c | 103 | class PIXY { |
haarkon | 0:6f78c735f07c | 104 | |
haarkon | 0:6f78c735f07c | 105 | protected : |
haarkon | 0:6f78c735f07c | 106 | |
haarkon | 0:6f78c735f07c | 107 | Serial* _cmucam; |
haarkon | 0:6f78c735f07c | 108 | |
haarkon | 0:6f78c735f07c | 109 | public : |
haarkon | 0:6f78c735f07c | 110 | |
haarkon | 0:6f78c735f07c | 111 | /** |
haarkon | 0:6f78c735f07c | 112 | * Variables globales |
haarkon | 0:6f78c735f07c | 113 | * |
haarkon | 0:6f78c735f07c | 114 | * @note |
haarkon | 0:6f78c735f07c | 115 | * A FIFO is a circular buffer where data are stored in the order in witch |
haarkon | 0:6f78c735f07c | 116 | * they arrive. You need 2 variables to point both read and write registers. |
haarkon | 0:6f78c735f07c | 117 | * The library manage both pointers, but access to the FIFO is allowed from |
haarkon | 0:6f78c735f07c | 118 | * outside of the library, so you can manage your own read pointers. |
haarkon | 0:6f78c735f07c | 119 | * Write pointers are strictly private. |
haarkon | 0:6f78c735f07c | 120 | * |
haarkon | 0:6f78c735f07c | 121 | * @section DESCRIPTION |
haarkon | 0:6f78c735f07c | 122 | * Pixy_CCFIFO is a FIFO where the Color Code objects are stored |
haarkon | 0:6f78c735f07c | 123 | * Pixy_NMFIFO is a FIFO where the Normal objects are stored |
haarkon | 0:6f78c735f07c | 124 | * Pixy_CCObjet is the number of CC object read from the CAM during the last frame |
haarkon | 0:6f78c735f07c | 125 | * Pixy_NMObjet is the number of normal object read from the CAM during the last frame |
haarkon | 0:6f78c735f07c | 126 | */ |
haarkon | 0:6f78c735f07c | 127 | T_pixyCCData Pixy_CCFIFO[20]; // FIFO des objets ColorCode |
haarkon | 0:6f78c735f07c | 128 | T_pixyNMData Pixy_NMFIFO[20]; // FIFO des objets Normaux |
haarkon | 0:6f78c735f07c | 129 | Byte Pixy_CCObjet; // Nombre d'objets de type Color Code |
haarkon | 0:6f78c735f07c | 130 | Byte Pixy_NMObjet; // Nombre d'objets Normaux |
haarkon | 0:6f78c735f07c | 131 | Byte Pixy_FirstCCObjet; // Position dans la FIFO du premier objet de la trame suivante |
haarkon | 0:6f78c735f07c | 132 | Byte Pixy_FirstNMObjet; // Position dans la FIFO du premier objet de la trame suivante |
haarkon | 0:6f78c735f07c | 133 | |
haarkon | 0:6f78c735f07c | 134 | |
haarkon | 0:6f78c735f07c | 135 | /** Liste des Sémaphores |
haarkon | 0:6f78c735f07c | 136 | * |
haarkon | 0:6f78c735f07c | 137 | * @note |
haarkon | 0:6f78c735f07c | 138 | * Semaphore are global variable used to communicate from ISR with main routine |
haarkon | 0:6f78c735f07c | 139 | * All semaphores must be cleared by user. |
haarkon | 0:6f78c735f07c | 140 | * |
haarkon | 0:6f78c735f07c | 141 | * @section DESCRIPTION |
haarkon | 0:6f78c735f07c | 142 | * FlagPixy is automaticly set after each received image frame |
haarkon | 0:6f78c735f07c | 143 | * FlagPixyOverflow is automaticly set if any FIFO oveflows (more than 20 obj). |
haarkon | 0:6f78c735f07c | 144 | */ |
haarkon | 0:6f78c735f07c | 145 | int FlagPixy, FlagPixyOverflow; |
haarkon | 0:6f78c735f07c | 146 | int Pixy_check; |
haarkon | 0:6f78c735f07c | 147 | |
haarkon | 0:6f78c735f07c | 148 | /** |
haarkon | 0:6f78c735f07c | 149 | * Constructor. |
haarkon | 0:6f78c735f07c | 150 | * |
haarkon | 0:6f78c735f07c | 151 | * @param tx is the Mbed pin used as TX |
haarkon | 0:6f78c735f07c | 152 | * @param rx is the Mbed pin used as RX |
haarkon | 0:6f78c735f07c | 153 | * @param debit is the bitrate of the serial (max value is 230400 b/s) |
haarkon | 0:6f78c735f07c | 154 | */ |
haarkon | 0:6f78c735f07c | 155 | PIXY(PinName tx, PinName rx, int debit =230400); |
haarkon | 0:6f78c735f07c | 156 | |
haarkon | 0:6f78c735f07c | 157 | /** |
haarkon | 0:6f78c735f07c | 158 | * Return the number of objects (normal and ColorCode) that have been |
haarkon | 0:6f78c735f07c | 159 | * received from the PIXY during the last frame |
haarkon | 0:6f78c735f07c | 160 | * |
haarkon | 0:6f78c735f07c | 161 | * @param nbNormal (passed by reference) number of normal object detected |
haarkon | 0:6f78c735f07c | 162 | * @param nbCC (passed by reference) number of color code object detected |
haarkon | 0:6f78c735f07c | 163 | * @return : 0 if sucessfull, |
haarkon | 0:6f78c735f07c | 164 | * -1 if no PIXY is talking, |
haarkon | 0:6f78c735f07c | 165 | * -2 if object(s) have been lost (from previous frame or from actual) |
haarkon | 0:6f78c735f07c | 166 | */ |
haarkon | 0:6f78c735f07c | 167 | int detectedObject (int* nbNormal, int* nbCC); |
haarkon | 0:6f78c735f07c | 168 | |
haarkon | 0:6f78c735f07c | 169 | /** |
haarkon | 0:6f78c735f07c | 170 | * Reads the oldest Color Code object from the last frame received |
haarkon | 0:6f78c735f07c | 171 | * |
haarkon | 0:6f78c735f07c | 172 | * @note : also manage the Color Code FIFO |
haarkon | 0:6f78c735f07c | 173 | * |
haarkon | 0:6f78c735f07c | 174 | * @return a T_PixyCCBloc (see .h for details) |
haarkon | 0:6f78c735f07c | 175 | */ |
haarkon | 0:6f78c735f07c | 176 | T_pixyCCBloc getCCBloc (void); |
haarkon | 0:6f78c735f07c | 177 | |
haarkon | 0:6f78c735f07c | 178 | /** |
haarkon | 0:6f78c735f07c | 179 | * Reads the oldest Normal object from the last frame received |
haarkon | 0:6f78c735f07c | 180 | * |
haarkon | 0:6f78c735f07c | 181 | * @note : also manage the Normal FIFO |
haarkon | 0:6f78c735f07c | 182 | * |
haarkon | 0:6f78c735f07c | 183 | * @return a T_PixyNMBloc (see .h for details) |
haarkon | 0:6f78c735f07c | 184 | */ |
haarkon | 0:6f78c735f07c | 185 | T_pixyNMBloc getNMBloc (void); |
haarkon | 0:6f78c735f07c | 186 | |
haarkon | 0:6f78c735f07c | 187 | /** |
haarkon | 0:6f78c735f07c | 188 | * Set the Brightness of the Pixy |
haarkon | 0:6f78c735f07c | 189 | * |
haarkon | 0:6f78c735f07c | 190 | * @param brightness level (between 0 and 255) |
haarkon | 0:6f78c735f07c | 191 | * @return 0 if successfull, else -1 |
haarkon | 0:6f78c735f07c | 192 | */ |
haarkon | 0:6f78c735f07c | 193 | int setBrightness (Byte brightness); |
haarkon | 0:6f78c735f07c | 194 | |
haarkon | 0:6f78c735f07c | 195 | private : |
haarkon | 0:6f78c735f07c | 196 | |
haarkon | 0:6f78c735f07c | 197 | int Pixy_CCFrameIsNew, Pixy_NMFrameIsNew; |
haarkon | 0:6f78c735f07c | 198 | |
haarkon | 0:6f78c735f07c | 199 | /** |
haarkon | 0:6f78c735f07c | 200 | * Fonction d'interruption de lecture sur la liaison série. |
haarkon | 0:6f78c735f07c | 201 | */ |
haarkon | 0:6f78c735f07c | 202 | void getPixyByte(); |
haarkon | 0:6f78c735f07c | 203 | |
haarkon | 0:6f78c735f07c | 204 | |
haarkon | 0:6f78c735f07c | 205 | }; |
haarkon | 0:6f78c735f07c | 206 | |
haarkon | 0:6f78c735f07c | 207 | #endif /* PIXY_H */ |