pixy2 smart camera library www.pixycam.com

Pixy2 Library project (using UART interface)

Revision:
0:dde1b9d6c9d6
Child:
1:dd81f4065b6b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pixy2.h	Thu Feb 28 08:34:15 2019 +0000
@@ -0,0 +1,263 @@
+/**
+ * @author Hugues Angelis
+ *
+ * @section LICENSE
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @section DESCRIPTION
+ *
+ * CMUCAM 5 - Pixy2
+ *
+ * Datasheet, FAQ and PC drivers :
+ *
+ * http://www.pixycam.com/
+ */
+
+#ifndef _PIXY2_
+#define _PIXY2_
+
+/**
+ * Include : Mbed Library
+ */
+#include "mbed.h"
+
+/**
+ * Defines
+ */
+#define PIXY2_NCSHEADERSIZE 4
+#define PIXY2_CSHEADERSIZE  4
+#define PIXY2_SYNC          0xC1AE
+#define PIXY2_CSSYNC        0xC1AF
+#define PIXY2_ACK           1
+#define PIXY2_ASK_RESOL     12
+#define PIXY2_REP_RESOL     13
+#define PIXY2_ASK_VERS      14
+#define PIXY2_REP_VERS      15
+#define PIXY2_SET_BRIGHT    16
+#define PIXY2_SET_SERVOS    18
+#define PIXY2_SET_LED       20
+#define PIXY2_SET_LAMP      22
+#define PIXY2_ASK_FPS       24
+#define PIXY2_ASK_BLOC      32
+#define PIXY2_REP_BLOC      33
+#define PIXY2_ASK_LINE      48
+#define PIXY2_REP_LINE      49
+#define PIXY2_SET_MODE      54
+#define PIXY2_SET_TURN      58
+#define PIXY2_SET_VECTOR    56
+#define PIXY2_SET_DEFTURN   60
+#define PIXY2_SET_REVERSE   62
+#define PIXY2_ASK_VIDEO     112
+ 
+/**
+ *  \struct Byte    ->      Short hand for unsigned char
+ *  \struct Word    ->      Short hand for unsigned short
+ *  \struct lWord   ->      Short hand for unsigned long
+ */
+typedef unsigned char   Byte;
+typedef unsigned short  Word;
+typedef unsigned long   lWord;
+
+typedef enum {idle, messageSent, receivingHeader, headerReceived, receivingData, dataReceived} T_Pixy2State;
+
+typedef union {
+    Word    mot;
+    Byte    octet[2];
+}T_Word;
+
+typedef union {
+    lWord   motLong;
+    Word    mot[2];
+    Byte    octet[4];
+}T_lWord;
+
+typedef struct {
+    Word                pixSync;
+    Byte                pixType;
+    Byte                pixLength;
+}T_pixy2Header;
+
+typedef struct {
+    T_pixy2Header       header;
+    Byte                data[5];
+}T_pixy2sendFrame;
+
+typedef union {
+    T_pixy2sendFrame    frame;
+    Byte                data[9];
+}T_pixy2sendBuffer;
+
+typedef struct {
+    Word                pixSync;
+    Byte                pixType;
+    Byte                pixLength;
+    Word                pixChecksum;
+}T_pixy2RcvHeader;
+
+typedef struct {
+    lWord               pixAck;
+}T_pixy2AckCode;
+
+typedef struct {
+    Word                pixHWVersion;
+    Byte                pixFWVersionMaj;
+    Byte                pixFWVersionMin;
+    Word                pixFWBuild;
+    char                pixHFString[10];
+}T_Pixy2Version;
+
+typedef struct {
+    Word                pixFrameWidth;
+    Word                pixFrameHeigth;
+}T_Pixy2Resolution;
+
+typedef struct {
+    lWord               pixFps;
+}T_pixy2Framerate;
+
+typedef struct {
+    Word                pixSignature;
+    Word                pixX;
+    Word                pixY;
+    Word                pixWidth;
+    Word                pixHeight;
+    Word                pixAngle;
+    Byte                pixIndex;
+    Byte                pixAge;
+}T_pixy2Bloc;
+
+typedef struct {
+    Byte                pixX0;
+    Byte                pixY0;
+    Byte                pixX1;
+    Byte                pixY1;
+    Byte                pixIndex;
+    Byte                pixFlags;
+}T_Pixy2Vector;
+
+typedef struct {
+    Byte                pixIndex;
+    Byte                pixReserved;
+    Word                pixAngle;
+}T_Pixy2InterLine;
+
+typedef struct {
+    Byte                pixX;
+    Byte                pixY;
+    Byte                pixN;
+    Byte                pixReserved;
+}T_pixy2Intersection;
+
+typedef struct {
+    Byte                pixX;
+    Byte                pixY;
+    Byte                pixFlag;
+    Byte                pixCode;
+}T_pixy2BarCode;
+
+typedef struct {
+    Byte                pixType;
+    Byte                pixLength;
+}T_pixy2LineFeature;
+
+typedef struct {
+    Byte                pixBlue;
+    Byte                pixGreen;
+    Byte                pixRed;
+}T_pixy2Pixel;
+
+/**
+ * Pixy2 : CMU CAM 5 - Smart camera
+ * More informations at http://www.pixycam.com/
+ */
+class PIXY2 {
+
+protected :
+
+Serial*  _Pixy2;
+
+public :
+/**
+ * Constructor of pixy2 object.
+ *
+ * @param tx : the Mbed pin used as TX
+ * @param rx : the Mbed pin used as RX
+ * @param debit : the bitrate of the serial (max value is 230400 b/s)
+ */
+PIXY2(PinName tx, PinName rx, int debit = 230400);
+
+// Fonctions publiques
+int pixy2_getVersion (T_Pixy2Version *version);
+int pixy2_getResolution (T_Pixy2Resolution *resolution);
+int pixy2_setCameraBrightness (Byte brightness);
+int pixy2_setServos (Word s0, Word s1); 
+int pixy2_setLED (Byte red, Byte green, Byte blue);
+int pixy2_setLamp (Byte upper, Byte lower);
+int pixy2_getFPS (T_pixy2Framerate framerate);
+int pixy2_getBlocks (Byte sigmap, Byte maxBloc);
+int pixy2_getMainFeature (Byte type, Byte features);
+int pixy2_getAllFeature (Byte features);
+int pixy2_setMode (Byte mode);
+int pixy2_setNexTurn (Word angle);
+int pixy2_setDefaultTurn (Word angle);
+int pixy2_setVector (Byte vectorIndex);
+int pixy2_ReverseVector (void);
+int pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel);
+
+// Variables globales Publiques
+Byte                Pixy2_numBlocks;
+T_pixy2Bloc         Pixy2_blocks[];
+Byte                Pixy2_numVectors;
+T_Pixy2Vector       Pixy2_vectors[];
+Byte                Pixy2_numIntersections;
+T_pixy2Intersection Pixy2_intersections[];
+T_Pixy2InterLine    Pixy2_intLines[];
+Byte                Pixy2_numBarcodes;
+T_pixy2BarCode      Pixy2_barcodes[];
+
+private :
+// Variables globales Privées
+T_Pixy2State        etat;
+Byte*               Pixy2_buffer;
+Byte                wPointer, rPointer, dataSize;
+Byte                frameContainChecksum;
+
+// Fonctions privées
+int pixy2_sndGetVersion (void);
+int pixy2_sndGetResolution (void);
+int pixy2_sndSetCameraBrightness (Byte brightness);
+int pixy2_sndSetServo (Word s0, Word s1);
+int pixy2_sndSetLED (Byte red, Byte green, Byte blue);
+int pixy2_sndSetLamp (Byte upper, Byte lower);
+int pixy2_sndGetFPS (void);
+int pixy2_sndGetBlocks (Byte sigmap, Byte maxBloc);
+int pixy2_sndGetMainFeature (Byte type, Byte feature);
+int pixy2_sndSetMode (Byte mode);
+int pixy2_sndSetNexTurn (Word angle);
+int pixy2_sndSetDefaultTurn (Word angle);
+int pixy2_sndSetVector (Byte vectorIndex);
+int pixy2_sndReverseVector (void);
+int pixy2_sndGetRGB (Word x, Word y, Byte saturate);
+
+void pixy2_getByte ();
+int pixy2_validateChecksum (Byte* tab);
+};
+
+#endif        
\ No newline at end of file