a new re-make: arduino micro + esp8266 combo-

This commit is contained in:
Dooho Yi 2023-05-07 13:11:21 +09:00
parent bd236b605d
commit 6147be7728
3 changed files with 370 additions and 169 deletions

View file

@ -0,0 +1,103 @@
//
// ringringrain - pad(digital input) part. (arduino micro)
//
// D. Yi @ 2023 5 5
//
////pin usage
// 5 6 7 8 9 10 11 12 + 18(a0) 19(a1) 20(a2) 21(a3) 22(a4) 23(a5) == 14 digital in
//
// 0 1 => uart
// 0 1 => all works.. use serial (TTL+WIFI) or (RS232)
////pad structure
#define FLIPPED
// --> comment/uncomment for horizontal flipping of the installation.
#define NUMKEYS 14 // columns : 14, rows : 1
// --> how many keys are available for this pad
int keystat[NUMKEYS] = {0, };
// --> a buffer to store statuses of all keys
// --> needed to extract only 'the change' of key statuses
#define MAXCHANGES 10
int keychanges[MAXCHANGES] = {0, };
int n_keychg = 0;
// --> for monitoring only 'changed' keys.
#define NUMCOLS 14
#ifdef FLIPPED
int pins_cols[NUMCOLS] = {5, 6, 7, 8, 9, 10, 11, 12, 18, 19, 20, 21, 22, 23}; //14
// --> cols is horizontal offsets on the board
// --> to be read as input.
#else
int pins_cols[NUMCOLS] = {23, 22, 21, 20, 19, 18, 12, 11, 10, 9, 8, 7, 6, 5}; //14
// --> cols is horizontal offsets on the board
// --> to be read as input.
#endif
void setup()
{
//disable TX/RX led blinking: Arduino Micro specific
// pinMode(LED_BUILTIN_TX,INPUT);
// pinMode(LED_BUILTIN_RX,INPUT);
//serial
Serial.begin(57600); //debug (USB)
Serial1.begin(57600); //esp8266
//pinmodes
// cols : to be read as input. (PULL-UP)
for (int idx = 0; idx < NUMCOLS; idx++) {
pinMode(pins_cols[idx], INPUT_PULLUP);
}
}
void loop()
{
// perform a full scan of the key statuses!
// read all cols
for (int col = 0; col < NUMCOLS; col++) {
int key = col;
if (key < NUMKEYS) {
int state = !digitalRead(pins_cols[col]); //logic inversion. (HIGH = noteoff, LOW = noteon.)
// if it is 'changed',
if (state != keystat[key]) {
// if there is a room to record this change,
if (n_keychg < MAXCHANGES) {
// make a memo.
int keycoded = (key) * 10 + state; // for example : C4 note-on --> 601 ( == 60*10 + 1)
keychanges[n_keychg] = keycoded;
n_keychg++;
// send msg. over Serial.
byte * b = (byte*)&keycoded;
Serial1.write(b, 2);
//
// Serial.printf("sizeof(keycoded): %d\n", sizeof(keycoded)); // result == 2 (16bit machine)
}
}
// okay. good. now, apply the change.
keystat[key] = state;
}
}
// print out the changes.
for (int chg = 0; chg < n_keychg; chg++) {
Serial.print(keychanges[chg]);
Serial.print(" ");
}
// clear 'keychanges' array
for (int idx = 0; idx < MAXCHANGES; idx++) {
keychanges[idx] = 0;
n_keychg = 0;
}
//
delay(50);
}

View file

