Lab_interaccio/2015/OVAL/OVAL_BASE/OVAL_BASE.ino

155 lines
4.4 KiB
Arduino
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
#include <Wire.h>
//#include <MIDI.h>
int CTS[7] = {A0, A1, A2, A3, A4, A5, A6};
int INT[7] = {50, 46, 44, 42, 40, 38, 34};
#define pad 0
#define blue 2
#define green 3
#define red 4
uint32_t time1;
boolean flag = true;
//// Settings for MIDI library v4.0 an upper
//struct MySettings : public midi::DefaultSettings{
// static const bool UseRunningStatus = false; // Messes with my old equipment!
//};
MIDI_CREATE_CUSTOM_INSTANCE(HardwareSerial, Serial, MIDI, MySettings);
void slaveSend(uint8_t channel, uint8_t reg) {
Wire.beginTransmission(channel); //start transmission to device
Wire.write(reg); // write value to write
Wire.endTransmission(); //end transmission
}
void rgbPad(uint8_t channel, uint8_t r, uint8_t g, uint8_t b){
Wire.beginTransmission(channel); //start transmission to device
Wire.write(2); // write value to write
Wire.write(r); // write value to write
Wire.write(g); // write value to write
Wire.write(b); // write value to write
Wire.endTransmission(); //end transmission
}
void rgbDing(uint8_t r, uint8_t g, uint8_t b){
analogWrite(red, r);
analogWrite(green, g);
analogWrite(blue, b);
}
uint16_t Sensor[8][5] = {{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0}};
void PadRead(int channel)
{
if (!digitalRead(INT[channel-1]))
{
unsigned long time_on = millis();
slaveSend(channel, 1);
delayMicroseconds(10);
Wire.requestFrom(channel, 10);
uint16_t temp_value = 0;
uint16_t count = 0;
while(Wire.available()) // slave may send less than requested
{
byte c = Wire.read(); // receive a byte as character
delay(10);
uint16_t b = Wire.read(); // receive a byte as character
uint16_t v = ((b<<8)&0xFF00) + c;
Sensor[channel-1][count] = v;
count++;
}
}
}
void allRead()
{
for (int i=1; i<7; i++)
{
PadRead(i);
}
}
void setup()
{
// Open serial communications and wait for port to open:
for (int i=0; i<7; i++) pinMode(CTS[i], OUTPUT);
for (int i=0; i<7; i++) digitalWrite(CTS[i], HIGH);
for (int i=0; i<7; i++) pinMode(INT[i], INPUT);
for (int i=0; i<7; i++) digitalWrite(INT[i], HIGH);
Wire.begin();
Wire.setClock(100000);
Serial.begin(57600);
// set the data rate for the SoftwareSerial port
Serial1.begin(57600);
time1 = millis();
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(red, OUTPUT);
rgbDing(0, 0, 0);
for (int i=0; i<7; i++) {rgbPad(i, 0, 0, 0);}
delay(100);
for (int i=0; i<7; i++) {rgbPad(i, 0, 255, 0); delay(200);}
rgbDing(0, 255, 0);
// MIDI.begin(4); // Launch MIDI and listen to channel 4
}
uint32_t time_refresh = 5;
void loop() // run over and over
{
// for (int i=0; i<7; i++) {rgbPad(i, 255, 0, 0); delay(time_refresh);}
// rgbDing(255, 0, 0);
// delay(time_refresh);
// for (int i=0; i<7; i++) {rgbPad(i, 0, 255, 0); delay(time_refresh);}
// rgbDing(0, 255, 0);
// delay(time_refresh);
// for (int i=0; i<7; i++) {rgbPad(i, 0, 0, 255); delay(time_refresh);}
// rgbDing(0, 0, 255);
// delay(time_refresh);
// for (int i=0; i<7; i++) {rgbPad(i, 255, 255, 0); delay(time_refresh);}
// rgbDing(255, 255, 0);
// delay(time_refresh);
// for (int i=0; i<7; i++) {rgbPad(i, 255, 255, 255); delay(time_refresh);}
// rgbDing(255, 255, 255);
// delay(time_refresh);
// allRead();
// if (!digitalRead(INT[0]))
{
allRead();
rgbPad(1, map(Sensor[0][4],0,1023,255,0),map(Sensor[0][4],0,1023,255,0),map(Sensor[0][4],0,1023,150,0));
// MIDI.sendNoteOn(42,map(Sensor[0][4],0,1023,127,0),1); // Send a Note (pitch 42, velo 127 on channel 1)
// Serial.write(42);
// Serial.write(map(Sensor[0][4],0,1023,127,0));
// Serial.write(1);
//// MIDI.sendNoteOff(42,0,1); // Stop the note
//
int i = 0;
// for (int i = 0; i<6; i++)
// {
Serial.print("PAD ");
Serial.print(i);
Serial.print(": ");
for (int j = 0; j<5; j++)
{
Serial.print(Sensor[i][j]*3300/1023.); // print the character
Serial.print(' ');
}
Serial.println();
}
delayMicroseconds(10);
// }
}