68 lines
1.2 KiB
C++
Executable File
68 lines
1.2 KiB
C++
Executable File
/*
|
|
* Control a servo according to incoming OSC control
|
|
*
|
|
*/
|
|
#include <OSCBundle.h>
|
|
#include <OSCBoards.h>
|
|
#include <Servo.h>
|
|
|
|
|
|
#ifdef BOARD_HAS_USB_SERIAL
|
|
#include <SLIPEncodedUSBSerial.h>
|
|
SLIPEncodedUSBSerial SLIPSerial( thisBoardsSerialUSB );
|
|
#else
|
|
#include <SLIPEncodedSerial.h>
|
|
SLIPEncodedSerial SLIPSerial(Serial1);
|
|
#endif
|
|
|
|
Servo myservo;
|
|
|
|
void servoControl(OSCMessage &msg)
|
|
{
|
|
if (msg.isInt(0))
|
|
{
|
|
myservo.write(msg.getInt(0));
|
|
}
|
|
#ifdef TEMPoraray
|
|
else if (msg.isFloat(0))
|
|
{
|
|
//test if that pin is a PWM
|
|
if (digitalPinHasPWM(LED_BUILTIN))
|
|
{
|
|
pinMode(LED_BUILTIN, OUTPUT);
|
|
analogWrite(LED_BUILTIN, (int)(msg.getFloat(0)*127.0f));
|
|
}
|
|
else
|
|
SoftPWMSet(LED_BUILTIN, (int)(msg.getFloat(0)*127.0f));
|
|
}
|
|
#endif
|
|
|
|
}
|
|
|
|
void setup() {
|
|
SLIPSerial.begin(9600);
|
|
|
|
myservo.attach(13);
|
|
myservo.write(90);
|
|
|
|
|
|
}
|
|
//reads and dispatches the incoming message
|
|
void loop(){
|
|
OSCBundle bundleIN;
|
|
int size;
|
|
|
|
while(!SLIPSerial.endofPacket())
|
|
if( (size =SLIPSerial.available()) > 0)
|
|
{
|
|
while(size--)
|
|
bundleIN.fill(SLIPSerial.read());
|
|
}
|
|
|
|
if(!bundleIN.hasError())
|
|
bundleIN.dispatch("/servo", servoControl);
|
|
|
|
}
|
|
|
|
|