Mechatronics Robotics
/
BrobotV1
These are the core files for the Robot at Team conception.
Diff: Pixy.cpp
- Revision:
- 0:eba74e7a229b
- Child:
- 1:ff0674b96cc5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pixy.cpp Fri May 26 07:40:48 2017 +0000 @@ -0,0 +1,74 @@ + +#include "Pixy.h" + +Pixy::Pixy(Serial& _cam) : cam(_cam) +{ + //cam.baud( 230400 ); + cam.baud( 460800 ); + cam.attach(this, &Pixy::rxCallback, Serial::RxIrq); +} + + +// This function is called when a character goes into the RX buffer. +void Pixy::rxCallback() +{ + static const int buffersize = 256; + static int detects = 0; + static int startPoint = 0; + static uint8_t buffer[buffersize] = {}; + static bool startFound = false; + static int ii = 1; + + while( cam.readable() ) { + buffer[ii] = cam.getc(); + if( buffer[ii-1] == 85 && (buffer[ii] == 170 ) ) { + startPoint = ii-1; + + //check if detection was on the edge of buffer. Skip package if so. + if( ii<(buffersize-14)) + startFound = true; + else + ii = 1; + + detects++; + } + ++ii; + + //reset ii + if( ii>=(buffersize-1)) + ii = 1; + } + + //start not found, reset ii to 1 + if( !startFound && ii >= 3 || ii >= (buffersize-1)) { + ii = 1; + return; + } + + //start is found but not enough bytes received - return + if( (ii-startPoint) <= 13 ) + return; + + //copy memory to pixy struct + memcpy( &pixy, buffer + startPoint+2, 12); + + //reset variables + startFound = false; + ii = 1; +} + +int Pixy::getX() +{ + return pixy.x; +} + +int Pixy::getY() +{ + return pixy.y; +} + +int Pixy::getSignature() +{ + return pixy.signature; +} +