Library for Pixy - CMUCAM5 smart camera
Dependents: TestPixy FRC_2018 FRC2018_Bis 0hackton_08_06_18 ... more
Fork of Pixy by
Diff: Pixy.h
- Revision:
- 0:6f78c735f07c
- Child:
- 1:183ebbbc9c2e
diff -r 000000000000 -r 6f78c735f07c Pixy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pixy.h Sun May 20 08:18:49 2018 +0000 @@ -0,0 +1,209 @@ +/** + * @author Hugues Angelis + * + * @section LICENSE + * + * Copyright (c) 2010 ARM Limited + * + * 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 - Pixy + * + * Datasheet, FAQ and PC drivers : + * + * http://www.cmucam.org/projects/cmucam5 + */ + +#ifndef PIXY_H +#define PIXY_H + +/** + * Includes + */ +#include "mbed.h" + +/** + * Defines + */ +#define CC_BLOCSIZE 14 +#define N_BLOCSIZE 12 + +#define N_BLOCCODE 0xAA55 +#define CC_BLOCCODE 0xAA56 + + /** + * Types + */ + typedef unsigned char Byte; + typedef unsigned short Word; + typedef unsigned long lWord; + + typedef struct { + Word checksum; + Word signature; + Word x; + Word y; + Word width; + Word height; + Word angle; + } T_pixyCCBloc; + + typedef struct { + Word checksum; + Word signature; + Word x; + Word y; + Word width; + Word height; + } T_pixyNMBloc; + + typedef union { + Byte tab[14]; + T_pixyCCBloc CCbloc; + } T_pixyCCData; + + typedef union { + Byte tab[12]; + T_pixyNMBloc NMbloc; + } T_pixyNMData; + + typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState; + + typedef union { + lWord mot; + Byte tab[4]; + } T_tmpBuffer; + + typedef union { + Word mot; + Byte tab[2]; + } T_structBuffer; + + + +/** + * Pixy + */ +class PIXY { + +protected : + + Serial* _cmucam; + +public : + + /** + * Variables globales + * + * @note + * A FIFO is a circular buffer where data are stored in the order in witch + * they arrive. You need 2 variables to point both read and write registers. + * The library manage both pointers, but access to the FIFO is allowed from + * outside of the library, so you can manage your own read pointers. + * Write pointers are strictly private. + * + * @section DESCRIPTION + * Pixy_CCFIFO is a FIFO where the Color Code objects are stored + * Pixy_NMFIFO is a FIFO where the Normal objects are stored + * Pixy_CCObjet is the number of CC object read from the CAM during the last frame + * Pixy_NMObjet is the number of normal object read from the CAM during the last frame + */ + T_pixyCCData Pixy_CCFIFO[20]; // FIFO des objets ColorCode + T_pixyNMData Pixy_NMFIFO[20]; // FIFO des objets Normaux + Byte Pixy_CCObjet; // Nombre d'objets de type Color Code + Byte Pixy_NMObjet; // Nombre d'objets Normaux + Byte Pixy_FirstCCObjet; // Position dans la FIFO du premier objet de la trame suivante + Byte Pixy_FirstNMObjet; // Position dans la FIFO du premier objet de la trame suivante + + + /** Liste des Sémaphores + * + * @note + * Semaphore are global variable used to communicate from ISR with main routine + * All semaphores must be cleared by user. + * + * @section DESCRIPTION + * FlagPixy is automaticly set after each received image frame + * FlagPixyOverflow is automaticly set if any FIFO oveflows (more than 20 obj). + */ + int FlagPixy, FlagPixyOverflow; + int Pixy_check; + + /** + * Constructor. + * + * @param tx is the Mbed pin used as TX + * @param rx is the Mbed pin used as RX + * @param debit is the bitrate of the serial (max value is 230400 b/s) + */ + PIXY(PinName tx, PinName rx, int debit =230400); + + /** + * Return the number of objects (normal and ColorCode) that have been + * received from the PIXY during the last frame + * + * @param nbNormal (passed by reference) number of normal object detected + * @param nbCC (passed by reference) number of color code object detected + * @return : 0 if sucessfull, + * -1 if no PIXY is talking, + * -2 if object(s) have been lost (from previous frame or from actual) + */ + int detectedObject (int* nbNormal, int* nbCC); + + /** + * Reads the oldest Color Code object from the last frame received + * + * @note : also manage the Color Code FIFO + * + * @return a T_PixyCCBloc (see .h for details) + */ + T_pixyCCBloc getCCBloc (void); + + /** + * Reads the oldest Normal object from the last frame received + * + * @note : also manage the Normal FIFO + * + * @return a T_PixyNMBloc (see .h for details) + */ + T_pixyNMBloc getNMBloc (void); + + /** + * Set the Brightness of the Pixy + * + * @param brightness level (between 0 and 255) + * @return 0 if successfull, else -1 + */ + int setBrightness (Byte brightness); + +private : + + int Pixy_CCFrameIsNew, Pixy_NMFrameIsNew; + + /** + * Fonction d'interruption de lecture sur la liaison série. + */ + void getPixyByte(); + + +}; + +#endif /* PIXY_H */