Skip to content
Snippets Groups Projects
Commit 3b20b6b6 authored by jsiegle's avatar jsiegle
Browse files

Add more options to ArduinoOutputEditor

parent ff719f1b
No related branches found
Tags v0.2.6
No related merge requests found
......@@ -22,28 +22,14 @@
*/
#include "ArduinoOutput.h"
#include "ArduinoOutputEditor.h"
#include <stdio.h>
ArduinoOutput::ArduinoOutput()
: GenericProcessor("Arduino Output"), state(false), outputChannel(13), inputChannel(-1)
: GenericProcessor("Arduino Output"), state(true), deviceSelected(false), outputChannel(13), inputChannel(-1)
{
// FIXME: Remove hard-coded serial port paths. These aren't always
// right, and in some cases (JUCE_MAC) are almost certainly wrong.
std::cout << "Warning: using hard-coded path to Arduino." << std::endl;
#if JUCE_LINUX
setDevice("/dev/ttyACM0");
#endif
#if JUCE_WIN32
setDevice("COM1");
#endif
#if JUCE_MAC
setDevice("tty.usbmodemfd121");
#endif
}
ArduinoOutput::~ArduinoOutput()
......@@ -63,40 +49,52 @@ AudioProcessorEditor* ArduinoOutput::createEditor()
void ArduinoOutput::setDevice(String devName)
{
Time timer;
if (!acquisitionIsActive)
{
arduino.connect(devName.toStdString());
Time timer;
if (arduino.isArduinoReady())
{
arduino.connect(devName.toStdString());
uint32 currentTime = timer.getMillisecondCounter();
if (arduino.isArduinoReady())
{
arduino.sendProtocolVersionRequest();
timer.waitForMillisecondCounter(currentTime + 2000);
arduino.update();
arduino.sendFirmwareVersionRequest();
uint32 currentTime = timer.getMillisecondCounter();
timer.waitForMillisecondCounter(currentTime + 4000);
arduino.update();
arduino.sendProtocolVersionRequest();
timer.waitForMillisecondCounter(currentTime + 2000);
arduino.update();
arduino.sendFirmwareVersionRequest();
std::cout << "firmata v" << arduino.getMajorFirmwareVersion()
<< "." << arduino.getMinorFirmwareVersion() << std::endl;
timer.waitForMillisecondCounter(currentTime + 4000);
arduino.update();
}
std::cout << "firmata v" << arduino.getMajorFirmwareVersion()
<< "." << arduino.getMinorFirmwareVersion() << std::endl;
if (arduino.isInitialized())
{
}
std::cout << "Arduino is initialized." << std::endl;
arduino.sendDigitalPinMode(outputChannel, ARD_OUTPUT);
}
else
{
std::cout << "Arduino is NOT initialized." << std::endl;
if (arduino.isInitialized())
{
std::cout << "Arduino is initialized." << std::endl;
arduino.sendDigitalPinMode(outputChannel, ARD_OUTPUT);
sendActionMessage("Arduino initialized at" + devName);
deviceSelected = true;
}
else
{
std::cout << "Arduino is NOT initialized." << std::endl;
sendActionMessage("Arduino could not be initialized at" + devName);
}
} else {
sendActionMessage("Cannot change device while acquisition is active.");
}
}
void ArduinoOutput::handleEvent(int eventType, MidiMessage& event, int sampleNum)
{
if (eventType == TTL)
......@@ -111,22 +109,31 @@ void ArduinoOutput::handleEvent(int eventType, MidiMessage& event, int sampleNum
// " on channel " << eventChannel <<
// " with value " << eventId << std::endl;
if (inputChannel == -1 || eventChannel == inputChannel)
if (eventChannel == gateChannel)
{
if (eventId == 0)
if (eventId == 1)
{
arduino.sendDigital(outputChannel, ARD_LOW);
state = true;
} else {
state = false;
}
else
}
if (state)
{
if (inputChannel == -1 || eventChannel == inputChannel)
{
arduino.sendDigital(outputChannel, ARD_HIGH);
state = true;
if (eventId == 0)
{
arduino.sendDigital(outputChannel, ARD_LOW);
}
else
{
arduino.sendDigital(outputChannel, ARD_HIGH);
}
}
}
//ArduinoOutputEditor* ed = (ArduinoOutputEditor*) getEditor();
//ed->receivedEvent();
}
......@@ -135,28 +142,50 @@ void ArduinoOutput::handleEvent(int eventType, MidiMessage& event, int sampleNum
void ArduinoOutput::setParameter(int parameterIndex, float newValue)
{
editor->updateParameterButtons(parameterIndex);
// make sure current output channel is off:
arduino.sendDigital(outputChannel, ARD_LOW);
if (parameterIndex == 0)
{
outputChannel = (int) newValue;
} else if (parameterIndex == 1)
{
inputChannel = (int) newValue;
} else if (parameterIndex == 2)
{
gateChannel = (int) newValue;
if (gateChannel == -1)
state = true;
else
state = false;
}
}
void ArduinoOutput::setOutputChannel(int chan)
{
outputChannel = chan;
setParameter(0, chan);
}
void ArduinoOutput::setInputChannel(int chan)
{
inputChannel = chan;
setParameter(1, chan-1);
}
bool ArduinoOutput::enable()
void ArduinoOutput::setGateChannel(int chan)
{
setParameter(2, chan-1);
}
bool ArduinoOutput::enable()
{
return deviceSelected;
acquisitionIsActive = true;
}
bool ArduinoOutput::disable()
{
arduino.sendDigital(outputChannel, ARD_LOW);
acquisitionIsActive = false;
}
void ArduinoOutput::process(AudioSampleBuffer& buffer,
......
......@@ -26,7 +26,6 @@
#include "../../../JuceLibraryCode/JuceHeader.h"
#include "ArduinoOutputEditor.h"
#include "../Serial/ofArduino.h"
#include "../GenericProcessor/GenericProcessor.h"
......@@ -77,10 +76,12 @@ public:
void setOutputChannel(int);
void setInputChannel(int);
void setGateChannel(int);
void setDevice(String deviceString);
int outputChannel;
int inputChannel;
int gateChannel;
private:
......@@ -88,6 +89,8 @@ private:
ofArduino arduino;
bool state;
bool acquisitionIsActive;
bool deviceSelected;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ArduinoOutput);
......
......@@ -30,25 +30,76 @@ ArduinoOutputEditor::ArduinoOutputEditor(GenericProcessor* parentNode, bool useD
{
accumulator = 0;
// accumulator = 0;
desiredWidth = 150;
Image im;
im = ImageCache::getFromMemory(BinaryData::ArduinoIcon_png,
BinaryData::ArduinoIcon_pngSize);
arduino = (ArduinoOutput*) parentNode;
icon = new ImageIcon(im);
addAndMakeVisible(icon);
icon->setBounds(15,15,120,120);
vector <ofSerialDeviceInfo> devices = serial.getDeviceList();
icon->setOpacity(0.3f);
// Image im;
// im = ImageCache::getFromMemory(BinaryData::ArduinoIcon_png,
// BinaryData::ArduinoIcon_pngSize);
// icon = new ImageIcon(im);
// addAndMakeVisible(icon);
// icon->setBounds(75,15,50,50);
// icon->setOpacity(0.3f);
deviceSelector = new ComboBox();
deviceSelector->setBounds(10,105,125,20);
deviceSelector->addListener(this);
deviceSelector->addItem("Device",1);
for (int i = 0; i < devices.size(); i++)
{
deviceSelector->addItem(devices[i].getDevicePath(),i+2);
}
deviceSelector->setSelectedId(1, dontSendNotification);
addAndMakeVisible(deviceSelector);
inputChannelSelector = new ComboBox();
inputChannelSelector->setBounds(10,30,55,20);
inputChannelSelector->addListener(this);
inputChannelSelector->addItem("Trig",1);
for (int i = 0; i < 16; i++)
inputChannelSelector->addItem(String(i+1),i+2); // start numbering at one for
// user-visible channels
inputChannelSelector->setSelectedId(1, dontSendNotification);
addAndMakeVisible(inputChannelSelector);
outputChannelSelector = new ComboBox();
outputChannelSelector->setBounds(10,80,80,20);
outputChannelSelector->addListener(this);
outputChannelSelector->addItem("Output CH",1);
for (int i = 1; i < 13; i++)
outputChannelSelector->addItem(String(i+1),i+2);
outputChannelSelector->setSelectedId(14, dontSendNotification);
addAndMakeVisible(outputChannelSelector);
gateChannelSelector = new ComboBox();
gateChannelSelector->setBounds(10,55,55,20);
gateChannelSelector->addListener(this);
gateChannelSelector->addItem("Gate",1);
for (int i = 0; i < 16; i++)
gateChannelSelector->addItem(String(i+1),i+2); // start numbering at one for
// user-visible channels
gateChannelSelector->setSelectedId(1, dontSendNotification);
addAndMakeVisible(gateChannelSelector);
}
ArduinoOutputEditor::~ArduinoOutputEditor()
{
deleteAllChildren();
}
void ArduinoOutputEditor::receivedEvent()
......@@ -59,6 +110,23 @@ void ArduinoOutputEditor::receivedEvent()
}
void ArduinoOutputEditor::comboBoxChanged(ComboBox* comboBoxThatHasChanged)
{
if (comboBoxThatHasChanged == deviceSelector)
{
arduino->setDevice(deviceSelector->getText());
} else if (comboBoxThatHasChanged == outputChannelSelector)
{
arduino->setOutputChannel(outputChannelSelector->getSelectedId()-1);
} else if (comboBoxThatHasChanged == inputChannelSelector)
{
arduino->setInputChannel(inputChannelSelector->getSelectedId()-1);
} else if (comboBoxThatHasChanged == gateChannelSelector)
{
arduino->setGateChannel(gateChannelSelector->getSelectedId()-1);
}
}
void ArduinoOutputEditor::timerCallback()
{
......
......@@ -28,6 +28,8 @@
#include "../../../JuceLibraryCode/JuceHeader.h"
#include "../Editors/GenericEditor.h"
#include "../Editors/ImageIcon.h"
#include "ArduinoOutput.h"
#include "../Serial/ofSerial.h"
class ImageIcon;
......@@ -39,7 +41,8 @@ class ImageIcon;
*/
class ArduinoOutputEditor : public GenericEditor
class ArduinoOutputEditor : public GenericEditor,
public ComboBox::Listener
{
public:
......@@ -50,8 +53,20 @@ public:
ImageIcon* icon;
void comboBoxChanged(ComboBox* comboBoxThatHasChanged);
ArduinoOutput* arduino;
ofSerial serial;
private:
// ScopedPointer<UtilityButton> triggerButton;
ScopedPointer<ComboBox> inputChannelSelector;
ScopedPointer<ComboBox> outputChannelSelector;
ScopedPointer<ComboBox> gateChannelSelector;
ScopedPointer<ComboBox> deviceSelector;
void timerCallback();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ArduinoOutputEditor);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment