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.
Pixy2_Libray.cpp
- Committer:
- Jordan406
- Date:
- 2020-03-04
- Revision:
- 3:d245cf5af33d
File content as of revision 3:d245cf5af33d:
/*
* mbed library for Pixy2 Camera
* Copyright (c) 2019 Jordan DUCHÊNE
*/
#include "mbed.h"
#include "Pixy2_Library.h"
Pixy2_Library::Pixy2_Library (PinName p_sda, PinName p_scl, int address) // Class Constructor
{
composant = new I2C(p_sda,p_scl); //sda, sc1
composant ->frequency(100000);
I2Caddress = address;
}
void Pixy2_Library::Pixy2_WhiteLED(bool STATE) // White LEDs BuiltIN ON/OFF methode
{
unsigned char readdata[21];
unsigned char lampeON[6]= {0xae,0xc1,22,2,1,0};
unsigned char lampeOFF[6]= {0xae,0xc1,22,2,0,0};
if(STATE == true) {
do {
composant->write(I2Caddress,(char*)lampeON,6);
composant->read(I2Caddress,(char*)readdata,10);
wait(0.01);
} while(readdata[0] != 175 && readdata[1] != 193);
} else {
do {
composant->write(I2Caddress,(char*)lampeOFF,6);
composant->read(I2Caddress,(char*)readdata,10);
wait(0.01);
} while(readdata[0] != 175 && readdata[1] != 193);
}
}
void Pixy2_Library::Pixy2_SetServo(int PAN, int TILT) // Head Servo Crontrol methode
{
int lowP, hightP, lowT, hightT;
hightP = PAN >> 8 ;
lowP = PAN & 0x0f;
hightT = TILT >> 8 ;
lowT = TILT & 0x0f;
unsigned char readdata[21];
unsigned char SetServ[8]= {0xae,0xc1,18,4,lowP,hightP,lowT,hightP};
do {
composant->write(I2Caddress,(char*)SetServ,6);
composant->read(I2Caddress,(char*)readdata,10);
wait(0.01);
} while(readdata[0] != 175 && readdata[1] != 193);
}
void Pixy2_Library::Pixy2_RGBLED(bool STATE)
{
unsigned char readdata[21];
unsigned char lampeON[6]= {0xae,0xc1,22,2,0,1};
unsigned char lampeOFF[6]= {0xae,0xc1,22,2,0,0};
if(STATE == true) {
do {
composant->write(I2Caddress,(char*)lampeON,6);
composant->read(I2Caddress,(char*)readdata,10);
wait(0.01);
} while(readdata[0] != 175 && readdata[1] != 193);
} else {
do {
composant->write(I2Caddress,(char*)lampeOFF,6);
composant->read(I2Caddress,(char*)readdata,10);
wait(0.01);
} while(readdata[0] != 175 && readdata[1] != 193);
}
}
int Pixy2_Library::Pixy2_GetBlock(char DATA, int BLOCK_NUMBER)
{
int DataSize = BLOCK_NUMBER * 14 + 6;
unsigned char writedata[6]= {0xae,0xc1,32,2,255,20};
unsigned char readdata[DataSize + 1];
do {
composant->write(I2Caddress,(char*)writedata,6);
composant->read(I2Caddress,(char*)readdata,DataSize);
wait(0.1);
} while(readdata[0] != 175 && readdata[1] != 193);
switch(DATA) {
case 's':
if(readdata[DataSize - 13]<2) return readdata[7]*256+readdata[DataSize - 14];
if(readdata[DataSize - 13]>=2) return -2;
break;
case 'x':
if(readdata[DataSize - 11]<2) return readdata[DataSize - 11]*256+readdata[DataSize - 12];
if(readdata[DataSize - 11]>=2) return -2;
break;
case 'y':
if(readdata[DataSize - 9]<2) return readdata[DataSize - 9]*256+readdata[DataSize - 10];
if(readdata[DataSize - 9]>=2) return -2;
break;
case 'w':
if(readdata[DataSize - 7]<2) return readdata[DataSize - 7]*256+readdata[DataSize - 8];
if(readdata[DataSize - 7]>=2) return -2;
break;
case 'h':
if(readdata[DataSize - 5]<2) return readdata[DataSize - 5]*256+readdata[DataSize - 6];
if(readdata[DataSize - 5]>=2) return -2;
break;
case 'a':
if(readdata[DataSize - 3]<2) return readdata[DataSize - 3]*256+readdata[DataSize - 4];
if(readdata[DataSize - 3]>=2) return -2;
break;
case 'i':
if(readdata[DataSize - 1]<2) return readdata[DataSize - 1]*256+readdata[DataSize - 2]; //////////////////////// 1
if(readdata[DataSize - 1]>=2) return -2;
break;
}
}