@ -0,0 +1,136 @@
//
// ringringrain - WIFI part. (esp8266)
//
// D. Yi @ 2023 5 5
//
////network!
const char* ssid = "nolink";
const char* password = "2222277777";
const int NETWORK_PORT = 27016;
//wi-fi
#include <ESP8266WiFi.h>
//wi-fi event handlers : re-connect automatically
WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;
void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial.println("Connected to Wi-Fi sucessfully.");
Serial.print("IP address: ");
Serial.println("Mac address: " + WiFi.macAddress());
Serial.println(WiFi.localIP());
digitalWrite(2, HIGH);
}
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial.println("Disconnected from Wi-Fi, trying to reconnect...");
WiFi.disconnect();
WiFi.begin(ssid, password);
digitalWrite(2, LOW);
}
//firmata over wi-fi
#include <ConfigurableFirmata.h>
#include "utility/WiFiClientStream.h"
#include "utility/WiFiServerStream.h"
WiFiServerStream serverStream(NETWORK_PORT);
//firmware update over the air
#include <ArduinoOTA.h>
//client device @ soft-serial (only RX valid. tx. is dummy.)
#include <SoftwareSerial.h>
SoftwareSerial client(D2, D8); // RX | TX
//==> NO way to do RX/TX only mode?? how bad. later change library?
////
void setup()
{
//wifi indicator
pinMode(2, OUTPUT);
digitalWrite(2, LOW); //disconnected.
//serial (for debug & info)
Serial.begin(115200);
//to get data frames from the client device.
client.begin(57600);
//wifi
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
WiFi.mode(WIFI_STA);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
// Serial.print(".");
delay(500);
}
Serial.println("");
//firmata
Firmata.disableBlinkVersion();
Firmata.begin(serverStream);
//ota
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
}
void loop()
{
// process client data frame
if (client.available() >= 2) {
//
int keycoded = 0; //==> NOTE init=0 is mandatory! (sender is 16bit device. receiver 32bit device.)
byte * b = (byte*)&keycoded;
client.readBytes(b, 2);
Serial.println(keycoded);
//
Firmata.sendAnalog(0, keycoded);
}
// send out alive counter every 1sec.
static unsigned long last = 0;
unsigned long now = millis();
if (now > last + 500) {
last = now;
//
static int alivecounter = 0;
Firmata.sendAnalog(1, alivecounter);
alivecounter++;
if (alivecounter == 1000) alivecounter = 0;
//
}
//firmata over wi-fi
serverStream.maintain();
//
ArduinoOTA.handle();
//for wdt
yield();
}

View file

