Selaa lähdekoodia

livraison panorama

titi 5 vuotta sitten
vanhempi
commit
1d8a17a131

+ 27 - 22
HTequi-firmware/src/blobcnc_low/main.cpp

@@ -20,11 +20,13 @@ byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
 };
 
-IPAddress ip(192, 168, 1, 204);    //local IP of Arduino/Teensy
-//unsigned int localPort = 8888;      // local port to listen on (not needed for multicast)
+IPAddress ip(192, 168, 1, 104);    //local IP of Arduino/Teensy
+unsigned int localPort = 8000;      // local port to listen on (not needed for multicast)
 
-IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
-unsigned int portMulti = 9977;   // ipMidi Mutlicast port 1
+IPAddress outIp(192, 168, 1, 102);
+const unsigned int outPort = 9000;
+// IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
+// unsigned int portMulti = 9977;   // ipMidi Mutlicast port 1
 
 
 // buffers for receiving and sending data
@@ -35,6 +37,8 @@ byte sendBuffer2[] = {0x80, 0x14, 0x00};        // MIDI Note Off to Multicast ad
 // An EthernetUDP instance to let us send and receive packets over UDP
 EthernetUDP Udp;
 
+///////////////////       OSC         ////////////////////////
+OSCBundle bndl;
 
 /////////////////// STEPPER machines  ////////////////////////
 const int HIGH_SPEED = 800 ;
@@ -65,15 +69,15 @@ StepControl LevBr_low_controller ;
 
 /////////////////// Servo and pump  ////////////////////////
 
-const int peristaltic_pwm_pin = 3;
-const int peristaltic_dir_pin = 2;
-bool peristaltic_direction = 0 ;
+const int filling_pwm_pin = 14;
+const int brush_pwm_pin = 20;
+const int crusher_pin = 16;
 
-Servo pill_trap ;
 
 void motorsOSC(OSCMessage &msg){
-  msg.dispatch("/pill_trap", [](OSCMessage &msg){pill_trap.write(msg.getFloat(0));});
-  msg.dispatch("/peristaltic", [](OSCMessage &msg){analogWrite(peristaltic_pwm_pin, msg.getInt(0));});
+  msg.dispatch("/filling", [](OSCMessage &msg){analogWrite(filling_pwm_pin, msg.getFloat(0));});
+  msg.dispatch("/brush", [](OSCMessage &msg){analogWrite(brush_pwm_pin, msg.getInt(0));});
+  msg.dispatch("/crusher", [](OSCMessage &msg){digitalWrite(crusher_pin, msg.getInt(0));});
 }
 
 //////////////  Setup  /////////////////////
