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.
Diff: pixy2.h
- Revision:
- 0:dde1b9d6c9d6
- Child:
- 1:dd81f4065b6b
diff -r 000000000000 -r dde1b9d6c9d6 pixy2.h
--- /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