Benjamin Brou / Pixy2_Library2
Committer:
Jordan406
Date:
Wed Mar 04 15:23:41 2020 +0000
Revision:
3:d245cf5af33d
okok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jordan406 3:d245cf5af33d 1 /*
Jordan406 3:d245cf5af33d 2 * mbed library for Pixy2 Camera
Jordan406 3:d245cf5af33d 3 * Copyright (c) 2019 Jordan DUCHÊNE
Jordan406 3:d245cf5af33d 4 */
Jordan406 3:d245cf5af33d 5
Jordan406 3:d245cf5af33d 6 #include "mbed.h"
Jordan406 3:d245cf5af33d 7 #include "Pixy2_Library.h"
Jordan406 3:d245cf5af33d 8
Jordan406 3:d245cf5af33d 9
Jordan406 3:d245cf5af33d 10
Jordan406 3:d245cf5af33d 11
Jordan406 3:d245cf5af33d 12 Pixy2_Library::Pixy2_Library (PinName p_sda, PinName p_scl, int address) // Class Constructor
Jordan406 3:d245cf5af33d 13 {
Jordan406 3:d245cf5af33d 14 composant = new I2C(p_sda,p_scl); //sda, sc1
Jordan406 3:d245cf5af33d 15 composant ->frequency(100000);
Jordan406 3:d245cf5af33d 16 I2Caddress = address;
Jordan406 3:d245cf5af33d 17 }
Jordan406 3:d245cf5af33d 18
Jordan406 3:d245cf5af33d 19
Jordan406 3:d245cf5af33d 20 void Pixy2_Library::Pixy2_WhiteLED(bool STATE) // White LEDs BuiltIN ON/OFF methode
Jordan406 3:d245cf5af33d 21 {
Jordan406 3:d245cf5af33d 22
Jordan406 3:d245cf5af33d 23 unsigned char readdata[21];
Jordan406 3:d245cf5af33d 24 unsigned char lampeON[6]= {0xae,0xc1,22,2,1,0};
Jordan406 3:d245cf5af33d 25 unsigned char lampeOFF[6]= {0xae,0xc1,22,2,0,0};
Jordan406 3:d245cf5af33d 26 if(STATE == true) {
Jordan406 3:d245cf5af33d 27 do {
Jordan406 3:d245cf5af33d 28 composant->write(I2Caddress,(char*)lampeON,6);
Jordan406 3:d245cf5af33d 29 composant->read(I2Caddress,(char*)readdata,10);
Jordan406 3:d245cf5af33d 30 wait(0.01);
Jordan406 3:d245cf5af33d 31 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 32 } else {
Jordan406 3:d245cf5af33d 33 do {
Jordan406 3:d245cf5af33d 34 composant->write(I2Caddress,(char*)lampeOFF,6);
Jordan406 3:d245cf5af33d 35 composant->read(I2Caddress,(char*)readdata,10);
Jordan406 3:d245cf5af33d 36 wait(0.01);
Jordan406 3:d245cf5af33d 37 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 38 }
Jordan406 3:d245cf5af33d 39
Jordan406 3:d245cf5af33d 40 }
Jordan406 3:d245cf5af33d 41 void Pixy2_Library::Pixy2_SetServo(int PAN, int TILT) // Head Servo Crontrol methode
Jordan406 3:d245cf5af33d 42 {
Jordan406 3:d245cf5af33d 43 int lowP, hightP, lowT, hightT;
Jordan406 3:d245cf5af33d 44 hightP = PAN >> 8 ;
Jordan406 3:d245cf5af33d 45 lowP = PAN & 0x0f;
Jordan406 3:d245cf5af33d 46 hightT = TILT >> 8 ;
Jordan406 3:d245cf5af33d 47 lowT = TILT & 0x0f;
Jordan406 3:d245cf5af33d 48 unsigned char readdata[21];
Jordan406 3:d245cf5af33d 49 unsigned char SetServ[8]= {0xae,0xc1,18,4,lowP,hightP,lowT,hightP};
Jordan406 3:d245cf5af33d 50 do {
Jordan406 3:d245cf5af33d 51 composant->write(I2Caddress,(char*)SetServ,6);
Jordan406 3:d245cf5af33d 52 composant->read(I2Caddress,(char*)readdata,10);
Jordan406 3:d245cf5af33d 53 wait(0.01);
Jordan406 3:d245cf5af33d 54 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 55 }
Jordan406 3:d245cf5af33d 56
Jordan406 3:d245cf5af33d 57
Jordan406 3:d245cf5af33d 58 void Pixy2_Library::Pixy2_RGBLED(bool STATE)
Jordan406 3:d245cf5af33d 59 {
Jordan406 3:d245cf5af33d 60
Jordan406 3:d245cf5af33d 61 unsigned char readdata[21];
Jordan406 3:d245cf5af33d 62 unsigned char lampeON[6]= {0xae,0xc1,22,2,0,1};
Jordan406 3:d245cf5af33d 63 unsigned char lampeOFF[6]= {0xae,0xc1,22,2,0,0};
Jordan406 3:d245cf5af33d 64 if(STATE == true) {
Jordan406 3:d245cf5af33d 65 do {
Jordan406 3:d245cf5af33d 66 composant->write(I2Caddress,(char*)lampeON,6);
Jordan406 3:d245cf5af33d 67 composant->read(I2Caddress,(char*)readdata,10);
Jordan406 3:d245cf5af33d 68 wait(0.01);
Jordan406 3:d245cf5af33d 69 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 70 } else {
Jordan406 3:d245cf5af33d 71 do {
Jordan406 3:d245cf5af33d 72 composant->write(I2Caddress,(char*)lampeOFF,6);
Jordan406 3:d245cf5af33d 73 composant->read(I2Caddress,(char*)readdata,10);
Jordan406 3:d245cf5af33d 74 wait(0.01);
Jordan406 3:d245cf5af33d 75 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 76 }
Jordan406 3:d245cf5af33d 77
Jordan406 3:d245cf5af33d 78 }
Jordan406 3:d245cf5af33d 79
Jordan406 3:d245cf5af33d 80 int Pixy2_Library::Pixy2_GetBlock(char DATA, int BLOCK_NUMBER)
Jordan406 3:d245cf5af33d 81 {
Jordan406 3:d245cf5af33d 82 int DataSize = BLOCK_NUMBER * 14 + 6;
Jordan406 3:d245cf5af33d 83 unsigned char writedata[6]= {0xae,0xc1,32,2,255,20};
Jordan406 3:d245cf5af33d 84 unsigned char readdata[DataSize + 1];
Jordan406 3:d245cf5af33d 85 do {
Jordan406 3:d245cf5af33d 86 composant->write(I2Caddress,(char*)writedata,6);
Jordan406 3:d245cf5af33d 87 composant->read(I2Caddress,(char*)readdata,DataSize);
Jordan406 3:d245cf5af33d 88 wait(0.1);
Jordan406 3:d245cf5af33d 89 } while(readdata[0] != 175 && readdata[1] != 193);
Jordan406 3:d245cf5af33d 90 switch(DATA) {
Jordan406 3:d245cf5af33d 91 case 's':
Jordan406 3:d245cf5af33d 92 if(readdata[DataSize - 13]<2) return readdata[7]*256+readdata[DataSize - 14];
Jordan406 3:d245cf5af33d 93 if(readdata[DataSize - 13]>=2) return -2;
Jordan406 3:d245cf5af33d 94 break;
Jordan406 3:d245cf5af33d 95 case 'x':
Jordan406 3:d245cf5af33d 96 if(readdata[DataSize - 11]<2) return readdata[DataSize - 11]*256+readdata[DataSize - 12];
Jordan406 3:d245cf5af33d 97 if(readdata[DataSize - 11]>=2) return -2;
Jordan406 3:d245cf5af33d 98 break;
Jordan406 3:d245cf5af33d 99 case 'y':
Jordan406 3:d245cf5af33d 100 if(readdata[DataSize - 9]<2) return readdata[DataSize - 9]*256+readdata[DataSize - 10];
Jordan406 3:d245cf5af33d 101 if(readdata[DataSize - 9]>=2) return -2;
Jordan406 3:d245cf5af33d 102 break;
Jordan406 3:d245cf5af33d 103 case 'w':
Jordan406 3:d245cf5af33d 104 if(readdata[DataSize - 7]<2) return readdata[DataSize - 7]*256+readdata[DataSize - 8];
Jordan406 3:d245cf5af33d 105 if(readdata[DataSize - 7]>=2) return -2;
Jordan406 3:d245cf5af33d 106 break;
Jordan406 3:d245cf5af33d 107 case 'h':
Jordan406 3:d245cf5af33d 108 if(readdata[DataSize - 5]<2) return readdata[DataSize - 5]*256+readdata[DataSize - 6];
Jordan406 3:d245cf5af33d 109 if(readdata[DataSize - 5]>=2) return -2;
Jordan406 3:d245cf5af33d 110 break;
Jordan406 3:d245cf5af33d 111 case 'a':
Jordan406 3:d245cf5af33d 112 if(readdata[DataSize - 3]<2) return readdata[DataSize - 3]*256+readdata[DataSize - 4];
Jordan406 3:d245cf5af33d 113 if(readdata[DataSize - 3]>=2) return -2;
Jordan406 3:d245cf5af33d 114 break;
Jordan406 3:d245cf5af33d 115 case 'i':
Jordan406 3:d245cf5af33d 116 if(readdata[DataSize - 1]<2) return readdata[DataSize - 1]*256+readdata[DataSize - 2]; //////////////////////// 1
Jordan406 3:d245cf5af33d 117 if(readdata[DataSize - 1]>=2) return -2;
Jordan406 3:d245cf5af33d 118 break;
Jordan406 3:d245cf5af33d 119 }
Jordan406 3:d245cf5af33d 120 }
Jordan406 3:d245cf5af33d 121
Jordan406 3:d245cf5af33d 122
Jordan406 3:d245cf5af33d 123