I made a LED-Cube_444 on Arduino UNO, I want to alter its blinking frequency by audio input from MIC to pc via TouchDesigner.
Could someone give me some advises for stepps?
My idea is: voice input form PIC to pc, TouchDesigner stream it to arduino analog pin, then arduino read the analog pin, here is my code for Arduino:
#include <Firmata.h>
byte analogPin = 0;
void analogWriteCallback(byte pin, int value)
{
if (IS_PIN_PWM(pin)) {
pinMode(PIN_TO_DIGITAL(pin), OUTPUT);
analogWrite(PIN_TO_PWM(pin), value);
}
}
#include <avr/pgmspace.h> // allows use of PROGMEM to store patterns in flash
#define LatchPin 1 // Pin connected to Pin 12 of 74HC595 (Latch STCP)
#define ClockPin 0 // Pin connected to Pin 11 of 74HC595 (Clock SHCP)
#define DataPin 3 // Pin connected to Pin 14 of 74HC595 (Data DS)
#define OEPin 2 // Pin connected to Pin 13 of 74HC595 (Output Enable OE)
unsigned long endTime; // Duration of pattern display
int displayTime = 100; // Time to display pattern
byte planePin[] {7,6,5,4}; // D16 - D19 Ground for each plane D16 - Top plane D19 Bottom plane
int p[8] = {0,0,0,0,0,0,0,0}; // Passes pattern values to patDisplay()
int pnl[5][2] = {{0,0},{0,0},{0,0},{0,0},{0,0}};
int data[] = { 0,240, 0, 15,240, 0, 15, 0,
0, 0, 0,255,255, 0, 0, 0,
0, 0,255, 0, 0,255, 0, 0,
15, 0,240, 0, 0, 15, 0,240,
240, 0,240, 0, 0, 15, 0, 15,
0, 15, 0, 15,240, 0,240, 0};
void setup()
{
Firmata.setFirmwareVersion(FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION);
Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
Firmata.begin(57600);
//Serial.begin(9600); // Do not use in program
pinMode(LatchPin, OUTPUT);
pinMode(ClockPin, OUTPUT);
pinMode(DataPin, OUTPUT);
pinMode(OEPin, OUTPUT);
for (int i = 0;i < 4; i++) {
pinMode(planePin[i], OUTPUT);
digitalWrite(planePin[i], LOW);
}
endTime = millis() + 10;
}
void loop()
{
while (Firmata.available()) {
Firmata.processInput();
}
// do one analogRead per loop, so if PC is sending a lot of
// analog write messages, we will only delay 1 analogRead
Firmata.sendAnalog(analogPin, analogRead(analogPin));
flashAll(analogRead(analogPin));
analogPin = analogPin + 1;
if (analogPin >= TOTAL_ANALOG_PINS) analogPin = 0;
}
const unsigned char PROGMEM patterns[] = {
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, 80,
B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, 1,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, 3,
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, 3,
B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B1111, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B0000, B1111, B1111, B1111, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B0000, B1111, B1111, B0000, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B0000, B1111, B0000, B0000, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B1111, B0000, B0000, B0000, B0000, B1111, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10,
B1111, B1111, B1111, B1111, B1001, B0000, B0000, B1001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 20,
B1001, B0000, B0000, B1001, B1111, B1111, B1111, B1111, B1001, B0000, B0000, B1001, B0000, B0000, B0000, B0000, 20,
B1001, B0000, B0000, B1001, B1001, B0000, B0000, B1001, B1111, B1111, B1111, B1111, B1001, B0000, B0000, B1001, 20,
B1001, B0000, B0000, B1001, B1001, B0000, B0000, B1001, B1001, B0000, B0000, B1001, B1111, B1111, B1111, B1111, 20,
B1111, B1111, B1111, B1111, B1001, B0000, B0000, B1001, B1001, B0000, B0000, B1001, B1111, B1111, B1111, B1111, 20,
B1111, B1111, B1111, B1111, B1111, B0000, B0000, B1111, B1111, B0000, B0000, B1111, B1111, B1111, B1111, B1111, 20,
B1111, B1111, B1111, B1111, B1111, B1001, B1001, B1111, B1111, B1001, B1001, B1111, B1111, B1111, B1111, B1111, 20,
B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, B1111, 20,
B1100, B1100, B0000, B0000, B1100, B1100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 20,
B0110, B0110, B0000, B0000, B0110, B0110, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 20,
B0011, B0011, B0000, B0000, B0011, B0011, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 20,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,0};
void allOn() {
displayMatrix(255,255); // Turn on all 16 LEDs
for (int i = 0;i < 4; i++) digitalWrite(planePin[i], LOW);
}
void allOff() {
displayMatrix(0,0); // Turn off all 16 LEDs
for (int i = 0;i < 4; i++) digitalWrite(planePin[i], HIGH);
}
void flashAll(int durationDelay) {
for (int i = 0;i < 4; i++) {
allOn();
//delay(500);
delay(durationDelay);
allOff();
//delay(500);
delay(durationDelay);
}
}
void displayMatrix(int first8, int second8) { // Write data to the 595 ICs
digitalWrite(LatchPin, LOW);
shiftOut(DataPin, ClockPin, MSBFIRST, second8); // D15 to D8
shiftOut(DataPin, ClockPin, MSBFIRST, first8); // D7 to D0
digitalWrite(LatchPin, HIGH);
}