@@ -83,7 +87,8 @@ void setup() {
  Ethernet.init(10);//(10)
  teensyMAC(mac);
  Ethernet.begin(mac, ip);              // start the Ethernet and UDP:
- Udp.beginMulticast(ipMulti, portMulti); // for modified Teensy Ethernet library
+ // Udp.beginMulticast(ipMulti, portMulti); // for modified Teensy Ethernet library
+  Udp.begin(localPort);
 
  //  SERIAL
  Serial.begin(115200); // higher Baud rate for faster refresh, CHANGE IN SERIAL MONITOR
@@ -120,7 +125,7 @@ void setup() {
  TrBr_low_step.trace( Serial );
  TrBr_low_step.begin(TrBr_low_stepper, TrBr_low_controller)
            .setEnablePin(0)//.enableReversed(1);//.enable(1);
-           .setLimitType(2).setLimitPins(17, 15).limitReversed(false).limitThresholds(600, 750, 950, 1200);
+           .setLimitType(2).setLimitPins(17, 15).limitReversed(true).limitThresholds(600, 750, 950, 1200);
  TrBr_low_stepper.setMaxSpeed(HIGH_SPEED);
  TrBr_low_stepper.setAcceleration(HIGH_ACC);
  TrBr_low_stepper.setInverseRotation(true);
@@ -133,7 +138,7 @@ void setup() {
  LevBr_low_step.trace( Serial );
  LevBr_low_step.begin(LevBr_low_stepper, LevBr_low_controller)
            .setEnablePin(3)//.enableReversed(1);//.enable(1);
-           .setLimitType(2).setLimitPins(39, 37).limitReversed(false).limitThresholds(600, 750, 950, 1200);
+           .setLimitType(2).setLimitPins(39, 37).limitReversed(true).limitThresholds(600, 750, 950, 1200);
  LevBr_low_stepper.setMaxSpeed(HIGH_SPEED);
  LevBr_low_stepper.setAcceleration(HIGH_ACC);
  LevBr_low_stepper.setInverseRotation(true);
@@ -144,16 +149,16 @@ void setup() {
  LevBr_low_step.onLimithigh([](int idx, int v, int up){bndl.add("/LevBr_low_OSC/limitHigh").add(v);});
 
  //  Peristaltic pump
- pinMode(peristaltic_dir_pin, OUTPUT);
- digitalWrite(peristaltic_dir_pin, peristaltic_direction);
- pinMode(peristaltic_pwm_pin, OUTPUT);
- analogWrite(peristaltic_pwm_pin, 50);
+ pinMode(filling_pwm_pin, OUTPUT);
+ pinMode(brush_pwm_pin, OUTPUT);
+ pinMode(crusher_pin, OUTPUT);
 
 }
 
 void loop() {
   automaton.run();
-  Udp.beginPacket(ipMulti, portMulti);
+  // Udp.beginPacket(ipMulti, portMulti);
+  Udp.beginPacket(outIp, outPort);
   bndl.send(Udp); // send the bytes to the SLIP stream
   Udp.endPacket(); // mark the end of the OSC Packet
   bndl.empty(); // empty the bundle to free room for a new one
@@ -167,12 +172,12 @@ void loop() {
 
      if(!msgIn.hasError()){
        Serial.println("got OSC");
-       // msgIn.route("/blink", test);
        A_low_OSC.onOSC(msgIn);
        B_low_OSC.onOSC(msgIn);
-       feederOSC(msgIn);
+       TrBr_low_OSC.onOSC(msgIn);
+       LevBr_low_OSC.onOSC(msgIn);
        motorsOSC(msgIn);
-       // B_low_step.onOSC(msgIn);
-       // peristaltic.onOSC(msgIn);
+
      }
   }
+}

+ 15 - 18
HTequi-firmware/src/blobcnc_top/main.cpp

@@ -21,10 +21,15 @@
 // Enter a MAC address and IP address for your controller below.
 // The IP address will be dependent on your local network:
 byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
-// IPAddress ip(192, 168, 1, 204);    //local IP of Arduino/Teensy
+IPAddress ip(192, 168, 1, 105);    //local IP of Arduino/Teensy
+unsigned int localPort = 8000;
+
+IPAddress outIp(192, 168, 1, 102);
+const unsigned int outPort = 9000;
+
 // unsigned int localPort = 8888;      // local port to listen on (not needed for multicast)
-IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
-unsigned int portMulti = 9977;   // ipMidi Mutlicast port 1
+// IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
+// unsigned int portMulti = 9977;   // ipMidi Mutlicast port 1
 // buffers for receiving and sending data
 byte packetBuffer[UDP_TX_PACKET_MAX_SIZE];       // buffer to hold incoming packet
 byte sendBuffer1[] = {0x90, 0x14, 0x22};        // MIDI Note On to Multicast address
@@ -147,8 +152,10 @@ void setup() {
   //SPI.setSCK(27); //only bottom
   Ethernet.init(15);//(10)
   teensyMAC(mac);
-  Ethernet.begin(mac);              // start the Ethernet and UDP:
-  Udp.beginMulticast(ipMulti, portMulti); // for modified Teensy Ethernet library
+  Ethernet.begin(mac, ip);              // start the Ethernet and UDP:
+  // Udp.beginMulticast(ipMulti, portMulti); // for modified Teensy Ethernet library
+  Udp.begin(localPort);
+
 
   //  SERIAL
   Serial.begin(115200); // higher Baud rate for faster refresh, CHANGE IN SERIAL MONITOR
@@ -210,23 +217,12 @@ void setup() {
     .onCommand( feeder2_callback );
 
   //  Servo controlling pill trap
-  //pill_trap.attach(14);
+  pill_trap.attach(14);
 
   //  Peristaltic pump
   pinMode(peristaltic_dir_pin, OUTPUT);
   digitalWrite(peristaltic_dir_pin, peristaltic_direction);
   pinMode(peristaltic_pwm_pin, OUTPUT);
-  analogWrite(peristaltic_pwm_pin, 50);
- //  for(int pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
- // {                                  // in steps of 1 degree
- //   pill_trap.write(pos);              // tell servo to go to position in variable 'pos'
- //   delay(5);                       // waits 15ms for the servo to reach the position
- // }
- // for(int pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees
- // {
- //   pill_trap.write(pos);              // tell servo to go to position in variable 'pos'
- //   delay(5);                       // waits 15ms for the servo to reach the position
- // }
 
 }
 
@@ -234,7 +230,8 @@ void setup() {
 
 void loop() {
   automaton.run();
-  Udp.beginPacket(ipMulti, portMulti);
+  // Udp.beginPacket(ipMulti, portMulti);
+  Udp.beginPacket(outIp, outPort);
   bndl.send(Udp); // send the bytes to the SLIP stream
   Udp.endPacket(); // mark the end of the OSC Packet
   bndl.empty(); // empty the bundle to free room for a new one

+ 106 - 0
blob-CN/extra/stepper.pd

@@ -0,0 +1,106 @@
+#N canvas 957 374 811 556 10;
+#X obj 323 52 route /step /state /limitLow /limiHigh;
+#X obj 323 -1 r OSCin;
+#X floatatom 364 218 15 0 0 0 position - -;
+#X obj 50 357 s toOSCTop;
+#X obj 116 219 loadbang;
+#X obj 116 242 symbol \$1;
+#X obj 28 218 unpack s f;
+#X msg 28 52 move 10000;
+#X obj 162 373 print;
+#X obj 60 292 list trim;
+#X obj 174 221 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 322 22 mrpeach/routeOSC \$1_OSC;
+#X obj 326 358 bng 15 250 50 0 empty empty home_low 17 7 0 10 -262144
+-1 -1;
+#X msg 307 408 home 0;
+#X obj 326 378 bng 15 250 50 0 empty empty home_high 17 7 0 10 -262144
+-1 -1;
+#X msg 317 438 home 1;
+#X obj 30 188 r \$1_toOSC;
+#X obj 288 481 s \$1_toOSC;
+#X text 99 531 /SpeedAcc /enable /move /moveTo /stop /emergencyStop
+/home;
+#X obj 501 120 vsl 15 128 0 3000 0 0 empty empty Speed -8 -9 0 10 -262144
+-1 -1 12700 1;
+#X obj 549 120 vsl 15 128 0 2000 0 0 empty empty Acc -2 -9 0 10 -262144
+-1 -1 8000 1;
+#X msg 614 293 SpeedAcc \$1 \$2;
+#X obj 614 316 s \$1_toOSC;
+#X floatatom 501 258 5 0 0 0 - - -;
+#X floatatom 547 259 5 0 0 0 - - -;
+#X obj 346 150 hradio 15 1 0 8 empty empty State 0 -8 0 10 -262144
+-1 -1 1;
+#X obj 308 183 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 348 183 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 326 325 hsl 128 15 0 50000 0 0 empty empty moveTo -2 -8 0 10
+-262144 -1 -1 9700 1;
+#X floatatom 462 324 7 0 0 0 - - -;
+#X obj 514 326 bng 15 250 50 0 empty empty do_it 17 7 0 10 -262144
+-1 -1;
+#X obj 462 494 s \$1_toOSC;
+#X obj 326 293 hsl 128 15 -50000 50000 0 0 empty empty move -2 -8 0
+10 -262144 -1 -1 2900 1;
+#X floatatom 462 292 7 0 0 0 - - -;
+#X obj 514 294 bng 15 250 50 0 empty empty do_it 17 7 0 10 -262144
+-1 -1;
+#X obj 502 452 s \$1_toOSC;
+#X obj 308 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 211 178 s \$1_toOSC;
+#X msg 210 155 enable \$1;
+#X obj 60 269 pack s f f s;
+#X msg 60 319 \$4/\$1 \$2 \$3;
+#X msg 462 471 moveTo \$1;
+#X msg 502 429 move \$1;
+#X obj 553 348 bng 40 250 50 0 empty empty STOP 10 18 0 10 -258113
+-1 -1;
+#X obj 572 432 s \$1_toOSC;
+#X msg 571 409 emergencyStop \$1;
+#X obj 502 404 i;
+#X obj 463 446 i;
+#X obj 614 270 pack f f;
+#X connect 0 0 2 0;
+#X connect 0 1 25 0;
+#X connect 0 2 26 0;
+#X connect 0 3 27 0;
+#X connect 1 0 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 39 3;
+#X connect 6 0 39 0;
+#X connect 6 1 39 1;
+#X connect 7 0 6 0;
+#X connect 10 0 5 0;
+#X connect 11 0 0 0;
+#X connect 12 0 13 0;
+#X connect 13 0 17 0;
+#X connect 14 0 15 0;
+#X connect 15 0 17 0;
+#X connect 16 0 6 0;
+#X connect 19 0 23 0;
+#X connect 20 0 24 0;
+#X connect 21 0 22 0;
+#X connect 23 0 48 0;
+#X connect 24 0 48 1;
+#X connect 28 0 29 0;
+#X connect 29 0 47 1;
+#X connect 30 0 47 0;
+#X connect 32 0 33 0;
+#X connect 33 0 46 1;
+#X connect 34 0 46 0;
+#X connect 36 0 38 0;
+#X connect 38 0 37 0;
+#X connect 39 0 40 0;
+#X connect 40 0 3 0;
+#X connect 40 0 8 0;
+#X connect 41 0 31 0;
+#X connect 42 0 35 0;
+#X connect 43 0 45 0;
+#X connect 45 0 44 0;
+#X connect 46 0 42 0;
+#X connect 47 0 41 0;
+#X connect 48 0 21 0;
+#X coords 0 -1 1 1 300 300 1 300 100;

+ 357 - 142
blob-CN/main.pd

@@ -1,147 +1,362 @@
-#N canvas 343 356 1743 541 12;
-#X msg 73 21 disconnect;
-#X obj 72 426 tgl 15 0 empty empty connected 20 7 0 8 -24198 -241291
--1 1 1;
-#X msg 176 124 multicast_interface 192.168.0.88;
-#X msg 151 99 multicast_interface eth1;
-#X text 154 20 <--disconnect before connecting to another address;
-#X text 314 50 send to a multicast address;
-#X text 286 75 specify an interface to use with multicast;
-#X msg 128 76 multicast_interface 1;
-#X text 336 98 by index \, name or address;
-#X msg 43 348 multicast_loopback \$1;
-#X obj 43 326 tgl 15 0 empty empty empty 20 7 0 8 -24198 -241291 -1
-0 1;
-#X text 40 307 enable multicast loopback:;
-#X msg 196 262 /lambda;
-#X msg 284 262 /need/reply;
-#X obj 239 167 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 236 192 /blink \$1;
-#X msg 253 220 /truc;
-#X floatatom 1309 84 3 0 0 0 - - -;
-#X floatatom 1336 84 3 0 0 0 - - -;
-#X floatatom 1363 84 3 0 0 0 - - -;
-#X floatatom 1390 84 3 0 0 0 - - -;
-#X floatatom 1417 85 5 0 0 0 - - -;
-#X obj 1309 58 unpack 0 0 0 0 0;
-#X msg 942 13 status;
-#X floatatom 1234 59 9 0 0 0 - - -;
-#X obj 1443 62 tgl 15 0 empty empty empty 17 7 0 10 -4034 -1 -1 0 1
-;
-#X floatatom 1233 84 9 0 0 0 - - -;
-#X text 1099 36 bytes received:;
-#X text 1069 60 total bytes received:;
-#X obj 1007 427 spigot;
-#X obj 1046 407 tgl 15 0 empty empty enable_print: -77 8 0 10 -4034
+#N canvas 961 61 959 987 12;
+#X obj 44 325 s toOSCTop;
+#N canvas 811 99 951 572 OSCin 1;
+#X floatatom 464 101 3 0 0 0 - - -;
+#X floatatom 491 101 3 0 0 0 - - -;
+#X floatatom 518 101 3 0 0 0 - - -;
+#X obj 464 75 unpack 0 0 0 0 0;
+#X msg 97 30 status;
+#X floatatom 389 76 9 0 0 0 - - -;
+#X floatatom 388 101 9 0 0 0 - - -;
+#X text 254 53 bytes received:;
+#X text 224 77 total bytes received:;
+#X obj 162 444 spigot;
+#X obj 201 424 tgl 15 0 empty empty enable_print: -77 8 0 10 -4034
 -1 -1 1 1;
-#X obj 1007 452 print received;
-#X obj 1235 33 route received total from multicast;
-#X msg 953 52 port 9998;
-#X obj 943 296 route /analog/0;
-#X obj 73 398 mrpeach/udpsend;
-#X obj 942 108 mrpeach/unpackOSC;
-#X obj 230 380 mrpeach/packOSC;
-#X msg 103 51 connect 239.200.200.200 9977;
-#X obj 942 86 mrpeach/udpreceive 9977 239.200.200.200;
-#X obj 932 356 vsl 15 128 0 1024 0 0 empty empty empty 0 -9 0 10 -262144
+#X obj 162 469 print received;
+#X obj 390 50 route received total from multicast;
+#X msg 108 69 port 9998;
+#X obj 98 313 route /analog/0;
+#X obj 97 125 mrpeach/unpackOSC;
+#X obj 87 373 vsl 15 128 0 1024 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 0 1;
+#X obj 314 352 list prepend set;
+#X obj 314 377 list trim;
+#X msg 314 402 /X_top_OSC/step 9729;
+#X obj 288 438 route /X_top_OSC/step;
+#X floatatom 307 484 14 0 0 0 - - -;
+#X obj 97 103 mrpeach/udpreceive 9000;
+#X obj 220 157 print;
+#X obj 506 285 mrpeach/udpreceive 9977 239.200.200.200;
+#X obj 755 483 outlet;
+#X obj 128 169 s OSCin;
+#X floatatom 543 101 5 0 0 0 - - -;
+#X connect 3 0 0 0;
+#X connect 3 1 1 0;
+#X connect 3 2 2 0;
+#X connect 3 3 27 0;
+#X connect 4 0 22 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 1;
+#X connect 12 0 5 0;
+#X connect 12 1 6 0;
+#X connect 12 2 3 0;
+#X connect 13 0 22 0;
+#X connect 14 0 16 0;
+#X connect 14 1 17 0;
+#X connect 14 1 20 0;
+#X connect 14 1 9 0;
+#X connect 15 0 14 0;
+#X connect 15 0 26 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 18 0 25 0;
+#X connect 20 0 21 0;
+#X connect 22 0 15 0;
+#X connect 22 1 12 0;
+#X restore 1007 251 pd OSCin;
+#X msg 1007 276 /X_top_OSC/step 9729;
+#N canvas 0 61 1920 987 OSCtop 0;
+#X msg 79 60 disconnect;
+#X obj 167 304 tgl 15 0 empty empty connected 20 7 0 8 -24198 -241291
+-1 1 1;
+#X text 243 78 <--disconnect before connecting to another address;
+#X obj 168 246 mrpeach/udpsend;
+#X obj 325 228 mrpeach/packOSC;
+#X obj 325 184 r toOSCTop;
+#X msg 168 97 connect 192.168.1.105 8000;
+#X obj 175 68 loadbang;
+#X connect 0 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 6 0;
+#X coords 0 -1 1 1 85 22 1 100 300;
+#X restore 1010 205 pd OSCtop;
+#X obj 287 46 extra/stepper /X_top;
+#X msg 71 83 /pill_trap \$1;
+#X obj 73 35 hsl 128 15 0 200 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 70 55 f;
+#X floatatom 26 31 5 0 0 0 - - -;
+#X obj 70 117 hsl 128 15 0 255 0 0 empty empty empty -2 -8 0 10 -262144
 -1 -1 0 1;
-#X obj 230 336 r toOSC;
-#X obj 536 349 s toOSC;
-#X msg 540 224 /X_top/stop;
-#X msg 553 249 /X_top/emergencyStop;
-#X msg 721 257 /Y_top/stop;
-#X msg 733 282 /Y_top/emergencyStop;
-#X obj 1159 335 list prepend set;
-#X obj 1159 360 list trim;
-#X msg 1159 385 /X_top_OSC/state 0;
-#X msg 542 157 /X_top/enable 1;
-#X msg 756 101 /feeder2/barrel_home;
-#X msg 746 131 /feeder1/barrel_home;
-#X msg 563 279 /X_top/home 1;
-#X floatatom 770 196 5 0 0 0 - - -;
-#X msg 530 194 sendtyped /X_top/move i \$1;
-#X msg 531 108 /X_top/SpeedAcc 5000 500;
-#X msg 804 185 /Y_top/SpeedAcc 10000 500;
-#X msg 837 46 /feeder2/pill;
-#X msg 734 61 /feeder1/pill;
-#X msg 557 53 /feeder2/barrel_move 200;
-#X msg 631 16 /feeder2/pill_move 20;
-#X msg 422 237 /pill_trap \$1;
-#X obj 370 166 hsl 128 15 0 200 0 0 empty empty empty -2 -8 0 10 -262144
+#X obj 67 138 i;
+#X msg 67 162 /peristaltic \$1;
+#X msg 55 262 /feeder2/barrel_home;
+#X msg 45 292 /feeder1/barrel_home;
+#X msg 136 207 /feeder2/pill;
+#X msg 33 222 /feeder1/pill;
+#X obj 597 47 extra/stepper /Y_top;
+#N canvas 1 62 981 300 low 0;
+#X msg 34 91 /X_top/stop;
+#X msg 47 116 /X_top/emergencyStop;
+#X msg 24 61 sendtyped /X_top/move i \$1;
+#X msg 57 146 /X_top/home 0;
+#X msg 50 265 /X_top/home 1;
+#X msg 36 24 /_top/enable 1;
+#X floatatom 402 145 5 0 0 0 - - -;
+#X msg 466 139 10000;
+#X msg 463 174 -10000;
+#X msg 277 131 /A_low/move \$1;
+#X floatatom 412 95 5 0 0 0 - - -;
+#X msg 476 89 10000;
+#X msg 473 124 -10000;
+#X msg 287 81 /B_low/move \$1;
+#X floatatom 557 209 5 0 0 0 - - -;
+#X msg 458 211 10000;
+#X msg 455 246 -10000;
+#X msg 242 213 /TrBr_low/move \$1;
+#X floatatom 328 182 5 0 0 0 - - -;
+#X msg 176 178 /LevBr_low/move \$1;
+#X obj 30 216 s toOSClow;
+#X msg 392 176 1000;
+#X msg 389 211 -1000;
+#X obj 607 100 hsl 128 15 0 255 0 0 empty empty empty -2 -8 0 10 -262144
 -1 -1 0 1;
-#X obj 367 186 f;
-#X floatatom 369 226 5 0 0 0 - - -;
-#X floatatom 429 200 5 0 0 0 - - -;
-#X obj 690 321 hsl 128 15 0 255 0 0 empty empty empty -2 -8 0 10 -262144
+#X obj 615 134 i;
+#X obj 776 117 hsl 128 15 0 255 0 0 empty empty empty -2 -8 0 10 -262144
 -1 -1 0 1;
-#X obj 698 355 i;
-#X msg 674 395 /peristaltic \$1;
-#X msg 710 227 /Y_top/move \$1;
-#X floatatom 835 241 5 0 0 0 - - -;
-#X obj 1133 421 route /X_top_OSC/step;
-#X floatatom 1152 467 14 0 0 0 - - -;
-#X connect 0 0 35 0;
-#X connect 2 0 35 0;
-#X connect 3 0 35 0;
-#X connect 7 0 35 0;
-#X connect 9 0 35 0;
-#X connect 10 0 9 0;
-#X connect 12 0 37 0;
-#X connect 13 0 37 0;
+#X obj 784 151 i;
+#X msg 760 191 /brush \$1;
+#X msg 618 240 /crusher \$1;
+#X obj 622 217 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 591 174 /filling \$1;
+#X connect 0 0 20 0;
+#X connect 1 0 20 0;
+#X connect 2 0 20 0;
+#X connect 3 0 20 0;
+#X connect 4 0 20 0;
+#X connect 5 0 20 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 20 0;
+#X connect 10 0 13 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 0;
+#X connect 13 0 20 0;
+#X connect 14 0 17 0;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
+#X connect 17 0 20 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X connect 23 0 24 0;
+#X connect 24 0 30 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 20 0;
+#X connect 28 0 20 0;
+#X connect 29 0 28 0;
+#X connect 30 0 20 0;
+#X restore 133 423 pd low;
+#X obj 236 424 vradio 15 1 0 5 empty empty Action 0 -8 0 10 -262144
+-1 -1 3;
+#X text 687 388 1 goto feed position;
+#X text 687 438 3 go to random position on half selected screen;
+#X text 687 501 2 Go back to feed position;
+#X text 687 411 2 get a pill ---------------------------------------->
+;
+#X text 1092 410 1 ask for pill \, feeder tries tp deliver;
+#X text 1094 430 2 if succeeded \, finish \, else ask a pill again
+(up to 5 times;
+#X text 1094 450 3 if no pill delivered after 5 tries \, goto next
+barrel position and retry getting a pill;
+#X text 1094 487 4 if no pill after 5 tries on barrel position \, stop
+all;
+#X text 687 467 4 leave the pill;
+#X text 256 421 go home;
+#X text 255 436 goto feedPos;
+#X text 255 465 goto randomPos;
+#X text 255 481 put the pill;
+#X text 256 450 get a pill;
+#X obj 235 382 r setmode;
+#X obj 236 504 s mode;
+#N canvas 504 144 441 768 goHome+feed 1;
+#X obj 42 9 r mode;
+#X obj 42 34 route 0;
+#X obj 44 565 spigot;
+#X obj 128 255 route 1;
+#X obj 128 229 spigot;
+#X obj 169 203 == 0;
+#X obj 45 389 r OSCin;
+#X obj 128 103 s toOSCTop;
+#X obj 128 359 s toOSCTop;
+#X msg 128 78 /Y_top/home 0 \, /X_top/home 0;
+#X obj 45 414 route /Y_top_OSC/step;
+#X msg 14 81 0;
+#X obj 273 217 print;
+#X obj 95 164 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 128 148 r OSCin;
+#X obj 128 173 route /Y_top_OSC/limitLow;
+#X msg 128 284 /Y_top/moveTo 23000;
+#X msg 44 665 \; setmode 2;
+#X obj 45 509 == 23000;
+#X obj 128 309 t a b;
+#X msg 164 334 1;
+#X obj 45 534 route 1;
+#X msg 98 639 0;
+#X obj 44 615 t b b;
+#X obj 45 482 spigot;
+#X obj 86 456 == 0;
+#X connect 0 0 1 0;
+#X connect 0 0 5 0;
+#X connect 0 0 25 0;
+#X connect 1 0 9 0;
+#X connect 1 0 11 0;
+#X connect 2 0 23 0;
+#X connect 3 0 16 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 1;
+#X connect 6 0 10 0;
+#X connect 9 0 7 0;
+#X connect 10 0 24 0;
+#X connect 11 0 13 0;
 #X connect 14 0 15 0;
-#X connect 15 0 37 0;
-#X connect 16 0 37 0;
-#X connect 22 0 17 0;
-#X connect 22 1 18 0;
-#X connect 22 2 19 0;
-#X connect 22 3 20 0;
-#X connect 22 4 21 0;
-#X connect 23 0 39 0;
-#X connect 29 0 31 0;
-#X connect 30 0 29 1;
-#X connect 32 0 24 0;
-#X connect 32 1 26 0;
-#X connect 32 2 22 0;
-#X connect 32 3 25 0;
-#X connect 33 0 39 0;
-#X connect 34 0 40 0;
-#X connect 34 1 47 0;
-#X connect 34 1 72 0;
-#X connect 35 0 1 0;
-#X connect 36 0 34 0;
-#X connect 37 0 35 0;
-#X connect 38 0 35 0;
-#X connect 39 0 36 0;
-#X connect 39 1 32 0;
-#X connect 41 0 37 0;
-#X connect 43 0 42 0;
-#X connect 44 0 42 0;
-#X connect 45 0 42 0;
-#X connect 46 0 42 0;
-#X connect 47 0 48 0;
-#X connect 48 0 49 0;
-#X connect 50 0 42 0;
-#X connect 51 0 42 0;
-#X connect 52 0 42 0;
-#X connect 53 0 42 0;
-#X connect 54 0 55 0;
-#X connect 55 0 42 0;
-#X connect 56 0 42 0;
-#X connect 57 0 42 0;
-#X connect 58 0 42 0;
-#X connect 59 0 42 0;
-#X connect 60 0 42 0;
-#X connect 61 0 42 0;
-#X connect 62 0 42 0;
-#X connect 63 0 64 0;
-#X connect 64 0 62 0;
-#X connect 64 0 65 0;
-#X connect 66 0 64 0;
-#X connect 67 0 68 0;
-#X connect 68 0 69 0;
-#X connect 69 0 42 0;
-#X connect 70 0 42 0;
-#X connect 71 0 70 0;
-#X connect 72 0 73 0;
-#X connect 72 1 29 0;
+#X connect 15 0 4 0;
+#X connect 16 0 19 0;
+#X connect 18 0 21 0;
+#X connect 19 0 8 0;
+#X connect 19 1 20 0;
+#X connect 20 0 2 1;
+#X connect 21 0 2 0;
+#X connect 22 0 2 1;
+#X connect 23 0 17 0;
+#X connect 23 1 22 0;
+#X connect 24 0 18 0;
+#X connect 25 0 24 1;
+#X restore 404 423 pd goHome+feed;
+#N canvas 1 62 654 300 getPill 0;
+#X obj 71 19 r mode;
+#X obj 71 54 route 2;
+#X msg 93 97 \; toOSCTop /feeder1/pill;
+#X obj 319 25 r /feeder1/pill/done;
+#X obj 319 50 route 1 0;
+#X msg 379 98 \; toOSCTop /feeder1/pill;
+#X obj 68 157 delay 5000;
+#X obj 71 79 bang;
+#X msg 68 182 \; setmode 3;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 7 0;
+#X connect 3 0 4 0;
+#X connect 4 1 5 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X restore 404 449 pd getPill;
+#N canvas 1 62 499 650 gotoRandom 1;
+#X obj 90 33 r mode;
+#X obj 90 58 route 3;
+#X obj 90 83 t b b;
+#X obj 90 108 random 100;
+#X obj 198 106 random 50;
+#X text 201 12 X 165000 ... 300000 width 135000;
+#X text 201 32 Y 14000 ... 31000 width 17000;
+#X obj 90 158 * 135000;
+#X obj 90 183 + 165000;
+#X obj 90 133 / 100;
+#X obj 198 136 / 50;
+#X obj 198 161 * 17000;
+#X obj 198 186 + 14000;
+#X obj 45 339 r OSCin;
+#X obj 45 419 == 23000;
+#X obj 151 423 == 23000;
+#X obj 45 394 route /X_top_OSC/step /Y_top_OSC/step;
+#X obj 81 507 &&;
+#X obj 151 448 t b f;
+#X obj 81 532 route 1;
+#X floatatom 127 296 10 0 0 0 - - -;
+#X floatatom 205 329 5 0 0 0 - - -;
+#X obj 321 324 pack f f;
+#X msg 321 349 going to \$1 \$2;
+#X obj 321 374 print randomTo;
+#X msg 90 210 \; toOSCTop /X_top/moveTo \$1;
+#X msg 200 250 \; toOSCTop /Y_top/moveTo \$1;
+#X obj 83 443 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 178 483 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X msg 81 557 \; setmode 4;
+#X obj 45 366 spigot;
+#X obj 98 344 == 3;
+#X connect 0 0 1 0;
+#X connect 0 0 31 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 9 0;
+#X connect 4 0 10 0;
+#X connect 7 0 8 0;
+#X connect 8 0 25 0;
+#X connect 8 0 14 1;
+#X connect 8 0 20 0;
+#X connect 8 0 22 0;
+#X connect 9 0 7 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 26 0;
+#X connect 12 0 15 1;
+#X connect 12 0 21 0;
+#X connect 12 0 22 1;
+#X connect 13 0 30 0;
+#X connect 14 0 17 0;
+#X connect 14 0 27 0;
+#X connect 15 0 18 0;
+#X connect 15 0 28 0;
+#X connect 16 0 14 0;
+#X connect 16 1 15 0;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X connect 18 1 17 1;
+#X connect 19 0 29 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 30 0 16 0;
+#X connect 31 0 30 1;
+#X restore 399 476 pd gotoRandom;
+#N canvas 1 62 450 423 dropPill 1;
+#X obj 78 22 r mode;
+#X obj 78 72 t b b;
+#X obj 231 224 hsl 128 15 0 200 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 228 244 f;
+#X obj 193 133 delay 2000;
+#X msg 229 272 \; toOSCTop /pill_trap \$1;
+#X obj 78 47 route 4;
+#X msg 266 111 150 2000;
+#X msg 193 158 0 2000;
+#X floatatom 171 277 5 0 0 0 - - -;
+#X obj 231 185 line 0 5;
+#X msg 64 276 \; setmode 0;
+#X connect 0 0 6 0;
+#X connect 1 0 4 0;
+#X connect 1 1 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 8 0;
+#X connect 4 0 11 0;
+#X connect 6 0 1 0;
+#X connect 7 0 10 0;
+#X connect 8 0 10 0;
+#X connect 10 0 2 0;
+#X restore 398 506 pd dropPill;
+#X connect 1 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 0 0;
+#X connect 18 0 34 0;
+#X connect 33 0 18 0;