first commit
This commit is contained in:
parent
c5c86b57df
commit
e37d77fd80
17 changed files with 1377 additions and 0 deletions
70
lib/pixy/examples/hello_world/hello_world.ino
Normal file
70
lib/pixy/examples/hello_world/hello_world.ino
Normal file
|
@ -0,0 +1,70 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is a good place to start if you're just getting started with
|
||||
// Pixy and Arduino. This program simply prints the detected object blocks
|
||||
// (including color codes) through the serial console. It uses the Arduino's
|
||||
// ICSP port. For more information go here:
|
||||
//
|
||||
// http://cmucam.org/projects/cmucam5/wiki/Hooking_up_Pixy_to_a_Microcontroller_(like_an_Arduino)
|
||||
//
|
||||
// It prints the detected blocks once per second because printing all of the
|
||||
// blocks for all 50 frames per second would overwhelm the Arduino's serial port.
|
||||
//
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Pixy.h>
|
||||
|
||||
// This is the main Pixy object
|
||||
Pixy pixy;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static int i = 0;
|
||||
int j;
|
||||
uint16_t blocks;
|
||||
char buf[32];
|
||||
|
||||
// grab blocks!
|
||||
blocks = pixy.getBlocks();
|
||||
|
||||
// If there are detect blocks, print them!
|
||||
if (blocks)
|
||||
{
|
||||
i++;
|
||||
|
||||
// do this (print) every 50 frames because printing every
|
||||
// frame would bog down the Arduino
|
||||
if (i%50==0)
|
||||
{
|
||||
sprintf(buf, "Detected %d:\n", blocks);
|
||||
Serial.print(buf);
|
||||
for (j=0; j<blocks; j++)
|
||||
{
|
||||
sprintf(buf, " block %d: ", j);
|
||||
Serial.print(buf);
|
||||
pixy.blocks[j].print();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
63
lib/pixy/examples/i2c/i2c.ino
Normal file
63
lib/pixy/examples/i2c/i2c.ino
Normal file
|
@ -0,0 +1,63 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is like hello_world but uses I2C communications. If you're
|
||||
// not sure what I2C is, run the hello_world sketch!
|
||||
//
|
||||
|
||||
#include <Wire.h>
|
||||
#include <PixyI2C.h>
|
||||
|
||||
|
||||
PixyI2C pixy;
|
||||
// PixyI2C pixy(0x55); // You can set the I2C address through PixyI2C object
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
static int i = 0;
|
||||
int j;
|
||||
uint16_t blocks;
|
||||
char buf[32];
|
||||
|
||||
blocks = pixy.getBlocks();
|
||||
|
||||
if (blocks)
|
||||
{
|
||||
i++;
|
||||
|
||||
// do this (print) every 50 frames because printing every
|
||||
// frame would bog down the Arduino
|
||||
if (i%50==0)
|
||||
{
|
||||
sprintf(buf, "Detected %d:\n", blocks);
|
||||
Serial.print(buf);
|
||||
for (j=0; j<blocks; j++)
|
||||
{
|
||||
sprintf(buf, " block %d: ", j);
|
||||
Serial.print(buf);
|
||||
pixy.blocks[j].print();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
54
lib/pixy/examples/led_cycle/led_cycle.ino
Executable file
54
lib/pixy/examples/led_cycle/led_cycle.ino
Executable file
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is demonstrates the setLED() function. Running this sketch
|
||||
// will cycle the Pixy's RGB LED through its colors.
|
||||
//
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Pixy.h>
|
||||
|
||||
Pixy pixy;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
uint32_t i=0;
|
||||
uint8_t r, g, b;
|
||||
|
||||
while(1)
|
||||
{
|
||||
// calculate r, g, b such that it cycles through the colors
|
||||
r = i&0xff;
|
||||
g = (i*3)&0xff;
|
||||
b = (i/3)&0xff;
|
||||
pixy.setLED(r, g, b);
|
||||
// We need to delay here because serial requests are handled
|
||||
// every frame period (20ms). If we don't delay, we'll
|
||||
// overrun Pixy's receive queue. But that's all OK because
|
||||
// we normally only update the LED once per frame anyway.
|
||||
delay(20);
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
119
lib/pixy/examples/pantilt/pantilt.ino
Executable file
119
lib/pixy/examples/pantilt/pantilt.ino
Executable file
|
@ -0,0 +1,119 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is a simple tracking demo that uses the pan/tilt unit. For
|
||||
// more information, go here:
|
||||
//
|
||||
// http://cmucam.org/projects/cmucam5/wiki/Run_the_Pantilt_Demo
|
||||
//
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Pixy.h>
|
||||
|
||||
Pixy pixy;
|
||||
|
||||
#define X_CENTER ((PIXY_MAX_X-PIXY_MIN_X)/2)
|
||||
#define Y_CENTER ((PIXY_MAX_Y-PIXY_MIN_Y)/2)
|
||||
|
||||
class ServoLoop
|
||||
{
|
||||
public:
|
||||
ServoLoop(int32_t pgain, int32_t dgain);
|
||||
|
||||
void update(int32_t error);
|
||||
|
||||
int32_t m_pos;
|
||||
int32_t m_prevError;
|
||||
int32_t m_pgain;
|
||||
int32_t m_dgain;
|
||||
};
|
||||
|
||||
|
||||
ServoLoop panLoop(300, 500);
|
||||
ServoLoop tiltLoop(500, 700);
|
||||
|
||||
ServoLoop::ServoLoop(int32_t pgain, int32_t dgain)
|
||||
{
|
||||
m_pos = PIXY_RCS_CENTER_POS;
|
||||
m_pgain = pgain;
|
||||
m_dgain = dgain;
|
||||
m_prevError = 0x80000000L;
|
||||
}
|
||||
|
||||
void ServoLoop::update(int32_t error)
|
||||
{
|
||||
long int vel;
|
||||
char buf[32];
|
||||
if (m_prevError!=0x80000000)
|
||||
{
|
||||
vel = (error*m_pgain + (error - m_prevError)*m_dgain)>>10;
|
||||
//sprintf(buf, "%ld\n", vel);
|
||||
//Serial.print(buf);
|
||||
m_pos += vel;
|
||||
if (m_pos>PIXY_RCS_MAX_POS)
|
||||
m_pos = PIXY_RCS_MAX_POS;
|
||||
else if (m_pos<PIXY_RCS_MIN_POS)
|
||||
m_pos = PIXY_RCS_MIN_POS;
|
||||
}
|
||||
m_prevError = error;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static int i = 0;
|
||||
int j;
|
||||
uint16_t blocks;
|
||||
char buf[32];
|
||||
int32_t panError, tiltError;
|
||||
|
||||
blocks = pixy.getBlocks();
|
||||
|
||||
if (blocks)
|
||||
{
|
||||
panError = X_CENTER-pixy.blocks[0].x;
|
||||
tiltError = pixy.blocks[0].y-Y_CENTER;
|
||||
|
||||
panLoop.update(panError);
|
||||
tiltLoop.update(tiltError);
|
||||
|
||||
pixy.setServos(panLoop.m_pos, tiltLoop.m_pos);
|
||||
|
||||
i++;
|
||||
|
||||
// do this (print) every 50 frames because printing every
|
||||
// frame would bog down the Arduino
|
||||
if (i%50==0)
|
||||
{
|
||||
sprintf(buf, "Detected %d:\n", blocks);
|
||||
Serial.print(buf);
|
||||
for (j=0; j<blocks; j++)
|
||||
{
|
||||
sprintf(buf, " block %d: ", j);
|
||||
Serial.print(buf);
|
||||
pixy.blocks[j].print();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
44
lib/pixy/examples/servo_move/servo_move.ino
Executable file
44
lib/pixy/examples/servo_move/servo_move.ino
Executable file
|
@ -0,0 +1,44 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is demonstrates the setServos() function. Running this sketch
|
||||
// will move the servos to their limits, back and forth, back and forth.
|
||||
//
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Pixy.h>
|
||||
|
||||
Pixy pixy;
|
||||
|
||||
void setup()
|
||||
{
|
||||
|
||||
Serial.begin(9600);
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
Serial.println("Moving pan-tilt to max positions");
|
||||
pixy.setServos(PIXY_RCS_MAX_POS, PIXY_RCS_MAX_POS);
|
||||
delay(1000);
|
||||
|
||||
Serial.println("Moving pan-tilt to min positions");
|
||||
pixy.setServos(PIXY_RCS_MIN_POS, PIXY_RCS_MIN_POS);
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
|
66
lib/pixy/examples/uart/uart.ino
Normal file
66
lib/pixy/examples/uart/uart.ino
Normal file
|
@ -0,0 +1,66 @@
|
|||
//
|
||||
// begin license header
|
||||
//
|
||||
// This file is part of Pixy CMUcam5 or "Pixy" for short
|
||||
//
|
||||
// All Pixy source code is provided under the terms of the
|
||||
// GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html).
|
||||
// Those wishing to use Pixy source code, software and/or
|
||||
// technologies under different licensing terms should contact us at
|
||||
// cmucam@cs.cmu.edu. Such licensing terms are available for
|
||||
// all portions of the Pixy codebase presented here.
|
||||
//
|
||||
// end license header
|
||||
//
|
||||
// This sketch is like hello_world but uses UART communications. If you're
|
||||
// not sure what UART is, run the hello_world sketch!
|
||||
//
|
||||
// Note, the default baudrate for Pixy's UART communications is 19200. Given
|
||||
// the slow datarate and Arduino's shallow serial FIFO, this sletch sometimes
|
||||
// gets checksum errors, when more than 1 block is present. This is because
|
||||
// printing more than 1 object block to the serial console (as this sketch does)
|
||||
// causes the Arduino's serial FIFO to overrun, which leads to communication
|
||||
// errors.
|
||||
//
|
||||
|
||||
#include "PixyUART.h"
|
||||
|
||||
|
||||
PixyUART pixy;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600); // 9600 baud for the serial *console* (not for the UART connected to Pixy)
|
||||
Serial.print("Starting...\n");
|
||||
|
||||
pixy.init();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static int i = 0;
|
||||
int j;
|
||||
uint16_t blocks;
|
||||
char buf[32];
|
||||
|
||||
blocks = pixy.getBlocks();
|
||||
|
||||
if (blocks)
|
||||
{
|
||||
i++;
|
||||
|
||||
// do this (print) every 50 frames because printing every
|
||||
// frame would bog down the Arduino
|
||||
if (i%50==0)
|
||||
{
|
||||
sprintf(buf, "Detected %d:\n", blocks);
|
||||
Serial.print(buf);
|
||||
for (j=0; j<blocks; j++)
|
||||
{
|
||||
sprintf(buf, " block %d: ", j);
|
||||
Serial.print(buf);
|
||||
pixy.blocks[j].print();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue