pixy2 smart camera library www.pixycam.com

Pixy2 Library project (using UART interface)

Committer:
haarkon
Date:
Thu Feb 28 08:34:15 2019 +0000
Revision:
0:dde1b9d6c9d6
Child:
1:dd81f4065b6b
Safety reccording for Pixy2 library.; ; CAUTION -- Not Working -- CAUTION

Who changed what in which revision?

UserRevisionLine numberNew contents of line
haarkon 0:dde1b9d6c9d6 1 /**
haarkon 0:dde1b9d6c9d6 2 * @author Hugues Angelis
haarkon 0:dde1b9d6c9d6 3 *
haarkon 0:dde1b9d6c9d6 4 * @section LICENSE
haarkon 0:dde1b9d6c9d6 5 *
haarkon 0:dde1b9d6c9d6 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
haarkon 0:dde1b9d6c9d6 7 * of this software and associated documentation files (the "Software"), to deal
haarkon 0:dde1b9d6c9d6 8 * in the Software without restriction, including without limitation the rights
haarkon 0:dde1b9d6c9d6 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
haarkon 0:dde1b9d6c9d6 10 * copies of the Software, and to permit persons to whom the Software is
haarkon 0:dde1b9d6c9d6 11 * furnished to do so, subject to the following conditions:
haarkon 0:dde1b9d6c9d6 12 *
haarkon 0:dde1b9d6c9d6 13 * The above copyright notice and this permission notice shall be included in
haarkon 0:dde1b9d6c9d6 14 * all copies or substantial portions of the Software.
haarkon 0:dde1b9d6c9d6 15 *
haarkon 0:dde1b9d6c9d6 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
haarkon 0:dde1b9d6c9d6 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
haarkon 0:dde1b9d6c9d6 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
haarkon 0:dde1b9d6c9d6 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
haarkon 0:dde1b9d6c9d6 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
haarkon 0:dde1b9d6c9d6 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
haarkon 0:dde1b9d6c9d6 22 * THE SOFTWARE.
haarkon 0:dde1b9d6c9d6 23 *
haarkon 0:dde1b9d6c9d6 24 * @section DESCRIPTION
haarkon 0:dde1b9d6c9d6 25 *
haarkon 0:dde1b9d6c9d6 26 * CMUCAM 5 - Pixy2
haarkon 0:dde1b9d6c9d6 27 *
haarkon 0:dde1b9d6c9d6 28 * Datasheet, FAQ and PC drivers :
haarkon 0:dde1b9d6c9d6 29 *
haarkon 0:dde1b9d6c9d6 30 * http://www.pixycam.com/
haarkon 0:dde1b9d6c9d6 31 */
haarkon 0:dde1b9d6c9d6 32
haarkon 0:dde1b9d6c9d6 33 #ifndef _PIXY2_
haarkon 0:dde1b9d6c9d6 34 #define _PIXY2_
haarkon 0:dde1b9d6c9d6 35
haarkon 0:dde1b9d6c9d6 36 /**
haarkon 0:dde1b9d6c9d6 37 * Include : Mbed Library
haarkon 0:dde1b9d6c9d6 38 */
haarkon 0:dde1b9d6c9d6 39 #include "mbed.h"
haarkon 0:dde1b9d6c9d6 40
haarkon 0:dde1b9d6c9d6 41 /**
haarkon 0:dde1b9d6c9d6 42 * Defines
haarkon 0:dde1b9d6c9d6 43 */
haarkon 0:dde1b9d6c9d6 44 #define PIXY2_NCSHEADERSIZE 4
haarkon 0:dde1b9d6c9d6 45 #define PIXY2_CSHEADERSIZE 4
haarkon 0:dde1b9d6c9d6 46 #define PIXY2_SYNC 0xC1AE
haarkon 0:dde1b9d6c9d6 47 #define PIXY2_CSSYNC 0xC1AF
haarkon 0:dde1b9d6c9d6 48 #define PIXY2_ACK 1
haarkon 0:dde1b9d6c9d6 49 #define PIXY2_ASK_RESOL 12
haarkon 0:dde1b9d6c9d6 50 #define PIXY2_REP_RESOL 13
haarkon 0:dde1b9d6c9d6 51 #define PIXY2_ASK_VERS 14
haarkon 0:dde1b9d6c9d6 52 #define PIXY2_REP_VERS 15
haarkon 0:dde1b9d6c9d6 53 #define PIXY2_SET_BRIGHT 16
haarkon 0:dde1b9d6c9d6 54 #define PIXY2_SET_SERVOS 18
haarkon 0:dde1b9d6c9d6 55 #define PIXY2_SET_LED 20
haarkon 0:dde1b9d6c9d6 56 #define PIXY2_SET_LAMP 22
haarkon 0:dde1b9d6c9d6 57 #define PIXY2_ASK_FPS 24
haarkon 0:dde1b9d6c9d6 58 #define PIXY2_ASK_BLOC 32
haarkon 0:dde1b9d6c9d6 59 #define PIXY2_REP_BLOC 33
haarkon 0:dde1b9d6c9d6 60 #define PIXY2_ASK_LINE 48
haarkon 0:dde1b9d6c9d6 61 #define PIXY2_REP_LINE 49
haarkon 0:dde1b9d6c9d6 62 #define PIXY2_SET_MODE 54
haarkon 0:dde1b9d6c9d6 63 #define PIXY2_SET_TURN 58
haarkon 0:dde1b9d6c9d6 64 #define PIXY2_SET_VECTOR 56
haarkon 0:dde1b9d6c9d6 65 #define PIXY2_SET_DEFTURN 60
haarkon 0:dde1b9d6c9d6 66 #define PIXY2_SET_REVERSE 62
haarkon 0:dde1b9d6c9d6 67 #define PIXY2_ASK_VIDEO 112
haarkon 0:dde1b9d6c9d6 68
haarkon 0:dde1b9d6c9d6 69 /**
haarkon 0:dde1b9d6c9d6 70 * \struct Byte -> Short hand for unsigned char
haarkon 0:dde1b9d6c9d6 71 * \struct Word -> Short hand for unsigned short
haarkon 0:dde1b9d6c9d6 72 * \struct lWord -> Short hand for unsigned long
haarkon 0:dde1b9d6c9d6 73 */
haarkon 0:dde1b9d6c9d6 74 typedef unsigned char Byte;
haarkon 0:dde1b9d6c9d6 75 typedef unsigned short Word;
haarkon 0:dde1b9d6c9d6 76 typedef unsigned long lWord;
haarkon 0:dde1b9d6c9d6 77
haarkon 0:dde1b9d6c9d6 78 typedef enum {idle, messageSent, receivingHeader, headerReceived, receivingData, dataReceived} T_Pixy2State;
haarkon 0:dde1b9d6c9d6 79
haarkon 0:dde1b9d6c9d6 80 typedef union {
haarkon 0:dde1b9d6c9d6 81 Word mot;
haarkon 0:dde1b9d6c9d6 82 Byte octet[2];
haarkon 0:dde1b9d6c9d6 83 }T_Word;
haarkon 0:dde1b9d6c9d6 84
haarkon 0:dde1b9d6c9d6 85 typedef union {
haarkon 0:dde1b9d6c9d6 86 lWord motLong;
haarkon 0:dde1b9d6c9d6 87 Word mot[2];
haarkon 0:dde1b9d6c9d6 88 Byte octet[4];
haarkon 0:dde1b9d6c9d6 89 }T_lWord;
haarkon 0:dde1b9d6c9d6 90
haarkon 0:dde1b9d6c9d6 91 typedef struct {
haarkon 0:dde1b9d6c9d6 92 Word pixSync;
haarkon 0:dde1b9d6c9d6 93 Byte pixType;
haarkon 0:dde1b9d6c9d6 94 Byte pixLength;
haarkon 0:dde1b9d6c9d6 95 }T_pixy2Header;
haarkon 0:dde1b9d6c9d6 96
haarkon 0:dde1b9d6c9d6 97 typedef struct {
haarkon 0:dde1b9d6c9d6 98 T_pixy2Header header;
haarkon 0:dde1b9d6c9d6 99 Byte data[5];
haarkon 0:dde1b9d6c9d6 100 }T_pixy2sendFrame;
haarkon 0:dde1b9d6c9d6 101
haarkon 0:dde1b9d6c9d6 102 typedef union {
haarkon 0:dde1b9d6c9d6 103 T_pixy2sendFrame frame;
haarkon 0:dde1b9d6c9d6 104 Byte data[9];
haarkon 0:dde1b9d6c9d6 105 }T_pixy2sendBuffer;
haarkon 0:dde1b9d6c9d6 106
haarkon 0:dde1b9d6c9d6 107 typedef struct {
haarkon 0:dde1b9d6c9d6 108 Word pixSync;
haarkon 0:dde1b9d6c9d6 109 Byte pixType;
haarkon 0:dde1b9d6c9d6 110 Byte pixLength;
haarkon 0:dde1b9d6c9d6 111 Word pixChecksum;
haarkon 0:dde1b9d6c9d6 112 }T_pixy2RcvHeader;
haarkon 0:dde1b9d6c9d6 113
haarkon 0:dde1b9d6c9d6 114 typedef struct {
haarkon 0:dde1b9d6c9d6 115 lWord pixAck;
haarkon 0:dde1b9d6c9d6 116 }T_pixy2AckCode;
haarkon 0:dde1b9d6c9d6 117
haarkon 0:dde1b9d6c9d6 118 typedef struct {
haarkon 0:dde1b9d6c9d6 119 Word pixHWVersion;
haarkon 0:dde1b9d6c9d6 120 Byte pixFWVersionMaj;
haarkon 0:dde1b9d6c9d6 121 Byte pixFWVersionMin;
haarkon 0:dde1b9d6c9d6 122 Word pixFWBuild;
haarkon 0:dde1b9d6c9d6 123 char pixHFString[10];
haarkon 0:dde1b9d6c9d6 124 }T_Pixy2Version;
haarkon 0:dde1b9d6c9d6 125
haarkon 0:dde1b9d6c9d6 126 typedef struct {
haarkon 0:dde1b9d6c9d6 127 Word pixFrameWidth;
haarkon 0:dde1b9d6c9d6 128 Word pixFrameHeigth;
haarkon 0:dde1b9d6c9d6 129 }T_Pixy2Resolution;
haarkon 0:dde1b9d6c9d6 130
haarkon 0:dde1b9d6c9d6 131 typedef struct {
haarkon 0:dde1b9d6c9d6 132 lWord pixFps;
haarkon 0:dde1b9d6c9d6 133 }T_pixy2Framerate;
haarkon 0:dde1b9d6c9d6 134
haarkon 0:dde1b9d6c9d6 135 typedef struct {
haarkon 0:dde1b9d6c9d6 136 Word pixSignature;
haarkon 0:dde1b9d6c9d6 137 Word pixX;
haarkon 0:dde1b9d6c9d6 138 Word pixY;
haarkon 0:dde1b9d6c9d6 139 Word pixWidth;
haarkon 0:dde1b9d6c9d6 140 Word pixHeight;
haarkon 0:dde1b9d6c9d6 141 Word pixAngle;
haarkon 0:dde1b9d6c9d6 142 Byte pixIndex;
haarkon 0:dde1b9d6c9d6 143 Byte pixAge;
haarkon 0:dde1b9d6c9d6 144 }T_pixy2Bloc;
haarkon 0:dde1b9d6c9d6 145
haarkon 0:dde1b9d6c9d6 146 typedef struct {
haarkon 0:dde1b9d6c9d6 147 Byte pixX0;
haarkon 0:dde1b9d6c9d6 148 Byte pixY0;
haarkon 0:dde1b9d6c9d6 149 Byte pixX1;
haarkon 0:dde1b9d6c9d6 150 Byte pixY1;
haarkon 0:dde1b9d6c9d6 151 Byte pixIndex;
haarkon 0:dde1b9d6c9d6 152 Byte pixFlags;
haarkon 0:dde1b9d6c9d6 153 }T_Pixy2Vector;
haarkon 0:dde1b9d6c9d6 154
haarkon 0:dde1b9d6c9d6 155 typedef struct {
haarkon 0:dde1b9d6c9d6 156 Byte pixIndex;
haarkon 0:dde1b9d6c9d6 157 Byte pixReserved;
haarkon 0:dde1b9d6c9d6 158 Word pixAngle;
haarkon 0:dde1b9d6c9d6 159 }T_Pixy2InterLine;
haarkon 0:dde1b9d6c9d6 160
haarkon 0:dde1b9d6c9d6 161 typedef struct {
haarkon 0:dde1b9d6c9d6 162 Byte pixX;
haarkon 0:dde1b9d6c9d6 163 Byte pixY;
haarkon 0:dde1b9d6c9d6 164 Byte pixN;
haarkon 0:dde1b9d6c9d6 165 Byte pixReserved;
haarkon 0:dde1b9d6c9d6 166 }T_pixy2Intersection;
haarkon 0:dde1b9d6c9d6 167
haarkon 0:dde1b9d6c9d6 168 typedef struct {
haarkon 0:dde1b9d6c9d6 169 Byte pixX;
haarkon 0:dde1b9d6c9d6 170 Byte pixY;
haarkon 0:dde1b9d6c9d6 171 Byte pixFlag;
haarkon 0:dde1b9d6c9d6 172 Byte pixCode;
haarkon 0:dde1b9d6c9d6 173 }T_pixy2BarCode;
haarkon 0:dde1b9d6c9d6 174
haarkon 0:dde1b9d6c9d6 175 typedef struct {
haarkon 0:dde1b9d6c9d6 176 Byte pixType;
haarkon 0:dde1b9d6c9d6 177 Byte pixLength;
haarkon 0:dde1b9d6c9d6 178 }T_pixy2LineFeature;
haarkon 0:dde1b9d6c9d6 179
haarkon 0:dde1b9d6c9d6 180 typedef struct {
haarkon 0:dde1b9d6c9d6 181 Byte pixBlue;
haarkon 0:dde1b9d6c9d6 182 Byte pixGreen;
haarkon 0:dde1b9d6c9d6 183 Byte pixRed;
haarkon 0:dde1b9d6c9d6 184 }T_pixy2Pixel;
haarkon 0:dde1b9d6c9d6 185
haarkon 0:dde1b9d6c9d6 186 /**
haarkon 0:dde1b9d6c9d6 187 * Pixy2 : CMU CAM 5 - Smart camera
haarkon 0:dde1b9d6c9d6 188 * More informations at http://www.pixycam.com/
haarkon 0:dde1b9d6c9d6 189 */
haarkon 0:dde1b9d6c9d6 190 class PIXY2 {
haarkon 0:dde1b9d6c9d6 191
haarkon 0:dde1b9d6c9d6 192 protected :
haarkon 0:dde1b9d6c9d6 193
haarkon 0:dde1b9d6c9d6 194 Serial* _Pixy2;
haarkon 0:dde1b9d6c9d6 195
haarkon 0:dde1b9d6c9d6 196 public :
haarkon 0:dde1b9d6c9d6 197 /**
haarkon 0:dde1b9d6c9d6 198 * Constructor of pixy2 object.
haarkon 0:dde1b9d6c9d6 199 *
haarkon 0:dde1b9d6c9d6 200 * @param tx : the Mbed pin used as TX
haarkon 0:dde1b9d6c9d6 201 * @param rx : the Mbed pin used as RX
haarkon 0:dde1b9d6c9d6 202 * @param debit : the bitrate of the serial (max value is 230400 b/s)
haarkon 0:dde1b9d6c9d6 203 */
haarkon 0:dde1b9d6c9d6 204 PIXY2(PinName tx, PinName rx, int debit = 230400);
haarkon 0:dde1b9d6c9d6 205
haarkon 0:dde1b9d6c9d6 206 // Fonctions publiques
haarkon 0:dde1b9d6c9d6 207 int pixy2_getVersion (T_Pixy2Version *version);
haarkon 0:dde1b9d6c9d6 208 int pixy2_getResolution (T_Pixy2Resolution *resolution);
haarkon 0:dde1b9d6c9d6 209 int pixy2_setCameraBrightness (Byte brightness);
haarkon 0:dde1b9d6c9d6 210 int pixy2_setServos (Word s0, Word s1);
haarkon 0:dde1b9d6c9d6 211 int pixy2_setLED (Byte red, Byte green, Byte blue);
haarkon 0:dde1b9d6c9d6 212 int pixy2_setLamp (Byte upper, Byte lower);
haarkon 0:dde1b9d6c9d6 213 int pixy2_getFPS (T_pixy2Framerate framerate);
haarkon 0:dde1b9d6c9d6 214 int pixy2_getBlocks (Byte sigmap, Byte maxBloc);
haarkon 0:dde1b9d6c9d6 215 int pixy2_getMainFeature (Byte type, Byte features);
haarkon 0:dde1b9d6c9d6 216 int pixy2_getAllFeature (Byte features);
haarkon 0:dde1b9d6c9d6 217 int pixy2_setMode (Byte mode);
haarkon 0:dde1b9d6c9d6 218 int pixy2_setNexTurn (Word angle);
haarkon 0:dde1b9d6c9d6 219 int pixy2_setDefaultTurn (Word angle);
haarkon 0:dde1b9d6c9d6 220 int pixy2_setVector (Byte vectorIndex);
haarkon 0:dde1b9d6c9d6 221 int pixy2_ReverseVector (void);
haarkon 0:dde1b9d6c9d6 222 int pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel);
haarkon 0:dde1b9d6c9d6 223
haarkon 0:dde1b9d6c9d6 224 // Variables globales Publiques
haarkon 0:dde1b9d6c9d6 225 Byte Pixy2_numBlocks;
haarkon 0:dde1b9d6c9d6 226 T_pixy2Bloc Pixy2_blocks[];
haarkon 0:dde1b9d6c9d6 227 Byte Pixy2_numVectors;
haarkon 0:dde1b9d6c9d6 228 T_Pixy2Vector Pixy2_vectors[];
haarkon 0:dde1b9d6c9d6 229 Byte Pixy2_numIntersections;
haarkon 0:dde1b9d6c9d6 230 T_pixy2Intersection Pixy2_intersections[];
haarkon 0:dde1b9d6c9d6 231 T_Pixy2InterLine Pixy2_intLines[];
haarkon 0:dde1b9d6c9d6 232 Byte Pixy2_numBarcodes;
haarkon 0:dde1b9d6c9d6 233 T_pixy2BarCode Pixy2_barcodes[];
haarkon 0:dde1b9d6c9d6 234
haarkon 0:dde1b9d6c9d6 235 private :
haarkon 0:dde1b9d6c9d6 236 // Variables globales Privées
haarkon 0:dde1b9d6c9d6 237 T_Pixy2State etat;
haarkon 0:dde1b9d6c9d6 238 Byte* Pixy2_buffer;
haarkon 0:dde1b9d6c9d6 239 Byte wPointer, rPointer, dataSize;
haarkon 0:dde1b9d6c9d6 240 Byte frameContainChecksum;
haarkon 0:dde1b9d6c9d6 241
haarkon 0:dde1b9d6c9d6 242 // Fonctions privées
haarkon 0:dde1b9d6c9d6 243 int pixy2_sndGetVersion (void);
haarkon 0:dde1b9d6c9d6 244 int pixy2_sndGetResolution (void);
haarkon 0:dde1b9d6c9d6 245 int pixy2_sndSetCameraBrightness (Byte brightness);
haarkon 0:dde1b9d6c9d6 246 int pixy2_sndSetServo (Word s0, Word s1);
haarkon 0:dde1b9d6c9d6 247 int pixy2_sndSetLED (Byte red, Byte green, Byte blue);
haarkon 0:dde1b9d6c9d6 248 int pixy2_sndSetLamp (Byte upper, Byte lower);
haarkon 0:dde1b9d6c9d6 249 int pixy2_sndGetFPS (void);
haarkon 0:dde1b9d6c9d6 250 int pixy2_sndGetBlocks (Byte sigmap, Byte maxBloc);
haarkon 0:dde1b9d6c9d6 251 int pixy2_sndGetMainFeature (Byte type, Byte feature);
haarkon 0:dde1b9d6c9d6 252 int pixy2_sndSetMode (Byte mode);
haarkon 0:dde1b9d6c9d6 253 int pixy2_sndSetNexTurn (Word angle);
haarkon 0:dde1b9d6c9d6 254 int pixy2_sndSetDefaultTurn (Word angle);
haarkon 0:dde1b9d6c9d6 255 int pixy2_sndSetVector (Byte vectorIndex);
haarkon 0:dde1b9d6c9d6 256 int pixy2_sndReverseVector (void);
haarkon 0:dde1b9d6c9d6 257 int pixy2_sndGetRGB (Word x, Word y, Byte saturate);
haarkon 0:dde1b9d6c9d6 258
haarkon 0:dde1b9d6c9d6 259 void pixy2_getByte ();
haarkon 0:dde1b9d6c9d6 260 int pixy2_validateChecksum (Byte* tab);
haarkon 0:dde1b9d6c9d6 261 };
haarkon 0:dde1b9d6c9d6 262
haarkon 0:dde1b9d6c9d6 263 #endif