From ba1720f74d2a84e54916aa8329736b6abb1e4d1d Mon Sep 17 00:00:00 2001 From: Dooho Yi Date: Mon, 1 May 2023 21:45:12 +0900 Subject: [PATCH] add OTA & alivercounter --- arduino/rainboard-cli/.python-version | 1 - arduino/rainboard-cli/rainboard-cli.ino | 117 ---- arduino/rainboard-cli/sketch.yaml | 2 - arduino/rainboard/src/rainboard.ino | 36 ++ ringringrain_rev2.pd | 828 +++++++++++++----------- 5 files changed, 481 insertions(+), 503 deletions(-) delete mode 100644 arduino/rainboard-cli/.python-version delete mode 100644 arduino/rainboard-cli/rainboard-cli.ino delete mode 100644 arduino/rainboard-cli/sketch.yaml diff --git a/arduino/rainboard-cli/.python-version b/arduino/rainboard-cli/.python-version deleted file mode 100644 index 7ce6d68..0000000 --- a/arduino/rainboard-cli/.python-version +++ /dev/null @@ -1 +0,0 @@ -pio diff --git a/arduino/rainboard-cli/rainboard-cli.ino b/arduino/rainboard-cli/rainboard-cli.ino deleted file mode 100644 index 1f85e8b..0000000 --- a/arduino/rainboard-cli/rainboard-cli.ino +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include - -const char* ssid = "nolink2"; -const char* password = "2222277777"; -const int NETWORK_PORT = 27016; - -//// A UDP instance to let us send and receive packets over UDP -//WiFiUDP Udp; -//const IPAddress outIp(192,168,43,13); // remote IP (not needed for receive) -//const unsigned int outPort = 9999; // remote port (not needed for receive) -//const unsigned int localPort = 8888; // local port to listen for UDP packets (here's where we send the packets) - - -#include -#include "utility/WiFiClientStream.h" -#include "utility/WiFiServerStream.h" -WiFiServerStream serverStream(NETWORK_PORT); - -std::vector pins = {16, 15, 17, 18, 20, 19, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33}; //16 -//2 ==> flipping autonomously 1/0 without grounding! (maybe grounded by something else???) -//1, 3, 4, 5, 6, 7, 8, ==> flipping 1/0 ... while grounded manually. - -//i have a feeling ... this relates to 'touch sensing'... this precise flipping might be from cap. charge/discharge cycles? - -void setup() -{ - //pinmodes - for (int idx = 0; idx < pins.size(); idx++) { - pinMode(pins[idx], INPUT_PULLUP); - } - - //serial - Serial.begin(115200); - - //wifi - 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) { - delay(500); - Serial.print("."); - } - Serial.println(""); - - Serial.println("WiFi connected"); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); - Serial.println("Mac address: " + WiFi.macAddress()); - - //firmata - Firmata.disableBlinkVersion(); - Firmata.begin(serverStream); - -// Firmata.begin(115200); -// Firmata.setFirmwareNameAndVersion("ConfigurableFirmata", FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); -} - -void loop() -{ - for (int idx = 0; idx < pins.size(); idx++) { - Firmata.sendAnalog(idx, digitalRead(pins[idx])*1023); - } - - serverStream.maintain(); -} - - -// [NOTE] -// because firmata analog way has limits of max. channels <= 16. you can use digital way.. like below. -// but this not yet confirmed whether it is working or not. -// - -// #include - -// int pins_port0[8] = {17, 18, 2, 3, 4, 5, 6, 7}; -// int pins_port1[8] = {8, 9, 10, 11, 12, 24, 25, 26}; -// int pins_port2[8] = {27, 28, 29, 30, 31, 32, 33, 33}; - -// void setup() -// { -// for (int idx = 0; idx < 8; idx++) pinMode(pins_port0[idx], INPUT_PULLUP); -// for (int idx = 0; idx < 8; idx++) pinMode(pins_port1[idx], INPUT_PULLUP); -// for (int idx = 0; idx < 8; idx++) pinMode(pins_port2[idx], INPUT_PULLUP); - -// Firmata.setFirmwareNameAndVersion("ConfigurableFirmata", FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); -// Firmata.begin(115200); -// } - -// void loop() -// { -// byte port = 0; - -// static byte port0_prev = 0; -// port = 0x00; -// for (int idx = 0; idx < 8; idx++) port |= (digitalRead(pins_port0[idx]) ? 0x01< + ////pad structure // #define FLIPPED @@ -85,6 +87,26 @@ void setup() //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() @@ -153,10 +175,24 @@ void loop() n_keychg = 0; } + // send out alive counter + static int loopcounter = 0; + static int alivecounter = 0; + loopcounter++; + if (loopcounter % 100 == 0) { + Firmata.sendAnalog(1, alivecounter); + alivecounter++; + if (alivecounter == 1000) { + alivecounter = 0; + } + } } // // // discard all incoming MIDI msgs. // while (usbMIDI.read()) { } serverStream.maintain(); + + // + ArduinoOTA.handle(); } diff --git a/ringringrain_rev2.pd b/ringringrain_rev2.pd index d8a2369..73b470e 100644 --- a/ringringrain_rev2.pd +++ b/ringringrain_rev2.pd @@ -1,285 +1,32 @@ -#N canvas 160 23 1006 580 10; +#N canvas 0 33 1006 580 10; #X obj 924 484 loadbang; #X obj 21 181 pack f f; -#X obj 109 274 clone ringringrain_piano_node 10; -#X obj 109 245 pack f f f; -#X obj 109 222 - 1; -#X msg 109 154 stop; +#X obj 128 274 clone ringringrain_piano_node 10; +#X obj 128 245 pack f f f; +#X obj 128 222 - 1; +#X msg 128 154 stop; #X obj 202 413 tabwrite hands; #X obj 202 344 unpack f f; #X obj 202 390 f; #X obj 202 367 t b a; -#X obj 109 199 poly 10; +#X obj 128 199 poly 10; #X obj 19 465 table pitches; #X obj 19 494 loadbang; #X obj 21 97 tabread pitches; #X floatatom 21 120 5 0 0 0 - - - 0; #X msg 924 530 \; pd dsp 1; #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 -84 86 88 89 91 93 95 96 98 100 101 103 105 107 108; -#N canvas 100 173 852 552 ringringrain_A 0; -#X obj 388 42 arduino-wifi; -#X msg 478 42 disconnect; -#X obj 457 79 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X msg 457 17 connect 192.168.10.112 27016; -#X obj 388 105 route analog; -#X obj 388 128 route 0; -#X obj 388 151 * 1023; -#X obj 252 266 t a a; -#X obj 252 289 / 10; -#X obj 252 312 int; -#X obj 297 289 mod 10; -#X obj 297 312 int; -#X obj 180 330 pack f f; -#X floatatom 252 238 5 0 0 1 interlaced - - 0; -#X listbox 180 353 7 0 0 0 midi-like - - 0; -#X obj 252 361 moses 28; -#X floatatom 252 384 5 0 0 0 - - - 0; -#X floatatom 335 385 5 0 0 0 - - - 0; -#X obj 335 440 pack f f; -#X listbox 335 463 7 0 0 1 synth(lower) - - 0; -#X obj 252 440 pack f f; -#X listbox 252 463 7 0 0 0 synth(upper) - - 0; -#X obj 335 412 - 28; -#X obj 108 190 expr if($f1 < 140 \, $f1 \, $f1+140); -#X obj 388 190 expr if($f1 < 140 \, $f1+140 \, $f1+280); -#N canvas 273 125 970 258 simulation 0; -#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; -#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 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 -#000000 #000000; -#X obj 49 69 loadbang; -#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; -#X obj 866 19 key; -#X floatatom 866 42 5 0 0 0 - - - 0; -#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; -#X obj 529 69 loadbang; -#X obj 35 150 keyhands; -#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 -#000000; -#X obj 35 211 outlet; -#X obj 515 211 outlet; -#X obj 272 9 inlet; -#X connect 0 0 11 0; -#X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 2 0 4 0; -#X connect 3 0 15 0; -#X connect 5 0 6 0; -#X connect 6 0 11 0; -#X connect 7 0 8 0; -#X connect 9 0 2 0; -#X connect 10 0 9 0; -#X connect 11 0 12 0; -#X connect 11 0 13 0; -#X connect 12 0 14 0; -#X connect 16 0 0 0; -#X connect 16 0 1 0; -#X restore 650 174 pd simulation left right paper; -#X obj 650 154 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X obj 108 42 arduino-wifi; -#X msg 198 42 disconnect; -#X obj 177 79 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X obj 108 105 route analog; -#X obj 108 128 route 0; -#X obj 108 151 * 1023; -#X text 22 191 interlace ==>; -#X text 373 361 <== split: upper/lower; -#X obj 252 501 outlet; -#X obj 335 501 outlet; -#X msg 177 17 connect 192.168.10.111 27016; -#X connect 0 0 4 0; -#X connect 0 1 2 0; -#X connect 1 0 0 1; -#X connect 3 0 0 1; -#X connect 4 0 5 0; -#X connect 5 0 6 0; -#X connect 6 0 24 0; -#X connect 7 0 8 0; -#X connect 7 1 10 0; -#X connect 8 0 9 0; -#X connect 9 0 12 0; -#X connect 9 0 15 0; -#X connect 10 0 11 0; -#X connect 11 0 12 1; -#X connect 11 0 18 1; -#X connect 11 0 20 1; -#X connect 12 0 14 0; -#X connect 13 0 7 0; -#X connect 15 0 16 0; -#X connect 15 1 17 0; -#X connect 16 0 20 0; -#X connect 17 0 22 0; -#X connect 18 0 19 0; -#X connect 19 0 36 0; -#X connect 20 0 21 0; -#X connect 21 0 35 0; -#X connect 22 0 18 0; -#X connect 23 0 13 0; -#X connect 24 0 13 0; -#X connect 25 0 23 0; -#X connect 25 1 24 0; -#X connect 26 0 25 0; -#X connect 27 0 30 0; -#X connect 27 1 29 0; -#X connect 28 0 27 1; -#X connect 30 0 31 0; -#X connect 31 0 32 0; -#X connect 32 0 23 0; -#X connect 37 0 27 1; -#X restore 21 19 pd ringringrain_A; -#N canvas 149 231 863 545 ringringrain_B 0; -#X obj 388 42 arduino-wifi; -#X msg 478 42 disconnect; -#X obj 457 79 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X obj 388 105 route analog; -#X obj 388 128 route 0; -#X obj 388 151 * 1023; -#X obj 252 266 t a a; -#X obj 252 289 / 10; -#X obj 252 312 int; -#X obj 297 289 mod 10; -#X obj 297 312 int; -#X obj 180 330 pack f f; -#X floatatom 252 238 5 0 0 1 interlaced - - 0; -#X listbox 180 353 7 0 0 0 midi-like - - 0; -#X obj 252 361 moses 28; -#X floatatom 252 384 5 0 0 0 - - - 0; -#X floatatom 335 385 5 0 0 0 - - - 0; -#X obj 335 440 pack f f; -#X listbox 335 463 7 0 0 1 synth(lower) - - 0; -#X obj 252 440 pack f f; -#X listbox 252 463 7 0 0 0 synth(upper) - - 0; -#X obj 335 412 - 28; -#X obj 108 190 expr if($f1 < 140 \, $f1 \, $f1+140); -#X obj 388 190 expr if($f1 < 140 \, $f1+140 \, $f1+280); -#N canvas 273 125 970 258 simulation 0; -#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; -#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 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 -#000000 #000000; -#X obj 49 69 loadbang; -#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; -#X obj 866 19 key; -#X floatatom 866 42 5 0 0 0 - - - 0; -#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; -#X obj 529 69 loadbang; -#X obj 35 150 keyhands; -#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 -#000000; -#X obj 35 211 outlet; -#X obj 515 211 outlet; -#X obj 272 9 inlet; -#X connect 0 0 11 0; -#X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 2 0 4 0; -#X connect 3 0 15 0; -#X connect 5 0 6 0; -#X connect 6 0 11 0; -#X connect 7 0 8 0; -#X connect 9 0 2 0; -#X connect 10 0 9 0; -#X connect 11 0 12 0; -#X connect 11 0 13 0; -#X connect 12 0 14 0; -#X connect 16 0 0 0; -#X connect 16 0 1 0; -#X restore 650 174 pd simulation left right paper; -#X obj 650 154 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X obj 108 42 arduino-wifi; -#X msg 198 42 disconnect; -#X obj 177 79 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 -#000000 0 1; -#X obj 108 105 route analog; -#X obj 108 128 route 0; -#X obj 108 151 * 1023; -#X text 22 191 interlace ==>; -#X text 373 361 <== split: upper/lower; -#X obj 252 501 outlet; -#X obj 335 501 outlet; -#X msg 177 17 connect 192.168.10.113 27016; -#X msg 457 17 connect 192.168.10.114 27016; -#X connect 0 0 3 0; -#X connect 0 1 2 0; -#X connect 1 0 0 1; -#X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 5 0 23 0; -#X connect 6 0 7 0; -#X connect 6 1 9 0; -#X connect 7 0 8 0; -#X connect 8 0 11 0; -#X connect 8 0 14 0; -#X connect 9 0 10 0; -#X connect 10 0 11 1; -#X connect 10 0 17 1; -#X connect 10 0 19 1; -#X connect 11 0 13 0; -#X connect 12 0 6 0; -#X connect 14 0 15 0; -#X connect 14 1 16 0; -#X connect 15 0 19 0; -#X connect 16 0 21 0; -#X connect 17 0 18 0; -#X connect 18 0 35 0; -#X connect 19 0 20 0; -#X connect 20 0 34 0; -#X connect 21 0 17 0; -#X connect 22 0 12 0; -#X connect 23 0 12 0; -#X connect 24 0 22 0; -#X connect 24 1 23 0; -#X connect 25 0 24 0; -#X connect 26 0 29 0; -#X connect 26 1 28 0; -#X connect 27 0 26 1; -#X connect 29 0 30 0; -#X connect 30 0 31 0; -#X connect 31 0 22 0; -#X connect 36 0 26 1; -#X connect 37 0 0 1; -#X restore 521 19 pd ringringrain_B; -#X text 140 19 <= front wall; -#X text 642 19 <= right wall; +#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; #X obj 21 68 unpack f f; #X listbox 21 220 7 0 0 0 - - - 0; -#X obj 271 181 pack f f; -#X obj 359 245 pack f f f; -#X obj 359 222 - 1; -#X msg 359 154 stop; -#X obj 271 97 tabread pitches; -#X floatatom 271 120 5 0 0 0 - - - 0; -#X obj 271 68 unpack f f; -#N canvas 586 33 434 533 rain 0; +#X obj 235 181 pack f f; +#X obj 342 245 pack f f f; +#X obj 342 222 - 1; +#X msg 342 154 stop; +#X obj 235 97 tabread pitches; +#X floatatom 235 120 5 0 0 0 - - - 0; +#X obj 235 68 unpack f f; +#N canvas 575 33 434 533 rain 0; #X obj 27 80 loadbang; #N canvas 0 22 450 300 (subpatch) 0; #X array raining 2.57403e+06 float 0; @@ -292,13 +39,10 @@ #X obj 169 392 *~; #X obj 169 431 hip~ 5; #X msg 42 284 bang; -#X obj 120 331 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 120 331 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 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 -#000000; +#X obj 42 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000; #X obj 184 290 * 6; #X text 32 21 sound generators - sample sound; #X floatatom 184 220 5 0 0 1 hands - - 0; @@ -328,8 +72,7 @@ #X restore 89 215 pd pan; #X obj 153 107 snapshot~; #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 -#000000; +#X obj 36 42 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000; #X obj 160 50 +~ 1; #X obj 160 77 *~ 0.5; #X obj 160 22 osc~ 0.1; @@ -356,14 +99,12 @@ #X obj 182 267 +; #X obj 152 267 f; #X obj 152 238 t b a; -#X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc -#000000 #000000; +#X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000; #X msg 199 113 0; #X obj 152 72 t b a b; #X obj 152 215 tabread hands; #X obj 18 65 metro 100; -#X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 -0 1; +#X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; #X obj 117 285 f; #X obj 18 22 loadbang; #X floatatom 117 308 5 0 0 0 - - - 0; @@ -426,34 +167,34 @@ #X connect 25 0 6 1; #X connect 26 0 25 0; #X restore 826 487 pd rain wave; -#X listbox 271 204 7 0 0 0 - - - 0; +#X listbox 235 204 7 0 0 0 - - - 0; #X obj 374 413 tabwrite hands; #X obj 374 344 unpack f f; #X obj 374 390 f; #X obj 374 367 t b a; #X obj 455 390 + 10; -#X obj 359 274 clone raindroplet 20; -#X obj 359 199 poly 20; +#X obj 342 274 clone raindroplet 20; +#X obj 342 199 poly 20; #X obj 521 181 pack f f; -#X obj 609 274 clone ringringrain_piano_node 10; -#X obj 609 245 pack f f f; -#X obj 609 222 - 1; -#X msg 609 154 stop; -#X obj 609 199 poly 10; +#X obj 628 274 clone ringringrain_piano_node 10; +#X obj 628 245 pack f f f; +#X obj 628 222 - 1; +#X msg 628 154 stop; +#X obj 628 199 poly 10; #X obj 521 97 tabread pitches; #X floatatom 521 120 5 0 0 0 - - - 0; #X obj 521 68 unpack f f; #X listbox 521 220 7 0 0 0 - - - 0; -#X obj 771 181 pack f f; -#X obj 859 245 pack f f f; -#X obj 859 222 - 1; -#X msg 859 154 stop; -#X obj 771 97 tabread pitches; -#X floatatom 771 120 5 0 0 0 - - - 0; -#X obj 771 68 unpack f f; -#X listbox 771 204 7 0 0 0 - - - 0; -#X obj 859 274 clone raindroplet 20; -#X obj 859 199 poly 20; +#X obj 735 181 pack f f; +#X obj 842 245 pack f f f; +#X obj 842 222 - 1; +#X msg 842 154 stop; +#X obj 735 97 tabread pitches; +#X floatatom 735 120 5 0 0 0 - - - 0; +#X obj 735 68 unpack f f; +#X listbox 735 204 7 0 0 0 - - - 0; +#X obj 842 274 clone raindroplet 20; +#X obj 842 199 poly 20; #X obj 702 413 tabwrite hands; #X obj 702 344 unpack f f; #X obj 702 390 f; @@ -466,19 +207,16 @@ #X obj 955 390 + 40; #N canvas 40 465 713 292 main 0; #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 75 catch~ front; #X obj 306 129 dac~ 4 7 8; #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 516 129 dac~ 2 5 6; #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 16 129 dac~ 1 2 3 4 5 6 7 8; #X obj 157 75 catch~ rain; @@ -510,21 +248,341 @@ #X connect 15 0 8 2; #X restore 814 525 pd main output; #X obj 21 142 - 12; -#X obj 271 142 - 12; +#X obj 235 142 - 12; #X obj 521 142 - 12; -#X obj 771 142 - 12; -#X obj 109 303 throw~ front; -#X obj 359 303 throw~ front; -#X obj 609 303 throw~ right; -#X obj 859 303 throw~ right; +#X obj 735 142 - 12; +#X obj 128 303 throw~ front; +#X obj 342 303 throw~ front; +#X obj 628 303 throw~ right; +#X obj 842 303 throw~ right; #X msg 526 508 2.4; #X msg 473 508 4.8; #X msg 632 508 2.4; #X msg 579 508 1.8; +#N canvas 586 33 852 598 ringringrain_A 0; +#X obj 388 102 arduino-wifi; +#X msg 478 102 disconnect; +#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 388 165 route analog; +#X obj 182 326 t a a; +#X obj 182 349 / 10; +#X obj 182 372 int; +#X obj 227 349 mod 10; +#X obj 227 372 int; +#X obj 110 390 pack f f; +#X floatatom 182 298 5 0 0 1 interlaced - - 0; +#X listbox 110 413 7 0 0 0 midi-like - - 0; +#X obj 182 421 moses 28; +#X floatatom 182 444 5 0 0 0 - - - 0; +#X floatatom 385 445 5 0 0 0 - - - 0; +#X obj 385 500 pack f f; +#X listbox 385 523 7 0 0 1 synth(lower) - - 0; +#X obj 182 500 pack f f; +#X listbox 182 523 7 0 0 0 synth(upper) - - 0; +#X obj 385 472 - 28; +#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140); +#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280); +#N canvas 273 125 970 258 simulation 0; +#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; +#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 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 #000000 #000000; +#X obj 49 69 loadbang; +#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; +#X obj 866 19 key; +#X floatatom 866 42 5 0 0 0 - - - 0; +#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; +#X obj 529 69 loadbang; +#X obj 35 150 keyhands; +#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 #000000; +#X obj 35 211 outlet; +#X obj 515 211 outlet; +#X obj 272 9 inlet; +#X connect 0 0 11 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 15 0; +#X connect 5 0 6 0; +#X connect 6 0 11 0; +#X connect 7 0 8 0; +#X connect 9 0 2 0; +#X connect 10 0 9 0; +#X connect 11 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 16 0 0 0; +#X connect 16 0 1 0; +#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 #000000 0 1; +#X obj 108 102 arduino-wifi; +#X msg 198 102 disconnect; +#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 108 165 route analog; +#X obj 108 211 * 1023; +#X text 22 251 interlace ==>; +#X text 253 421 <== split: upper/lower; +#X obj 182 561 outlet; +#X obj 385 561 outlet; +#X obj 108 188 route 0 1, f 17; +#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 #000000 #000000; +#X obj 303 188 timer; +#X obj 303 165 t b b; +#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 msg 308 300 stop \, bang; +#X obj 157 211 * 1023; +#X obj 308 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 msg 501 300 stop \, bang; +#X obj 388 211 * 1023; +#X obj 388 188 route 0 1, f 17; +#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 #000000 #000000; +#X obj 583 188 timer; +#X obj 583 165 t b b; +#X floatatom 583 211 5 0 0 0 - - - 0; +#X obj 437 211 * 1023; +#X msg 177 77 connect 192.168.88.111 27016; +#X msg 457 77 connect 192.168.88.112 27016; +#X obj 331 19 loadbang; +#X obj 331 42 del 5000; +#X connect 0 0 3 0; +#X connect 0 1 2 0; +#X connect 1 0 0 1; +#X connect 3 0 49 0; +#X connect 4 0 5 0; +#X connect 4 1 7 0; +#X connect 5 0 6 0; +#X connect 6 0 9 0; +#X connect 6 0 12 0; +#X connect 7 0 8 0; +#X connect 8 0 9 1; +#X connect 8 0 15 1; +#X connect 8 0 17 1; +#X connect 9 0 11 0; +#X connect 10 0 4 0; +#X connect 12 0 13 0; +#X connect 12 1 14 0; +#X connect 13 0 17 0; +#X connect 14 0 19 0; +#X connect 15 0 16 0; +#X connect 16 0 32 0; +#X connect 17 0 18 0; +#X connect 18 0 31 0; +#X connect 19 0 15 0; +#X connect 20 0 10 0; +#X connect 21 0 10 0; +#X connect 22 0 20 0; +#X connect 22 1 21 0; +#X connect 23 0 22 0; +#X connect 24 0 27 0; +#X connect 24 1 26 0; +#X connect 25 0 24 1; +#X connect 27 0 33 0; +#X connect 28 0 20 0; +#X connect 33 0 28 0; +#X connect 33 1 42 0; +#X connect 34 0 35 0; +#X connect 35 0 37 0; +#X connect 35 0 41 0; +#X connect 36 0 38 0; +#X connect 37 0 36 0; +#X connect 37 1 36 1; +#X connect 39 0 40 0; +#X connect 40 0 43 0; +#X connect 41 0 39 0; +#X connect 42 0 34 0; +#X connect 45 0 46 0; +#X connect 46 0 44 0; +#X connect 47 0 45 0; +#X connect 48 0 21 0; +#X connect 49 0 48 0; +#X connect 49 1 55 0; +#X connect 50 0 51 0; +#X connect 51 0 53 0; +#X connect 51 0 47 0; +#X connect 52 0 54 0; +#X connect 53 0 52 0; +#X connect 53 1 52 1; +#X connect 55 0 50 0; +#X connect 56 0 24 1; +#X connect 57 0 0 1; +#X connect 58 0 59 0; +#X connect 59 0 56 0; +#X connect 59 0 57 0; +#X restore 21 19 pd ringringrain_A ........ front wall; +#X f 54; +#N canvas 575 33 863 598 ringringrain_B 0; +#X obj 388 102 arduino-wifi; +#X msg 478 102 disconnect; +#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 388 165 route analog; +#X obj 182 326 t a a; +#X obj 182 349 / 10; +#X obj 182 372 int; +#X obj 227 349 mod 10; +#X obj 227 372 int; +#X obj 110 390 pack f f; +#X floatatom 182 298 5 0 0 1 interlaced - - 0; +#X listbox 110 413 7 0 0 0 midi-like - - 0; +#X obj 182 421 moses 28; +#X floatatom 182 444 5 0 0 0 - - - 0; +#X floatatom 385 445 5 0 0 0 - - - 0; +#X obj 385 500 pack f f; +#X listbox 385 523 7 0 0 1 synth(lower) - - 0; +#X obj 182 500 pack f f; +#X listbox 182 523 7 0 0 0 synth(upper) - - 0; +#X obj 385 472 - 28; +#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140); +#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280); +#N canvas 273 125 970 258 simulation 0; +#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; +#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 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 #000000 #000000; +#X obj 49 69 loadbang; +#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; +#X obj 866 19 key; +#X floatatom 866 42 5 0 0 0 - - - 0; +#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; +#X obj 529 69 loadbang; +#X obj 35 150 keyhands; +#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 #000000; +#X obj 35 211 outlet; +#X obj 515 211 outlet; +#X obj 272 9 inlet; +#X connect 0 0 11 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 2 0 4 0; +#X connect 3 0 15 0; +#X connect 5 0 6 0; +#X connect 6 0 11 0; +#X connect 7 0 8 0; +#X connect 9 0 2 0; +#X connect 10 0 9 0; +#X connect 11 0 12 0; +#X connect 11 0 13 0; +#X connect 12 0 14 0; +#X connect 16 0 0 0; +#X connect 16 0 1 0; +#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 #000000 0 1; +#X obj 108 102 arduino-wifi; +#X msg 198 102 disconnect; +#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1; +#X obj 108 165 route analog; +#X text 22 251 interlace ==>; +#X text 253 421 <== split: upper/lower; +#X obj 182 561 outlet; +#X obj 385 561 outlet; +#X obj 108 211 * 1023; +#X obj 108 188 route 0 1, f 17; +#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 #000000 #000000; +#X obj 303 188 timer; +#X obj 303 165 t b b; +#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 msg 308 300 stop \, bang; +#X obj 157 211 * 1023; +#X obj 308 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 msg 501 300 stop \, bang; +#X obj 388 211 * 1023; +#X obj 388 188 route 0 1, f 17; +#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 #000000 #000000; +#X obj 583 188 timer; +#X obj 583 165 t b b; +#X floatatom 583 211 5 0 0 0 - - - 0; +#X obj 437 211 * 1023; +#X obj 331 19 loadbang; +#X obj 331 42 del 5000; +#X msg 177 77 connect 192.168.88.113 27016; +#X msg 457 77 connect 192.168.88.114 27016; +#X connect 0 0 3 0; +#X connect 0 1 2 0; +#X connect 1 0 0 1; +#X connect 3 0 49 0; +#X connect 4 0 5 0; +#X connect 4 1 7 0; +#X connect 5 0 6 0; +#X connect 6 0 9 0; +#X connect 6 0 12 0; +#X connect 7 0 8 0; +#X connect 8 0 9 1; +#X connect 8 0 15 1; +#X connect 8 0 17 1; +#X connect 9 0 11 0; +#X connect 10 0 4 0; +#X connect 12 0 13 0; +#X connect 12 1 14 0; +#X connect 13 0 17 0; +#X connect 14 0 19 0; +#X connect 15 0 16 0; +#X connect 16 0 31 0; +#X connect 17 0 18 0; +#X connect 18 0 30 0; +#X connect 19 0 15 0; +#X connect 20 0 10 0; +#X connect 21 0 10 0; +#X connect 22 0 20 0; +#X connect 22 1 21 0; +#X connect 23 0 22 0; +#X connect 24 0 27 0; +#X connect 24 1 26 0; +#X connect 25 0 24 1; +#X connect 27 0 33 0; +#X connect 32 0 20 0; +#X connect 33 0 32 0; +#X connect 33 1 42 0; +#X connect 34 0 35 0; +#X connect 35 0 37 0; +#X connect 35 0 41 0; +#X connect 36 0 38 0; +#X connect 37 0 36 0; +#X connect 37 1 36 1; +#X connect 39 0 40 0; +#X connect 40 0 43 0; +#X connect 41 0 39 0; +#X connect 42 0 34 0; +#X connect 45 0 46 0; +#X connect 46 0 44 0; +#X connect 47 0 45 0; +#X connect 48 0 21 0; +#X connect 49 0 48 0; +#X connect 49 1 55 0; +#X connect 50 0 51 0; +#X connect 51 0 53 0; +#X connect 51 0 47 0; +#X connect 52 0 54 0; +#X connect 53 0 52 0; +#X connect 53 1 52 1; +#X connect 55 0 50 0; +#X connect 56 0 57 0; +#X connect 57 0 58 0; +#X connect 57 0 59 0; +#X connect 58 0 24 1; +#X connect 59 0 0 1; +#X restore 521 19 pd ringringrain_B ........ right wall; +#X f 54; #X connect 0 0 16 0; #X connect 1 0 10 0; -#X connect 1 0 23 0; -#X connect 2 0 75 0; +#X connect 1 0 19 0; +#X connect 2 0 71 0; #X connect 2 1 7 0; #X connect 3 0 2 0; #X connect 4 0 3 0; @@ -539,76 +597,80 @@ #X connect 10 2 3 2; #X connect 12 0 17 0; #X connect 13 0 14 0; -#X connect 14 0 71 0; +#X connect 14 0 67 0; #X connect 16 0 15 0; -#X connect 18 0 22 0; -#X connect 18 1 30 0; -#X connect 19 0 48 0; -#X connect 19 1 56 0; -#X connect 22 0 13 0; -#X connect 22 1 1 1; -#X connect 24 0 32 0; -#X connect 24 0 39 0; -#X connect 25 0 38 0; -#X connect 26 0 25 0; -#X connect 27 0 39 0; -#X connect 28 0 29 0; -#X connect 29 0 72 0; -#X connect 30 0 28 0; -#X connect 30 1 24 1; -#X connect 34 0 36 0; -#X connect 34 1 35 1; -#X connect 35 0 33 0; -#X connect 36 0 35 0; -#X connect 36 1 37 0; -#X connect 37 0 33 1; -#X connect 38 0 76 0; -#X connect 38 1 34 0; -#X connect 39 0 26 0; -#X connect 39 1 25 1; -#X connect 39 2 25 2; -#X connect 40 0 45 0; -#X connect 40 0 49 0; -#X connect 41 0 77 0; -#X connect 41 1 61 0; -#X connect 42 0 41 0; -#X connect 43 0 42 0; -#X connect 44 0 45 0; -#X connect 45 0 43 0; -#X connect 45 1 42 1; -#X connect 45 2 42 2; -#X connect 46 0 47 0; -#X connect 47 0 73 0; -#X connect 48 0 46 0; -#X connect 48 1 40 1; -#X connect 50 0 57 0; -#X connect 50 0 59 0; -#X connect 51 0 58 0; -#X connect 52 0 51 0; -#X connect 53 0 59 0; -#X connect 54 0 55 0; -#X connect 55 0 74 0; -#X connect 56 0 54 0; -#X connect 56 1 50 1; -#X connect 58 0 78 0; -#X connect 58 1 66 0; -#X connect 59 0 52 0; -#X connect 59 1 51 1; -#X connect 59 2 51 2; -#X connect 61 0 63 0; -#X connect 61 1 62 1; -#X connect 62 0 60 0; -#X connect 63 0 62 0; -#X connect 63 1 64 0; -#X connect 64 0 60 1; -#X connect 66 0 68 0; -#X connect 66 1 67 1; -#X connect 67 0 65 0; -#X connect 68 0 67 0; -#X connect 68 1 69 0; -#X connect 69 0 65 1; -#X connect 71 0 1 0; -#X connect 72 0 24 0; -#X connect 73 0 40 0; -#X connect 74 0 50 0; +#X connect 18 0 13 0; +#X connect 18 1 1 1; +#X connect 20 0 28 0; +#X connect 20 0 35 0; +#X connect 21 0 34 0; +#X connect 22 0 21 0; +#X connect 23 0 35 0; +#X connect 24 0 25 0; +#X connect 25 0 68 0; +#X connect 26 0 24 0; +#X connect 26 1 20 1; +#X connect 30 0 32 0; +#X connect 30 1 31 1; +#X connect 31 0 29 0; +#X connect 32 0 31 0; +#X connect 32 1 33 0; +#X connect 33 0 29 1; +#X connect 34 0 72 0; +#X connect 34 1 30 0; +#X connect 35 0 22 0; +#X connect 35 1 21 1; +#X connect 35 2 21 2; +#X connect 36 0 41 0; +#X connect 36 0 45 0; +#X connect 37 0 73 0; +#X connect 37 1 57 0; +#X connect 38 0 37 0; +#X connect 39 0 38 0; +#X connect 40 0 41 0; +#X connect 41 0 39 0; +#X connect 41 1 38 1; +#X connect 41 2 38 2; +#X connect 42 0 43 0; +#X connect 43 0 69 0; +#X connect 44 0 42 0; +#X connect 44 1 36 1; +#X connect 46 0 53 0; +#X connect 46 0 55 0; +#X connect 47 0 54 0; +#X connect 48 0 47 0; +#X connect 49 0 55 0; +#X connect 50 0 51 0; +#X connect 51 0 70 0; +#X connect 52 0 50 0; +#X connect 52 1 46 1; +#X connect 54 0 74 0; +#X connect 54 1 62 0; +#X connect 55 0 48 0; +#X connect 55 1 47 1; +#X connect 55 2 47 2; +#X connect 57 0 59 0; +#X connect 57 1 58 1; +#X connect 58 0 56 0; +#X connect 59 0 58 0; +#X connect 59 1 60 0; +#X connect 60 0 56 1; +#X connect 62 0 64 0; +#X connect 62 1 63 1; +#X connect 63 0 61 0; +#X connect 64 0 63 0; +#X connect 64 1 65 0; +#X connect 65 0 61 1; +#X connect 67 0 1 0; +#X connect 68 0 20 0; +#X connect 69 0 36 0; +#X connect 70 0 46 0; +#X connect 79 0 18 0; +#X connect 79 1 5 0; +#X connect 79 2 26 0; +#X connect 79 3 23 0; +#X connect 80 0 44 0; +#X connect 80 1 40 0; +#X connect 80 2 52 0; +#X connect 80 3 49 0; #X coords 0 0 1 1 85 60 0;