157 lines
2.9 KiB
C++
157 lines
2.9 KiB
C++
//------------------------------------------------------------------
|
|
// qfixSlaveBoard.h
|
|
//
|
|
// This file contains the class SlaveBoard which represents a kind
|
|
// of remote control of a BobbyBoard via the I2C bus. The SlaveBoard
|
|
// can be used like a local BobbyBoard with all its inputs and outputs.
|
|
//
|
|
// Copyright 2005 by KTB mechatronics GmbH
|
|
// Author: Stefan Enderle
|
|
//------------------------------------------------------------------
|
|
|
|
|
|
#ifndef qfixSlaveBoard_h
|
|
#define qfixSlaveBoard_h
|
|
|
|
#include "qfixI2CMaster.h"
|
|
#include "qfixI2CDefs.h"
|
|
|
|
|
|
const uint8_t CMD_LEDON = 0;
|
|
const uint8_t CMD_LEDOFF = 1;
|
|
const uint8_t CMD_LEDSOFF = 2;
|
|
const uint8_t CMD_POWERON = 3;
|
|
const uint8_t CMD_POWEROFF = 4;
|
|
const uint8_t CMD_MOTOR = 5;
|
|
const uint8_t CMD_BUTTON = 6;
|
|
const uint8_t CMD_ANALOG = 7;
|
|
const uint8_t CMD_DIGITAL = 8;
|
|
|
|
|
|
//----------------------------------------
|
|
|
|
|
|
|
|
class SlaveBoard : I2CMaster
|
|
{
|
|
public:
|
|
SlaveBoard();
|
|
SlaveBoard(uint8_t logicalID);
|
|
|
|
/** Puts on LED i
|
|
*/
|
|
void ledOn(uint8_t i);
|
|
|
|
/** Puts off LED i
|
|
*/
|
|
void ledOff(uint8_t i);
|
|
|
|
/** Puts off all LEDs
|
|
*/
|
|
void ledsOff();
|
|
|
|
/** Puts the power output i on
|
|
*/
|
|
void powerOn(uint8_t i);
|
|
|
|
/** Puts the power output i off
|
|
*/
|
|
void powerOff(uint8_t i);
|
|
|
|
/** Sets motor i to the given speed. -255 <= speed <= 255
|
|
*/
|
|
void motor(uint8_t i, int speed);
|
|
|
|
/** Checks the state of button i. If it is pressed, true is returned,
|
|
* else false.
|
|
*/
|
|
bool button(uint8_t i);
|
|
|
|
/** returns the value of the analog port i. 0 <= value <= 255
|
|
*/
|
|
int analog(uint8_t i);
|
|
|
|
/** returns true if the digital port is logical high, else false.
|
|
*/
|
|
bool digital(uint8_t i);
|
|
};
|
|
|
|
|
|
SlaveBoard::SlaveBoard() : I2CMaster(I2C_ADDR_BOBBYBOARD)
|
|
{
|
|
}
|
|
|
|
|
|
SlaveBoard::SlaveBoard(uint8_t logicalID)
|
|
: I2CMaster(I2C_ADDR_BOBBYBOARD, logicalID)
|
|
{
|
|
}
|
|
|
|
|
|
void SlaveBoard::ledOn(uint8_t i)
|
|
{
|
|
if (i>3) return;
|
|
command(CMD_LEDON, i);
|
|
}
|
|
|
|
|
|
void SlaveBoard::ledOff(uint8_t i)
|
|
{
|
|
if (i>3) return;
|
|
command(CMD_LEDOFF, i);
|
|
}
|
|
|
|
|
|
void SlaveBoard::ledsOff()
|
|
{
|
|
command(CMD_LEDSOFF);
|
|
}
|
|
|
|
|
|
void SlaveBoard::powerOn(uint8_t i)
|
|
{
|
|
if (i>7) return;
|
|
command(CMD_POWERON, i);
|
|
}
|
|
|
|
|
|
void SlaveBoard::powerOff(uint8_t i)
|
|
{
|
|
if (i>7) return;
|
|
command(CMD_POWEROFF, i);
|
|
}
|
|
|
|
|
|
void SlaveBoard::motor(uint8_t i, int speed)
|
|
{
|
|
if (i>1) return;
|
|
uint8_t neg=(speed<0)?1:0;
|
|
uint8_t s;
|
|
if (speed>=0) s=uint8_t(speed); else s=-uint8_t(speed);
|
|
command(CMD_MOTOR, i, neg, s);
|
|
}
|
|
|
|
|
|
bool SlaveBoard::button(uint8_t i)
|
|
{
|
|
if (i>3) return false; // better error handling!
|
|
return (request(CMD_BUTTON, i) == 1);
|
|
}
|
|
|
|
|
|
int SlaveBoard::analog(uint8_t i)
|
|
{
|
|
if (i>3) return -1; // better error handling!
|
|
return (request(CMD_ANALOG, i));
|
|
}
|
|
|
|
|
|
bool SlaveBoard::digital(uint8_t i)
|
|
{
|
|
if (i>3) return false; // better error handling!
|
|
return (request(CMD_DIGITAL, i) == 1);
|
|
}
|
|
|
|
|
|
#endif
|
|
|