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:
Sun May 20 08:18:49 2018 +0000
Revision:
0:6f78c735f07c
Child:
1:183ebbbc9c2e
Untested Pixy - CMUCAM5 library

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 * Copyright (c) 2010 ARM Limited
haarkon 0:6f78c735f07c 7 *
haarkon 0:6f78c735f07c 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
haarkon 0:6f78c735f07c 9 * of this software and associated documentation files (the "Software"), to deal
haarkon 0:6f78c735f07c 10 * in the Software without restriction, including without limitation the rights
haarkon 0:6f78c735f07c 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
haarkon 0:6f78c735f07c 12 * copies of the Software, and to permit persons to whom the Software is
haarkon 0:6f78c735f07c 13 * furnished to do so, subject to the following conditions:
haarkon 0:6f78c735f07c 14 *
haarkon 0:6f78c735f07c 15 * The above copyright notice and this permission notice shall be included in
haarkon 0:6f78c735f07c 16 * all copies or substantial portions of the Software.
haarkon 0:6f78c735f07c 17 *
haarkon 0:6f78c735f07c 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
haarkon 0:6f78c735f07c 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
haarkon 0:6f78c735f07c 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
haarkon 0:6f78c735f07c 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
haarkon 0:6f78c735f07c 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
haarkon 0:6f78c735f07c 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
haarkon 0:6f78c735f07c 24 * THE SOFTWARE.
haarkon 0:6f78c735f07c 25 *
haarkon 0:6f78c735f07c 26 * @section DESCRIPTION
haarkon 0:6f78c735f07c 27 *
haarkon 0:6f78c735f07c 28 * CMUCAM 5 - Pixy
haarkon 0:6f78c735f07c 29 *
haarkon 0:6f78c735f07c 30 * Datasheet, FAQ and PC drivers :
haarkon 0:6f78c735f07c 31 *
haarkon 0:6f78c735f07c 32 * http://www.cmucam.org/projects/cmucam5
haarkon 0:6f78c735f07c 33 */
haarkon 0:6f78c735f07c 34
haarkon 0:6f78c735f07c 35 #ifndef PIXY_H
haarkon 0:6f78c735f07c 36 #define PIXY_H
haarkon 0:6f78c735f07c 37
haarkon 0:6f78c735f07c 38 /**
haarkon 0:6f78c735f07c 39 * Includes
haarkon 0:6f78c735f07c 40 */
haarkon 0:6f78c735f07c 41 #include "mbed.h"
haarkon 0:6f78c735f07c 42
haarkon 0:6f78c735f07c 43 /**
haarkon 0:6f78c735f07c 44 * Defines
haarkon 0:6f78c735f07c 45 */
haarkon 0:6f78c735f07c 46 #define CC_BLOCSIZE 14
haarkon 0:6f78c735f07c 47 #define N_BLOCSIZE 12
haarkon 0:6f78c735f07c 48
haarkon 0:6f78c735f07c 49 #define N_BLOCCODE 0xAA55
haarkon 0:6f78c735f07c 50 #define CC_BLOCCODE 0xAA56
haarkon 0:6f78c735f07c 51
haarkon 0:6f78c735f07c 52 /**
haarkon 0:6f78c735f07c 53 * Types
haarkon 0:6f78c735f07c 54 */
haarkon 0:6f78c735f07c 55 typedef unsigned char Byte;
haarkon 0:6f78c735f07c 56 typedef unsigned short Word;
haarkon 0:6f78c735f07c 57 typedef unsigned long lWord;
haarkon 0:6f78c735f07c 58
haarkon 0:6f78c735f07c 59 typedef struct {
haarkon 0:6f78c735f07c 60 Word checksum;
haarkon 0:6f78c735f07c 61 Word signature;
haarkon 0:6f78c735f07c 62 Word x;
haarkon 0:6f78c735f07c 63 Word y;
haarkon 0:6f78c735f07c 64 Word width;
haarkon 0:6f78c735f07c 65 Word height;
haarkon 0:6f78c735f07c 66 Word angle;
haarkon 0:6f78c735f07c 67 } T_pixyCCBloc;
haarkon 0:6f78c735f07c 68
haarkon 0:6f78c735f07c 69 typedef struct {
haarkon 0:6f78c735f07c 70 Word checksum;
haarkon 0:6f78c735f07c 71 Word signature;
haarkon 0:6f78c735f07c 72 Word x;
haarkon 0:6f78c735f07c 73 Word y;
haarkon 0:6f78c735f07c 74 Word width;
haarkon 0:6f78c735f07c 75 Word height;
haarkon 0:6f78c735f07c 76 } T_pixyNMBloc;
haarkon 0:6f78c735f07c 77
haarkon 0:6f78c735f07c 78 typedef union {
haarkon 0:6f78c735f07c 79 Byte tab[14];
haarkon 0:6f78c735f07c 80 T_pixyCCBloc CCbloc;
haarkon 0:6f78c735f07c 81 } T_pixyCCData;
haarkon 0:6f78c735f07c 82
haarkon 0:6f78c735f07c 83 typedef union {
haarkon 0:6f78c735f07c 84 Byte tab[12];
haarkon 0:6f78c735f07c 85 T_pixyNMBloc NMbloc;
haarkon 0:6f78c735f07c 86 } T_pixyNMData;
haarkon 0:6f78c735f07c 87
haarkon 0:6f78c735f07c 88 typedef enum {none, begin, normal, colorCode, doubleZero} T_pixyState;
haarkon 0:6f78c735f07c 89
haarkon 0:6f78c735f07c 90 typedef union {
haarkon 0:6f78c735f07c 91 lWord mot;
haarkon 0:6f78c735f07c 92 Byte tab[4];
haarkon 0:6f78c735f07c 93 } T_tmpBuffer;
haarkon 0:6f78c735f07c 94
haarkon 0:6f78c735f07c 95 typedef union {
haarkon 0:6f78c735f07c 96 Word mot;
haarkon 0:6f78c735f07c 97 Byte tab[2];
haarkon 0:6f78c735f07c 98 } T_structBuffer;
haarkon 0:6f78c735f07c 99
haarkon 0:6f78c735f07c 100
haarkon 0:6f78c735f07c 101
haarkon 0:6f78c735f07c 102 /**
haarkon 0:6f78c735f07c 103 * Pixy
haarkon 0:6f78c735f07c 104 */
haarkon 0:6f78c735f07c 105 class PIXY {
haarkon 0:6f78c735f07c 106
haarkon 0:6f78c735f07c 107 protected :
haarkon 0:6f78c735f07c 108
haarkon 0:6f78c735f07c 109 Serial* _cmucam;
haarkon 0:6f78c735f07c 110
haarkon 0:6f78c735f07c 111 public :
haarkon 0:6f78c735f07c 112
haarkon 0:6f78c735f07c 113 /**
haarkon 0:6f78c735f07c 114 * Variables globales
haarkon 0:6f78c735f07c 115 *
haarkon 0:6f78c735f07c 116 * @note
haarkon 0:6f78c735f07c 117 * A FIFO is a circular buffer where data are stored in the order in witch
haarkon 0:6f78c735f07c 118 * they arrive. You need 2 variables to point both read and write registers.
haarkon 0:6f78c735f07c 119 * The library manage both pointers, but access to the FIFO is allowed from
haarkon 0:6f78c735f07c 120 * outside of the library, so you can manage your own read pointers.
haarkon 0:6f78c735f07c 121 * Write pointers are strictly private.
haarkon 0:6f78c735f07c 122 *
haarkon 0:6f78c735f07c 123 * @section DESCRIPTION
haarkon 0:6f78c735f07c 124 * Pixy_CCFIFO is a FIFO where the Color Code objects are stored
haarkon 0:6f78c735f07c 125 * Pixy_NMFIFO is a FIFO where the Normal objects are stored
haarkon 0:6f78c735f07c 126 * Pixy_CCObjet is the number of CC object read from the CAM during the last frame
haarkon 0:6f78c735f07c 127 * Pixy_NMObjet is the number of normal object read from the CAM during the last frame
haarkon 0:6f78c735f07c 128 */
haarkon 0:6f78c735f07c 129 T_pixyCCData Pixy_CCFIFO[20]; // FIFO des objets ColorCode
haarkon 0:6f78c735f07c 130 T_pixyNMData Pixy_NMFIFO[20]; // FIFO des objets Normaux
haarkon 0:6f78c735f07c 131 Byte Pixy_CCObjet; // Nombre d'objets de type Color Code
haarkon 0:6f78c735f07c 132 Byte Pixy_NMObjet; // Nombre d'objets Normaux
haarkon 0:6f78c735f07c 133 Byte Pixy_FirstCCObjet; // Position dans la FIFO du premier objet de la trame suivante
haarkon 0:6f78c735f07c 134 Byte Pixy_FirstNMObjet; // Position dans la FIFO du premier objet de la trame suivante
haarkon 0:6f78c735f07c 135
haarkon 0:6f78c735f07c 136
haarkon 0:6f78c735f07c 137 /** Liste des Sémaphores
haarkon 0:6f78c735f07c 138 *
haarkon 0:6f78c735f07c 139 * @note
haarkon 0:6f78c735f07c 140 * Semaphore are global variable used to communicate from ISR with main routine
haarkon 0:6f78c735f07c 141 * All semaphores must be cleared by user.
haarkon 0:6f78c735f07c 142 *
haarkon 0:6f78c735f07c 143 * @section DESCRIPTION
haarkon 0:6f78c735f07c 144 * FlagPixy is automaticly set after each received image frame
haarkon 0:6f78c735f07c 145 * FlagPixyOverflow is automaticly set if any FIFO oveflows (more than 20 obj).
haarkon 0:6f78c735f07c 146 */
haarkon 0:6f78c735f07c 147 int FlagPixy, FlagPixyOverflow;
haarkon 0:6f78c735f07c 148 int Pixy_check;
haarkon 0:6f78c735f07c 149
haarkon 0:6f78c735f07c 150 /**
haarkon 0:6f78c735f07c 151 * Constructor.
haarkon 0:6f78c735f07c 152 *
haarkon 0:6f78c735f07c 153 * @param tx is the Mbed pin used as TX
haarkon 0:6f78c735f07c 154 * @param rx is the Mbed pin used as RX
haarkon 0:6f78c735f07c 155 * @param debit is the bitrate of the serial (max value is 230400 b/s)
haarkon 0:6f78c735f07c 156 */
haarkon 0:6f78c735f07c 157 PIXY(PinName tx, PinName rx, int debit =230400);
haarkon 0:6f78c735f07c 158
haarkon 0:6f78c735f07c 159 /**
haarkon 0:6f78c735f07c 160 * Return the number of objects (normal and ColorCode) that have been
haarkon 0:6f78c735f07c 161 * received from the PIXY during the last frame
haarkon 0:6f78c735f07c 162 *
haarkon 0:6f78c735f07c 163 * @param nbNormal (passed by reference) number of normal object detected
haarkon 0:6f78c735f07c 164 * @param nbCC (passed by reference) number of color code object detected
haarkon 0:6f78c735f07c 165 * @return : 0 if sucessfull,
haarkon 0:6f78c735f07c 166 * -1 if no PIXY is talking,
haarkon 0:6f78c735f07c 167 * -2 if object(s) have been lost (from previous frame or from actual)
haarkon 0:6f78c735f07c 168 */
haarkon 0:6f78c735f07c 169 int detectedObject (int* nbNormal, int* nbCC);
haarkon 0:6f78c735f07c 170
haarkon 0:6f78c735f07c 171 /**
haarkon 0:6f78c735f07c 172 * Reads the oldest Color Code object from the last frame received
haarkon 0:6f78c735f07c 173 *
haarkon 0:6f78c735f07c 174 * @note : also manage the Color Code FIFO
haarkon 0:6f78c735f07c 175 *
haarkon 0:6f78c735f07c 176 * @return a T_PixyCCBloc (see .h for details)
haarkon 0:6f78c735f07c 177 */
haarkon 0:6f78c735f07c 178 T_pixyCCBloc getCCBloc (void);
haarkon 0:6f78c735f07c 179
haarkon 0:6f78c735f07c 180 /**
haarkon 0:6f78c735f07c 181 * Reads the oldest Normal object from the last frame received
haarkon 0:6f78c735f07c 182 *
haarkon 0:6f78c735f07c 183 * @note : also manage the Normal FIFO
haarkon 0:6f78c735f07c 184 *
haarkon 0:6f78c735f07c 185 * @return a T_PixyNMBloc (see .h for details)
haarkon 0:6f78c735f07c 186 */
haarkon 0:6f78c735f07c 187 T_pixyNMBloc getNMBloc (void);
haarkon 0:6f78c735f07c 188
haarkon 0:6f78c735f07c 189 /**
haarkon 0:6f78c735f07c 190 * Set the Brightness of the Pixy
haarkon 0:6f78c735f07c 191 *
haarkon 0:6f78c735f07c 192 * @param brightness level (between 0 and 255)
haarkon 0:6f78c735f07c 193 * @return 0 if successfull, else -1
haarkon 0:6f78c735f07c 194 */
haarkon 0:6f78c735f07c 195 int setBrightness (Byte brightness);
haarkon 0:6f78c735f07c 196
haarkon 0:6f78c735f07c 197 private :
haarkon 0:6f78c735f07c 198
haarkon 0:6f78c735f07c 199 int Pixy_CCFrameIsNew, Pixy_NMFrameIsNew;
haarkon 0:6f78c735f07c 200
haarkon 0:6f78c735f07c 201 /**
haarkon 0:6f78c735f07c 202 * Fonction d'interruption de lecture sur la liaison série.
haarkon 0:6f78c735f07c 203 */
haarkon 0:6f78c735f07c 204 void getPixyByte();
haarkon 0:6f78c735f07c 205
haarkon 0:6f78c735f07c 206
haarkon 0:6f78c735f07c 207 };
haarkon 0:6f78c735f07c 208
haarkon 0:6f78c735f07c 209 #endif /* PIXY_H */