@ -16,8 +16,7 @@
#X floatatom 21 120 5 0 0 0 - - - 0; #X floatatom 21 120 5 0 0 0 - - - 0;
#X msg 924 530 \; pd dsp 1; #X msg 924 530 \; pd dsp 1;
#X obj 924 507 del 5000; #X obj 924 507 del 5000;
#X msg 19 515 \; pitches 0 60 62 64 65 67 69 71 72 74 76 77 79 81 83 #X msg 19 515 \; pitches 0 60 62 64 65 67 69 71 72 74 76 77 79 81 83 84 86 88 89 91 93 95 96 98 100 101 103 105 107 108;
84 86 88 89 91 93 95 96 98 100 101 103 105 107 108;
#X obj 21 68 unpack f f; #X obj 21 68 unpack f f;
#X listbox 21 220 7 0 0 0 - - - 0; #X listbox 21 220 7 0 0 0 - - - 0;
#X obj 235 181 pack f f; #X obj 235 181 pack f f;
@ -27,7 +26,7 @@
#X obj 235 97 tabread pitches; #X obj 235 97 tabread pitches;
#X floatatom 235 120 5 0 0 0 - - - 0; #X floatatom 235 120 5 0 0 0 - - - 0;
#X obj 235 68 unpack f f; #X obj 235 68 unpack f f;
#N canvas 575 33 434 533 rain 1; #N canvas 1004 214 434 533 rain 0;
#X obj 27 80 loadbang; #X obj 27 80 loadbang;
#N canvas 0 22 450 300 (subpatch) 0; #N canvas 0 22 450 300 (subpatch) 0;
#X array raining 2.57403e+06 float 0; #X array raining 2.57403e+06 float 0;
@ -40,13 +39,10 @@
#X obj 169 392 *~; #X obj 169 392 *~;
#X obj 169 431 hip~ 5; #X obj 169 431 hip~ 5;
#X msg 42 284 bang; #X msg 42 284 bang;
#X obj 120 331 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #X obj 120 331 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#000000 #000000; #X obj 27 186 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#X obj 27 186 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 42 210 delay 2000; #X obj 42 210 delay 2000;
#X obj 42 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #X obj 42 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#000000;
#X obj 184 290 * 6; #X obj 184 290 * 6;
#X text 32 21 sound generators - sample sound; #X text 32 21 sound generators - sample sound;
#X floatatom 184 220 5 0 0 1 hands - - 0; #X floatatom 184 220 5 0 0 1 hands - - 0;
@ -76,8 +72,7 @@
#X restore 89 215 pd pan; #X restore 89 215 pd pan;
#X obj 153 107 snapshot~; #X obj 153 107 snapshot~;
#X floatatom 228 147 5 0 0 0 - - - 0; #X floatatom 228 147 5 0 0 0 - - - 0;
#X obj 36 42 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #X obj 36 42 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#000000;
#X obj 160 50 +~ 1; #X obj 160 50 +~ 1;
#X obj 160 77 *~ 0.5; #X obj 160 77 *~ 0.5;
#X obj 160 22 osc~ 0.1; #X obj 160 22 osc~ 0.1;
@ -104,14 +99,12 @@
#X obj 182 267 +; #X obj 182 267 +;
#X obj 152 267 f; #X obj 152 267 f;
#X obj 152 238 t b a; #X obj 152 238 t b a;
#X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X msg 199 113 0; #X msg 199 113 0;
#X obj 133 76 t b a b; #X obj 133 76 t b a b;
#X obj 152 215 tabread hands; #X obj 152 215 tabread hands;
#X obj 18 65 metro 100; #X obj 18 65 metro 100;
#X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 #X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
0 1;
#X obj 117 285 f; #X obj 117 285 f;
#X obj 18 22 loadbang; #X obj 18 22 loadbang;
#X floatatom 117 308 5 0 0 0 - - - 0; #X floatatom 117 308 5 0 0 0 - - - 0;
@ -214,19 +207,16 @@
#X obj 955 390 + 40; #X obj 955 390 + 40;
#N canvas 40 465 713 292 main 0; #N canvas 40 465 713 292 main 0;
#X obj 377 175 env~; #X obj 377 175 env~;
#X obj 427 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0 #X obj 427 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
;
#X obj 377 199 - 100; #X obj 377 199 - 100;
#X obj 377 75 catch~ front; #X obj 377 75 catch~ front;
#X obj 306 129 dac~ 4 7 8; #X obj 306 129 dac~ 4 7 8;
#X obj 587 175 env~; #X obj 587 175 env~;
#X obj 637 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0 #X obj 637 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
;
#X obj 587 199 - 100; #X obj 587 199 - 100;
#X obj 516 129 dac~ 2 5 6; #X obj 516 129 dac~ 2 5 6;
#X obj 157 175 env~; #X obj 157 175 env~;
#X obj 207 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0 #X obj 207 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
;
#X obj 157 199 - 100; #X obj 157 199 - 100;
#X obj 16 129 dac~ 1 2 3 4 5 6 7 8; #X obj 16 129 dac~ 1 2 3 4 5 6 7 8;
#X obj 157 75 catch~ rain; #X obj 157 75 catch~ rain;
@ -265,11 +255,10 @@
#X obj 342 303 throw~ front; #X obj 342 303 throw~ front;
#X obj 628 303 throw~ right; #X obj 628 303 throw~ right;
#X obj 842 303 throw~ right; #X obj 842 303 throw~ right;
#N canvas 588 200 852 598 ringringrain_A 0; #N canvas 0 33 852 598 ringringrain_A 0;
#X obj 388 102 arduino-wifi; #X obj 388 102 arduino-wifi;
#X msg 478 102 disconnect; #X msg 478 102 disconnect;
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 388 165 route analog; #X obj 388 165 route analog;
#X obj 182 336 t a a; #X obj 182 336 t a a;
#X obj 182 359 / 10; #X obj 182 359 / 10;
@ -290,30 +279,20 @@
#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140); #X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140);
#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280); #X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280);
#N canvas 273 125 970 258 simulation 0; #N canvas 273 125 970 258 simulation 0;
#X obj 35 48 tgl 15 0 empty empty on/off\\\ (normal:z\\\ to\\\ i\\\ 28keys) #X obj 35 48 tgl 15 0 empty empty on/off\ (normal:z\ to\ i\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
17 7 0 10 #fcfcfc #000000 #000000 0 1; #X obj 515 48 tgl 15 0 empty empty on/off\ (+shift:Z\ to\ I\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 515 48 tgl 15 0 empty empty on/off\\\ (+shift:Z\\\ to\\\ I\\\ 28keys)
17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 515 150 keyhands; #X obj 515 150 keyhands;
#X floatatom 515 173 5 0 0 0 - - - 0; #X floatatom 515 173 5 0 0 0 - - - 0;
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 49 69 loadbang; #X obj 49 69 loadbang;
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; #X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; 109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\; 103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\; 101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\;
103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\;
101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
#X obj 866 19 key; #X obj 866 19 key;
#X floatatom 866 42 5 0 0 0 - - - 0; #X floatatom 866 42 5 0 0 0 - - - 0;
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; #X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; 77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71 \\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\; 82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71
\\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\;
82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
#X obj 529 69 loadbang; #X obj 529 69 loadbang;
#X obj 35 150 keyhands; #X obj 35 150 keyhands;
#X floatatom 35 173 5 0 0 0 - - - 0; #X floatatom 35 173 5 0 0 0 - - - 0;
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000;
#X obj 35 211 outlet; #X obj 35 211 outlet;
#X obj 515 211 outlet; #X obj 515 211 outlet;
#X obj 272 9 inlet; #X obj 272 9 inlet;
@ -333,12 +312,10 @@
#X connect 16 0 0 0; #X connect 16 0 0 0;
#X connect 16 0 1 0; #X connect 16 0 1 0;
#X restore 650 234 pd simulation left right paper; #X restore 650 234 pd simulation left right paper;
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 108 102 arduino-wifi; #X obj 108 102 arduino-wifi;
#X msg 198 102 disconnect; #X msg 198 102 disconnect;
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 108 165 route analog; #X obj 108 165 route analog;
#X obj 108 211 * 1023; #X obj 108 211 * 1023;
#X text 22 251 interlace ==>; #X text 22 251 interlace ==>;
@ -347,27 +324,21 @@
#X obj 385 561 outlet; #X obj 385 561 outlet;
#X obj 108 188 route 0 1, f 17; #X obj 108 188 route 0 1, f 17;
#X floatatom 221 189 5 0 0 2 alivecounter - - 0; #X floatatom 221 189 5 0 0 2 alivecounter - - 0;
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 303 188 timer; #X obj 303 188 timer;
#X obj 303 165 t b b; #X obj 303 165 t b b;
#X floatatom 303 211 5 0 0 0 - - - 0; #X floatatom 303 211 5 0 0 0 - - - 0;
#X obj 308 323 del 1000; #X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
#000000 #000000;
#X msg 308 300 stop \, bang; #X msg 308 300 stop \, bang;
#X obj 157 211 * 1023; #X obj 157 211 * 1023;
#X obj 308 561 outlet; #X obj 308 561 outlet;
#X obj 501 561 outlet; #X obj 501 561 outlet;
#X obj 501 323 del 1000; #X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
#000000 #000000;
#X msg 501 300 stop \, bang; #X msg 501 300 stop \, bang;
#X obj 388 211 * 1023; #X obj 388 211 * 1023;
#X obj 388 188 route 0 1, f 17; #X obj 388 188 route 0 1, f 17;
#X floatatom 501 189 5 0 0 2 alivecounter - - 0; #X floatatom 501 189 5 0 0 2 alivecounter - - 0;
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 583 188 timer; #X obj 583 188 timer;
#X obj 583 165 t b b; #X obj 583 165 t b b;
#X floatatom 583 211 5 0 0 0 - - - 0; #X floatatom 583 211 5 0 0 0 - - - 0;
@ -378,17 +349,18 @@
#X obj 110 443 unpack f f; #X obj 110 443 unpack f f;
#X obj 110 506 route 1; #X obj 110 506 route 1;
#X obj 110 485 pack f f; #X obj 110 485 pack f f;
#X obj 20 560 print noteon; #X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000
#000000 0 1;
#X obj 273 33 sel 1 0; #X obj 273 33 sel 1 0;
#X floatatom 182 316 5 0 0 0 - - - 0; #X floatatom 182 316 5 0 0 0 - - - 0;
#X obj 28 348 sel 431 151 401 121;
#X obj 108 298 sel 121 151; #X obj 108 298 sel 121 151;
#X obj 308 323 del 1500;
#X obj 501 323 del 1500;
#X text 420 445 <== DEACTIVATED synth(lower);
#X obj 20 560 print noteonA;
#X connect 0 0 3 0; #X connect 0 0 3 0;
#X connect 0 1 2 0; #X connect 0 1 2 0;
#X connect 1 0 0 1; #X connect 1 0 0 1;
#X connect 3 0 49 0; #X connect 3 0 47 0;
#X connect 4 0 5 0; #X connect 4 0 5 0;
#X connect 4 1 7 0; #X connect 4 1 7 0;
#X connect 5 0 6 0; #X connect 5 0 6 0;
@ -399,8 +371,8 @@
#X connect 8 0 15 1; #X connect 8 0 15 1;
#X connect 8 0 17 1; #X connect 8 0 17 1;
#X connect 9 0 11 0; #X connect 9 0 11 0;
#X connect 10 0 67 0; #X connect 10 0 63 0;
#X connect 11 0 59 0; #X connect 11 0 57 0;
#X connect 12 0 13 0; #X connect 12 0 13 0;
#X connect 13 0 17 0; #X connect 13 0 17 0;
#X connect 14 0 19 0; #X connect 14 0 19 0;
@ -420,54 +392,53 @@
#X connect 27 0 33 0; #X connect 27 0 33 0;
#X connect 28 0 20 0; #X connect 28 0 20 0;
#X connect 33 0 28 0; #X connect 33 0 28 0;
#X connect 33 1 42 0; #X connect 33 1 41 0;
#X connect 34 0 35 0; #X connect 34 0 35 0;
#X connect 35 0 37 0; #X connect 35 0 37 0;
#X connect 35 0 41 0; #X connect 35 0 40 0;
#X connect 36 0 38 0; #X connect 36 0 38 0;
#X connect 37 0 36 0; #X connect 37 0 36 0;
#X connect 37 1 36 1; #X connect 37 1 36 1;
#X connect 39 0 40 0; #X connect 39 0 42 0;
#X connect 39 0 46 0; #X connect 40 0 64 0;
#X connect 40 0 43 0; #X connect 41 0 34 0;
#X connect 41 0 39 0; #X connect 44 0 43 0;
#X connect 42 0 34 0; #X connect 45 0 65 0;
#X connect 45 0 46 0; #X connect 46 0 21 0;
#X connect 45 0 40 0; #X connect 47 0 46 0;
#X connect 46 0 44 0; #X connect 47 1 53 0;
#X connect 47 0 45 0; #X connect 48 0 49 0;
#X connect 48 0 21 0; #X connect 49 0 51 0;
#X connect 49 0 48 0; #X connect 49 0 45 0;
#X connect 49 1 55 0; #X connect 50 0 52 0;
#X connect 50 0 51 0; #X connect 51 0 50 0;
#X connect 51 0 53 0; #X connect 51 1 50 1;
#X connect 51 0 47 0; #X connect 53 0 48 0;
#X connect 52 0 54 0; #X connect 54 0 24 1;
#X connect 53 0 52 0; #X connect 55 0 0 1;
#X connect 53 1 52 1; #X connect 56 0 59 0;
#X connect 55 0 50 0; #X connect 56 1 59 1;
#X connect 56 0 24 1; #X connect 57 0 56 0;
#X connect 57 0 0 1; #X connect 57 1 56 1;
#X connect 58 0 61 0; #X connect 58 0 67 0;
#X connect 58 1 61 1;
#X connect 59 0 58 0; #X connect 59 0 58 0;
#X connect 59 1 58 1; #X connect 60 0 61 0;
#X connect 60 0 62 0; #X connect 61 0 54 0;
#X connect 61 0 60 0; #X connect 61 0 55 0;
#X connect 63 0 64 0; #X connect 61 1 25 0;
#X connect 64 0 56 0; #X connect 61 1 1 0;
#X connect 64 0 57 0; #X connect 62 0 4 0;
#X connect 64 1 25 0; #X connect 63 2 62 0;
#X connect 64 1 1 0; #X connect 64 0 39 0;
#X connect 65 0 4 0; #X connect 64 0 44 0;
#X connect 67 2 65 0; #X connect 65 0 44 0;
#X connect 65 0 39 0;
#X restore 21 19 pd ringringrain_A ........ front wall; #X restore 21 19 pd ringringrain_A ........ front wall;
#X f 54; #X f 54;
#N canvas 564 23 863 598 ringringrain_B 0; #N canvas 0 86 863 598 ringringrain_B 0;
#X obj 388 102 arduino-wifi; #X obj 388 102 arduino-wifi;
#X msg 478 102 disconnect; #X msg 478 102 disconnect;
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 388 165 route analog; #X obj 388 165 route analog;
#X obj 182 326 t a a; #X obj 182 326 t a a;
#X obj 182 349 / 10; #X obj 182 349 / 10;
@ -488,30 +459,20 @@
#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140); #X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140);
#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280); #X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280);
#N canvas 273 125 970 258 simulation 0; #N canvas 273 125 970 258 simulation 0;
#X obj 35 48 tgl 15 0 empty empty on/off\\\ (normal:z\\\ to\\\ i\\\ 28keys) #X obj 35 48 tgl 15 0 empty empty on/off\ (normal:z\ to\ i\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
17 7 0 10 #fcfcfc #000000 #000000 0 1; #X obj 515 48 tgl 15 0 empty empty on/off\ (+shift:Z\ to\ I\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 515 48 tgl 15 0 empty empty on/off\\\ (+shift:Z\\\ to\\\ I\\\ 28keys)
17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 515 150 keyhands; #X obj 515 150 keyhands;
#X floatatom 515 173 5 0 0 0 - - - 0; #X floatatom 515 173 5 0 0 0 - - - 0;
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 49 69 loadbang; #X obj 49 69 loadbang;
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; #X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; 109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\; 103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\; 101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\;
103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\;
101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
#X obj 866 19 key; #X obj 866 19 key;
#X floatatom 866 42 5 0 0 0 - - - 0; #X floatatom 866 42 5 0 0 0 - - - 0;
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; #X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; 77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71 \\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\; 82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71
\\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\;
82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
#X obj 529 69 loadbang; #X obj 529 69 loadbang;
#X obj 35 150 keyhands; #X obj 35 150 keyhands;
#X floatatom 35 173 5 0 0 0 - - - 0; #X floatatom 35 173 5 0 0 0 - - - 0;
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000;
#X obj 35 211 outlet; #X obj 35 211 outlet;
#X obj 515 211 outlet; #X obj 515 211 outlet;
#X obj 272 9 inlet; #X obj 272 9 inlet;
@ -531,12 +492,10 @@
#X connect 16 0 0 0; #X connect 16 0 0 0;
#X connect 16 0 1 0; #X connect 16 0 1 0;
#X restore 650 234 pd simulation left right paper; #X restore 650 234 pd simulation left right paper;
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 108 102 arduino-wifi; #X obj 108 102 arduino-wifi;
#X msg 198 102 disconnect; #X msg 198 102 disconnect;
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 108 165 route analog; #X obj 108 165 route analog;
#X text 22 251 interlace ==>; #X text 22 251 interlace ==>;
#X text 253 421 <== split: upper/lower; #X text 253 421 <== split: upper/lower;
@ -545,40 +504,41 @@
#X obj 108 211 * 1023; #X obj 108 211 * 1023;
#X obj 108 188 route 0 1, f 17; #X obj 108 188 route 0 1, f 17;
#X floatatom 221 189 5 0 0 2 alivecounter - - 0; #X floatatom 221 189 5 0 0 2 alivecounter - - 0;
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 303 188 timer; #X obj 303 188 timer;
#X obj 303 165 t b b; #X obj 303 165 t b b;
#X floatatom 303 211 5 0 0 0 - - - 0; #X floatatom 303 211 5 0 0 0 - - - 0;
#X obj 308 323 del 1000; #X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
#000000 #000000;
#X msg 308 300 stop \, bang; #X msg 308 300 stop \, bang;
#X obj 157 211 * 1023; #X obj 157 211 * 1023;
#X obj 308 561 outlet; #X obj 308 561 outlet;
#X obj 501 561 outlet; #X obj 501 561 outlet;
#X obj 501 323 del 1000; #X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
#000000 #000000;
#X msg 501 300 stop \, bang; #X msg 501 300 stop \, bang;
#X obj 388 211 * 1023; #X obj 388 211 * 1023;
#X obj 388 188 route 0 1, f 17; #X obj 388 188 route 0 1, f 17;
#X floatatom 501 189 5 0 0 2 alivecounter - - 0; #X floatatom 501 189 5 0 0 2 alivecounter - - 0;
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
#000000 #000000;
#X obj 583 188 timer; #X obj 583 188 timer;
#X obj 583 165 t b b; #X obj 583 165 t b b;
#X floatatom 583 211 5 0 0 0 - - - 0; #X floatatom 583 211 5 0 0 0 - - - 0;
#X obj 437 211 * 1023; #X obj 437 211 * 1023;
#X msg 177 77 connect 192.168.88.113 27016; #X msg 177 77 connect 192.168.88.113 27016;
#X msg 457 77 connect 192.168.88.114 27016; #X msg 457 77 connect 192.168.88.114 27016;
#X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000 #X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 273 33 sel 1 0; #X obj 273 33 sel 1 0;
#X obj 308 323 del 1500;
#X obj 501 323 del 1500;
#X obj 110 464 swap;
#X obj 110 443 unpack f f;
#X obj 110 506 route 1;
#X obj 110 485 pack f f;
#X text 420 445 <== DEACTIVATED synth(lower);
#X obj 20 560 print noteonB;
#X connect 0 0 3 0; #X connect 0 0 3 0;
#X connect 0 1 2 0; #X connect 0 1 2 0;
#X connect 1 0 0 1; #X connect 1 0 0 1;
#X connect 3 0 49 0; #X connect 3 0 47 0;
#X connect 4 0 5 0; #X connect 4 0 5 0;
#X connect 4 1 7 0; #X connect 4 1 7 0;
#X connect 5 0 6 0; #X connect 5 0 6 0;
@ -590,6 +550,7 @@
#X connect 8 0 17 1; #X connect 8 0 17 1;
#X connect 9 0 11 0; #X connect 9 0 11 0;
#X connect 10 0 4 0; #X connect 10 0 4 0;
#X connect 11 0 61 0;
#X connect 12 0 13 0; #X connect 12 0 13 0;
#X connect 13 0 17 0; #X connect 13 0 17 0;
#X connect 14 0 19 0; #X connect 14 0 19 0;
@ -609,51 +570,55 @@
#X connect 27 0 33 0; #X connect 27 0 33 0;
#X connect 32 0 20 0; #X connect 32 0 20 0;
#X connect 33 0 32 0; #X connect 33 0 32 0;
#X connect 33 1 42 0; #X connect 33 1 41 0;
#X connect 34 0 35 0; #X connect 34 0 35 0;
#X connect 35 0 37 0; #X connect 35 0 37 0;
#X connect 35 0 41 0; #X connect 35 0 40 0;
#X connect 36 0 38 0; #X connect 36 0 38 0;
#X connect 37 0 36 0; #X connect 37 0 36 0;
#X connect 37 1 36 1; #X connect 37 1 36 1;
#X connect 39 0 40 0; #X connect 39 0 42 0;
#X connect 39 0 46 0; #X connect 40 0 58 0;
#X connect 40 0 43 0; #X connect 41 0 34 0;
#X connect 41 0 39 0; #X connect 44 0 43 0;
#X connect 42 0 34 0; #X connect 45 0 59 0;
#X connect 45 0 46 0; #X connect 46 0 21 0;
#X connect 45 0 40 0; #X connect 47 0 46 0;
#X connect 46 0 44 0; #X connect 47 1 53 0;
#X connect 47 0 45 0; #X connect 48 0 49 0;
#X connect 48 0 21 0; #X connect 49 0 51 0;
#X connect 49 0 48 0; #X connect 49 0 45 0;
#X connect 49 1 55 0; #X connect 50 0 52 0;
#X connect 50 0 51 0; #X connect 51 0 50 0;
#X connect 51 0 53 0; #X connect 51 1 50 1;
#X connect 51 0 47 0; #X connect 53 0 48 0;
#X connect 52 0 54 0; #X connect 54 0 24 1;
#X connect 53 0 52 0; #X connect 55 0 0 1;
#X connect 53 1 52 1; #X connect 56 0 57 0;
#X connect 55 0 50 0; #X connect 57 0 54 0;
#X connect 56 0 24 1; #X connect 57 0 55 0;
#X connect 57 0 0 1; #X connect 57 1 25 0;
#X connect 58 0 59 0; #X connect 57 1 1 0;
#X connect 59 0 56 0; #X connect 58 0 39 0;
#X connect 59 0 57 0; #X connect 58 0 44 0;
#X connect 59 1 25 0; #X connect 59 0 44 0;
#X connect 59 1 1 0; #X connect 59 0 39 0;
#X connect 60 0 63 0;
#X connect 60 1 63 1;
#X connect 61 0 60 0;
#X connect 61 1 60 1;
#X connect 62 0 65 0;
#X connect 63 0 62 0;
#X restore 521 19 pd ringringrain_B ........ right wall; #X restore 521 19 pd ringringrain_B ........ right wall;
#X f 54; #X f 54;
#N canvas 531 237 553 436 timer 0; #N canvas 531 237 553 436 timer 0;
#X obj 66 161 time, f 24; #X obj 66 161 time, f 24;
#X obj 66 141 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #X obj 66 141 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
#000000;
#X floatatom 66 182 5 0 0 0 - - - 0; #X floatatom 66 182 5 0 0 0 - - - 0;
#X floatatom 113 182 5 0 0 0 - - - 0; #X floatatom 113 182 5 0 0 0 - - - 0;
#X floatatom 160 182 5 0 0 0 - - - 0; #X floatatom 160 182 5 0 0 0 - - - 0;
#X obj 66 120 metro 1000; #X obj 66 120 metro 1000;
#X obj 66 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #X obj 66 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 66 19 loadbang; #X obj 66 19 loadbang;
#X obj 66 42 del 5000; #X obj 66 42 del 5000;
#X msg 66 63 1; #X msg 66 63 1;
@ -663,8 +628,7 @@
#X floatatom 66 301 5 0 0 0 - - - 0; #X floatatom 66 301 5 0 0 0 - - - 0;
#X obj 66 321 change; #X obj 66 321 change;
#X floatatom 66 342 5 0 0 0 - - - 0; #X floatatom 66 342 5 0 0 0 - - - 0;
#X obj 66 362 tgl 15 0 ONOFF empty s:ONOFF 17 7 0 10 #fcfcfc #000000 #X obj 66 362 tgl 15 0 ONOFF empty s:ONOFF 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#000000 0 1;
#X obj 66 280 expr if($f1 > 900 \, if($f1 < 1830 \, 1 \, 0) \, 0); #X obj 66 280 expr if($f1 > 900 \, if($f1 < 1830 \, 1 \, 0) \, 0);
#X connect 0 0 2 0; #X connect 0 0 2 0;
#X connect 0 1 3 0; #X connect 0 1 3 0;
@ -676,7 +640,6 @@
#X connect 6 0 5 0; #X connect 6 0 5 0;
#X connect 7 0 8 0; #X connect 7 0 8 0;
#X connect 8 0 9 0; #X connect 8 0 9 0;
#X connect 9 0 6 0;
#X connect 10 0 11 0; #X connect 10 0 11 0;
#X connect 11 0 12 0; #X connect 11 0 12 0;
#X connect 12 0 17 0; #X connect 12 0 17 0;
@ -685,8 +648,7 @@
#X connect 15 0 16 0; #X connect 15 0 16 0;
#X connect 17 0 13 0; #X connect 17 0 13 0;
#X restore 420 33 pd timer; #X restore 420 33 pd timer;
#X obj 411 131 tgl 25 0 ONOFF empty s:ONOFF 17 7 0 10 #ffc7c6 #000000 #X obj 411 131 tgl 25 0 ONOFF empty s:ONOFF 17 7 0 10 #ffc7c6 #000000 #000000 0 1;
#000000 0 1;
#X msg 411 106 set \$1; #X msg 411 106 set \$1;
#X obj 411 85 r ONOFF; #X obj 411 85 r ONOFF;
#X connect 0 0 16 0; #X connect 0 0 16 0;