Library for Pixy - CMUCAM5 smart camera

Dependents:   TestPixy FRC_2018 FRC2018_Bis 0hackton_08_06_18 ... more

Fork of Pixy by FRC - Hackathon

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?

UserRevisionLine numberNew 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 */