create counter
Sensors Actuators and Microcontrollers - Artscience Workshop

ArtScience Workshop

Sensors Actuators and Microcontrollers

Coding Day 1

Introduction Arduino


Example: Blink with parameters

// parameters
int led = 13; // led is a variable of type int: integer (whole number)
int on_time = 25;
int off_time = 500;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(on_time);
  digitalWrite(led, LOW);
  delay(off_time);
}


Example: Fade extended

// Parameters
const int led = 9;     // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 10;    // how many points to fade the LED by
int low_fade = 0;
int hi_fade = 255;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  analogWrite(led, brightness); // is an 8 bit values; it wraps any higher value between 0 and 255
  brightness = constrain(brightness + fadeAmount, low_fade, hi_fade); // = sign: it becomes, or, it is made equal to
  if (brightness <= low_fade || brightness >= hi_fade) {
      // <= means: is it smaller than or equal to 0? -> let's call it "this"
      // || means: "logical or"
      // && means: "logical and"
      // >= means: is it greater than or equal to 255? -> let's call it "that"
      // if this or that then something:
    fadeAmount = -fadeAmount; // fadeAmount is made equal to (-1 * fadeAmount)
  }
  delay(25); // fadeAmount will remain stable for this amount of time before going to the next level
}

Receiving Serial Data in Max and Puredata

This Max patcher contains all the required objects for receiving packages of data from the Arduino board. The letter of the serial object may need to be changed to a different one in your case. The print message will enable you to find the 'usbmodem' in the Max Console.
Max_patch_using_serial
Copy the following text and paste it in an empty Max patcher window.
----------begin_max5_patcher----------
1254.3oc6XsrjiZCEcs8WgJ1LISQboW7J6xuPRUYyTSMkLH6lt.DQ.c6tmZl
u8nGfezFnI1DRVLdAOjuhiN5b08dk955UNaEG3UNfeE7IvpUec8pUllzMrp8
8UN4rCwYrJiYNwh7bdQsiq8+p4Gpss+.qXOGT+.Gjwqq4RvGR9.nV.d9AVM+
I06rxxrTdktsWDMfepoxZdoLsnFjyqpXpO.aq3It1lcoEI.QS8O2AUVZAOVz
TXvC21XZhAcw1G+EZmgkr53GRK1+EIOt1xMTDdCzEffg5aXH0byeCD741NUz
jmVnF4FVhN0nZDz0JT232VuVewchSW0h86y3NWOZwmFsRVNWMg8EdAaqxVMR
s+mE75WJ4VZ3jpY+mGlmAFZR7Mzi1c8eBIQ2.IK3OqnzUtDIr3u2Cy8BFQn7
gVBXtgi13oDsvgX.d1joAXvG6c766Lj7TktufkMpB0RvVw4lHHZNIH.tA0GI
8teRhCCO4M9eHIqXO+c.gP5ilzYfl9FsjFsTzbWlP8Q5iMjaJnhiKvYqJ58I
ttSHyYFR5ORLU74prGbb52ezF77oxulyJAPUHdLQequoGzfh8nxbGQs5bPv3
D0a1z4gR0J4rDPBqlA1IE4feS4lJ1+6pF+CtLkkAXxjlzBAfefkWdJ4yE4OI
8j+Lz48mCLSAQ9cqq+2N8YaUAWMEHJ4E8nvT+aSgwHCirYOWtfxCwt3LQUe0
LPo2E8ngKbNml7sbYe7.OSwoFyQE9+hnR5UnUujuUj027.79BHYkUO+agiyX
90Wy1rWJZJ6ggjQ7XcmFKQ9F2VJ5VRuNiJYEOSkbAf5qLhS0VbEMMNrtmtOI
JSLAhnuivR5kxjYLSidiYpshwphSSARdojWoLiUmJ5K5KNZrDHVYraiXHqbt
.oPFPNSqEr93Pfyst2qNwyxPJ7VDuYbU4eohqJE8VHDFNt656uCS6Up2RUx6
PYJMmcPOLDQtqHqKcg.CFxwTOWhpfKHrGVFNpu5TC1XOSDezRkobHsTGboOs
jDbiZo2rVTmoelhney4kYfV29kbtRzHi6Fnsm3C3D5I7p5zBanzyrAZMp2o0
oBT3D.Rmw5tAReRHuKR5i64LiDxDUMgCtNY9gFcMzv6CZuo.s+bL+RmBRdyA
RjoxIz8hDZJHMGdmzo3hDNG.QWJflRHjtI36CI3DPpa3bWHQBVnIOxTTIbvb
fzTVL0MbtejvKAR3oHSz4H6EFtPNDHxMAjsN.VY4SbYUqwFLTU47nvjeIz07
ZZg8UyAZnJu4ozN6ssvjpRVpU0qzHMiKmC91sK6jKTYpJZRaySpXmBxp5Wxd
asGErbaWezvZtDBaK3Wwmcrlr5KmDhEY1wzm.vMgtmcAcVkQGmAuvbLIBi70
li8nQPr4ofPJAoeh5cr6a2uKMK6XeWcDdUwds0t0NPbaa17FpCHeOXjYX4q+
EXeBGP8LOQ6vosa3ttAcu3hu2aLb.6nmYmZyO1yfBGn+21VKkhRgryw.tgDY
9CipzUA6XH3GAQQ9mc35E0Uou15JddEor3X01qO6SYqI+3E8L+YyxWhYjGMz
nDHHjD429DNhnehbI7ctMJm7+jKSXELmNeb210PR0Hw3wYjqVepbkCUZWETm
ul6je3gM1d8Cmve3DNyNgWGi6M9i1PylcZp+3UkLa.eyFRW+s0+8zRIX8
-----------end_max5_patcher-----------

In Puredata the first step is to install the comport object. Use the 'Find externals' option from the 'Help' menu and search for 'comport'.
Stacks Image 23
As the vanilla Pd is rather bare bones, you might be missing some regular (Max) objects. This library consist of Pd abstractions that introduce some of those useful objects. Unzip and copy to a folder that is listed in the Pd preferences>path settings. Keep in mind that unlike Max, Pd does not search subfolders.
This patch now is required to receive serial packages, group them together and convert them to usable data.
Stacks Image 348

Coding Day 2

Reading Sensors


Example 1: FSR sensor

The Max patch below handels serial input of single values, shows them in a history (multislider object) and maps to the pitch of a sine wave generator. Uploaded to the Arduino is the AnalogReadSerial example.
----------begin_max5_patcher----------
2105.3oc6ZszjhaCD97L+JTwgbhkRR9c9EjCIWykMolRXKXztFKheLO1TY+s
mVuL1fArmEbkCgZFaPVRs95tU+R9ue7gEqkuwqVf9YzmQO7ve+3COnaR0vC1
e+vhcr2RyYU5tsXGuphskuXo4Y072p0sicsHapy400uumal1EKP+o8QhLcWk
q+xmB7c8unYmn.Fgd5o1F2ypSeVTr8oRdZsYdH33U3kHpOVcKPek.M0N6vDY
nsdlHpF+mGeTcY4OH17imH3nSEbQTMbRL2LH8FCtT4tc7h5S.2FQdMuDIaJQ
oOyJq.x+SDOzqOKReFUx2WxqfggXEHdQ1m1jy15lhbQAOU1TT2EbcYC3AYCj
yyF7B0.OvdSKiogmkMfugrgJdofkidlUjUgXUoBA5EVdC+.KfUKjEUH4FMeh
kBbspwxJNnAMQVAEO+rB.dEa4npcRY8ynM.RkkKF.SgSFS9lsvQckuj4AT+w
B92xXo+wBzllhTinjUgpdU.KSTsDU2TVfXMYBIRBeoHCjzaFB19SF1FYoC8z
3YD1okbVMHKA8SzqrW3CAH5TATHoq4JqzbdvyNQlPIs1Tx+qFdQ56nTYwKvN
QPfND1veTr46a1+ELifq0TbMppIKiWfraEkk1ciPSvEzN4Kb0LnLFo9MXdp5
vdzqYLxaxFiL7DZrUyMd9MFoPYogWrAwr.1Xgd.wt2jMMQ8MXx+9YYBlg07x
yGIwRzh0.BGLhBuViN6AWO63fZxS7B15b8nwSErwcsCe0Pone.vxpqKaDSKr
IuKaHRMkVW00viAxs3BPLpm+y36Q3hE7Wgk8oQRjKx3PTTvemE+axkr5gYBC
awx6BaNS5t6Lv6NfTX4BSxGS0klLFU2MxxcLMfBmpsIC78L1ntKJymQP+scr
8HLJ1GCjEj1SLEHZzfR5fqKoMVohi9uljN79JoctlM9etKR5bwK7UaYhhu6f
xKrxB.Km4o6Kk0RE+osO+l+ut5P+V8Kq.sEHwIdlaHo4h8OUI9FuKZOgQWI1
VvxUra0+FyEKUqfpNlMfkcsx+XAOu0eOd.4BwQ6LQ09b16Oo8jZnzmhz7QOb
G93PhO2Js5Y4qNvdQ+NxRgKooqHWCL1pcNe8iNYA0Wv563jFn2ipUPLtYOob
UHV2TyO7sJqT2J1UBVH1A4FWyt16hdm7vhydOqoPTWU+tg43OPGfnv9phQ0c
40qC6.ll5YFIv.SfrX64U850UArXfrWOUbcDAYZc+vAImcNrZEAIqhogQQfU
MyGhSXzaPf1PY8PKRSW069b2l3VQc5Zeeff6HQSs5JAFMKadX9Atq2xf6F1E
wtZ4lo4Uf3M0PWsaerYrPiluHcReOMm+8EWwF1fnbxUHygRq29f4Ck+EnpWJ
Qjyhy9NDWuMUlKKMOCuJLl5EPS7IjnP+HxRnIZbHMxO.mDi8RnTUSA3f3NcT
0jW3fLNxjqapwcYRGc+acYSaxqE5ndub1MG3Q64ru1iK4q4EKG7ajNK1TVQl
.tvCbiLH12i3q5erhopYvPKdQd8GoY80inIIg3nXcmoA9ZZFC2wDW65oMHgR
BBaEY8m0tdY8FSzOs.HzsJh7TeTTBqk+puEoUFNCzotQRrKHPipUQxSsTOB5
CZHARhp08E8XRD4HQrlOnIglOsrCYGbw44FIUyG0RCkFcfFVJNcX+Qdgb2rk
A1n4p12ePXdP2BObreGuthcqK7AsD+HbPhY2GPDxYPjeqNJviIZDEpzPzLdb
jZi6QZZsomZLbYhSEqim4Cr6RYGBBfo9P8sFdyE7unnSvgpwYB8ZgDhOc.Go
T7oVzykU7wnGuSl0KrvQmslwZDg.69fOw3DZX.wKDzrrkG87w84MS0gfDNt5
Prl0jcoRPf0Nji5ly1M1x6GBcAisJKk6gf6tN.sxs6B.OiKYQsjcVT2aWv80
abxGsVMDi23YrpTaJk6pde2ZY9HTWtubsoW9YKWydzugyGW6a4q1VJa1Ox3Z
tu7sIGyr67jM27IyWowp345Jf5c4flWd39bwDi9faYsQi3eMkOuaISTcjzWz
N2Lx3HevcsDOpqdNiV6S2E84Xcz6lhlLp16yMqjMkoN9h0vL5.gx3U0hh1RQ
84VyPnyER1XoS7Hni5UcA0V9jExRUdRm0L0sjxpJL2oSsTF+CQ4nwP4a.uUQ
G5LPG0YqcU.oNVlauPb7jldqkhdzwHF8tE7W7XnTxvppjYfzd2icIzwXBhzm
z6DY6kfY8JW70jUAp2aDSXOd9qHgggQ3XvhcHFqxE8ROi3oOJvf3.0rn+0On
jjFMV00eXJQFC2K5dnyLdRSt45LiQckPtE729lyNCktEDZDHJ4tr+aLdlo2C
i5pxGbco3Mf2pxjedHj2XLiFdODiihzD58vP.YTdHuI7WxbIHGAchNgNlnwY
626dO6TDQQBHKluXx2Hdo9mhByO0UIbQI+Egq+lVXkPRB0PFBMklSL7sPyK1
jtdhkEMBqXC.GPRcApOJCf1Ca7KZPyKAmclLS.7rg0jW2mGbTRQ3j.+XctPD
LjCTn8azDuix7YiD7CaOk9Oi5l1Ru4SWEX2kSpqs4MwqS2os0PVchCXcFXz1
Zr6GzIWtMh771w18fqco.ZWH1Sk07KRaxetiFHT8Ix7MUte5u42dXtlg0djB
3k8tDFbTGOS+76zOHed6oJz4bsUunDppI5zFV4kXOY3NramnETD+cdYFqf0u
Z1WZEDpOtg1tyRS4EcGfo1GsWT7emN9R6VnRXDsGIxBqNk9rsblw5tk6fd3a
qLi5+UB+ekvarR3o13NRezXZVWII86ZxdlwdutfSO9OO9urqhfWK
-----------end_max5_patcher-----------

Example 2: UltraSone distance

const unsigned int TRIG_PIN=13;
const unsigned int ECHO_PIN=12;
const unsigned int BAUD_RATE=57600;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(BAUD_RATE);
}

void loop() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  

 const unsigned long duration = pulseIn(ECHO_PIN, HIGH);
 if(duration==0){
   Serial.println(-1);
   } 
  else{
      Serial.println(duration);
  }
 //delay(10);
 }

----------begin_max5_patcher----------
1681.3oc6ZsrjahCEcs6uBUrXV43fDumufYwLamMIS0kLH6VYvRNBQ+Hol7s
O5E1fM1FSic1DWcC1BjN5buWceH36OLyaI+URkG32AeBLa12eX1LSS5Fl498
LuM3WyKwUlayKmuYCgI8laulj7pzz9m8Heq.m+YOvpZVtjxYU.bEn5EpL+If
jCj0BF.WWP4.t5KrB.e0plggUugWKKIRCH9tV2hU8kxV+nfjKsSxff3E9yAA
go5SHj4DT0F3ebchVXlO7ke4CggsFeJqY3g519uGdPeX96j14BBVR.UTFA7B
9YxUSnXHxPgLyoj3yxGzMmOanETs1Zkf70ZBK+MPNm8LQToTnilagglSnnyR
N+IibqJ4pwn+oK5xS2XiQUju4Gosls1gQ91VhsCddyAdKwr0d8QHTr2NrD3M
DIQ7HggWVRZK15RVWiq3hMXyrJdDzuj9LYwZLk8ilIvyXASMCNwU2J3RtlU6
tm+J7OWr+9V7GKTlGDVAonoKbAUY8f0KyaOu6JpCOsnNxZnihsVFgIlE09sj
0UOweoY9zHqxKoaerh9MRaLORoTQWyvkZUi9eksfRRNWy6J4d8TAsZaI9sGE
JsmqieHw+nYQ9SXFiT1Q4zVECOmJFdNUrRaIcidNulIayyJkijhGwRoftrVR
1+sJmV2o10J1xZBeUSyMs2d9rQAt95V5c70UqUVeZiiN2JkQkTb4wT7..wFq
y3dgyMFNQdT1hTTbRBz28A1H56zIkwfPNvIYikPefWq.uR9lctG1mvfx9WMN
6c83V80b5JWJZhI9iq1wYjccgKXWXTyw9by.S50uIZDyVF4E0HdbLAI+DApg
WbEty2OJY.NS6kcASVTgSvt72xKI+Xz7yF2NH5x7y4WpWVFdq0gUkzBhJll5
uqlpHeiNLz2FWL3xT05zsWl1eJLASHSywkDfOP4RQ++Bcf7wR4fDi1MCNRq2
3dIa78KklFyST3jjRCz+mTJMmPW+Q.550sNYBJ0VBQ1hnwaNeyW29Q8DbzTz
FF48QwfIihpvpU30ji3XBDkb8Tz5MBE5OXK69XWzzoAOUIUqnkp0I.ds.nR3
STol5+FL.7xSTUgwBxVAoR0MUEw.UJ1eXUIdcyPnxFgrK4PzUWprM.Uj6ju0
hn+jHh7u4UVVQDp79.pTdKz6LPNkBLYutWDfs6Z.ekQNgyURspIUTf7GfnHL
8VmwwWUNNEb.75s4sUll0Jqvyax20Q9x047RtvdM+EwonfHTVHDlDGl.mqZB
kFiRBi7yR8CxPHcSQ9QostQcSAw8Fa.NYqjzRJU4NxSskCAWTDAgKxzeR8yP
wQvf3Dk.y5vnc4ca3EmuVxlpHor9cNhFT.QMerEJ6wUUY6ct3j6yKsjWQ7Fg
zSWsXMcro7jzNxwPcnpgzf8Rb8t8HnssQ7jsl58wNmMvHYmxE1VUgn8Qvnas
SCpjiGcd.PqGiADjrig9s0gQ1stRfUB9lp21rjWNZAmK6h3qwb41J0t4Qm9V
4h0Bd81wVqg6THbX0ZbujanadE1jRUlcfNaXw.iY4DbVyrv3AFWe99y2KgXx
Mu3cSRhi1zK.0rCtCwO2cTvAu3pVSuLo4dviiyPWc6cklUp5IxaXSyNq.1y3
BRkjx1sC8eZ+1oouod0XCFI+AfT7T.T3..RuG7uejBFhvq6zgKJHhS67cRgF
E2Oz9uKnaDcmm0pE8.3OOnmbAd7PPFMAFUYC.nzI.mzAfideN5SKBu4HGbKr
bSFxZlIPzpwAcGvYHN5Zb69t.ZHNaBm.bPCIFADNUHAuDRSAPCfQYSQrnA4f
ZJ.J5dAD7dAz.vI4Hbrodg2ts48bQChFBUJqewlRX5byOoL6OMarimf7Ls49
ssfEpLSkpzRqE1GU8qw18W1rSSBVM04yUQNEjlGE8Ao6s6ob+ECoIBeeWxiJ
9rBWWJ6JC5j0Z57VGfsx+8fra8yhBSMI0B8UIyF69FJK3fTX2I36zcjJ+Wno
SnnvLeSpvnjzv.yPFF0B1Uzxxc8s8atPSt3NB3dV71eA2kEtNaa8XFq+jX+l
NIby2B28tBX6FZG8l24PbzA23ItuvV2mpvJ6d3gZ8ZSneSYza.TiNeQPl6UC
nUcLmCg3LeX1do6JNS175r7IP65Uv44DV6gxVM8tCZIemgowrQYj+2DQAlg8
Zrwm6VBITi3tW9AOmM0FkAEsIdb6kb6sCecgsW+xH7WFgSrQ3w93Nvdz5Z1r
sAlWKmsXq+dytK7v+8v+CDwTyeA
-----------end_max5_patcher-----------

Example 3: Two Acceleration Sensor Values

void setup() {
  Serial.begin(57600);
}

void loop() {
  int orange = analogRead(A0);
  int yellow = analogRead(A1);
  // print out the value you read:
  Serial.print(orange);
  Serial.print(" ");
  Serial.println(yellow);
  delay(1);
}

----------begin_max5_patcher----------
1780.3oc6ZkrjaaCD87LeErzgbRVE1HHY9Bxgjq4hqTSAQAICaJRERpwyXWI
e6owBWE4HJYJkjpFU1bAD.8JZ75Fy2e7gEqydQVrv6m89n2CO78Ge3ASS5Fd
v89CK1KdINQTX51hT4WyV+4EKsepT9Roo4hD0FoGAA+q5aYGKSjkkudPZm+E
aSxDPu+C22UaLiDlsOfCpFT5w8pTXXFhQcMdPTF+IU5tmxkwk1IiEtBszi3S
z27o5qXno5IGlGK8MSDV23e83i5KK+wDz3WiSj+8nxXgZWpHYXgLbPgjbNgj
5t4e+Dx8kYaGUDGV3hFT3vmU3vFKHI39Ibeau3fGEg73v+8QdXD5xjUBdPY0
+rdqglaQ2BYc+wjRkYQX93Byx1BzAo3KwYIY41uhVwhBQznkC9DtEyFKR2nf
KR+pQ5GxnXlt+gj.lO1LRJlFP6Nx19KrE0pqbwdYoL+IYpXchgYQ8IEuhTAT
8OMAPTeRjgnAggDp+HLIoZjXlOJJT2eBHRDh9IpOOj2iIGz+s.du7UKyQ5Sh
fJRDFnUDFRXD+ksH6fLGsZjjHDNhazaXb.22HVvLP3cG4P9VQlUPXp8l8MSL
i5QUz3FfFzi6DQJrhwPMFTV.x23T3q4U7HhDq1cBTxXiHwgtiLZdDLEg8TF.
yAJbvYtljv2QDptKy2h9ioGDweYzkFpzR8pC8sg7VoWZvMmYfvYFqw4VwSlO
A8GbiX5ktQLlXrXTB6lsSr7aaDw0a41laIW5NpNt0slg4WccDtEcEbah5Y4p
cBUZMG+rHOEBwMxWOjmUloMN0842X+5pl9s5WVA1VY5F4lpgDmnN7Tg5ax1d
giAEYoMvu0luTyAEsr8.aCJIQZpLIN6XZY6XDs0z0NSaTEGRDu9TtHcmiReH
v5Bf5Dn5zn50AS+T1WqDVzasvJKWISKEkprzysdyYWYFuPLK3DFpqgkUoIsh
d2X8hmkadRTVlqVerT17Tgyp6L6ZCaxQIfTx0bU6sk9dwc67sioplcUXCzgD
U5WzJp1rWmNrGTZ5uYs.CLAYo6F20qSWU.ynDImZt5QPabZ9fjyMGNuB+H.N
.OH.vWY+gqLFcFD3MjWNDSZ6pY0W0s+sgvyu13Mtfj+mFBu+EuImSpBY+uCB
O6RQvWIqbz6P3qRCh9ND94ABOIf+ND9lEBwY62K0.x6speqJA7w7xNl6A6am
W.z3mvTuu9IU7m7xkGxkEvv7Dod.ZoOrMQrqZJfMRk0vaHCD5Ccow9nVKlu6
Fxh1eVARNlZnPlCax5AHW1T3IJhUJOCPjFUfAwTgW1VidRDCZshopJXgWopv
Ff71nJFYaf+DB5jm4gGMb4Z.jZS3x065DrjqC4.wezqVYA107gb8hEjIjoM9
hu1cuoilPN7AScBewfC315AwaxEYl2RQqo.jqk.942bGk9o9pGmEy8hLHwjA
R8pI6xFXUIYExorkv9rMcxGXx3Mr5KLdUj9WHJhv8wTNDj1UfswA7SuBsmF3
+Q0EVGT9at7QOkl9tVbbyh2XGAjASUP6pHLy9FWkz4OMoCBQc.P0edAzY2tI
B3HAMTkYh2rNP2o3EQWbkVb0TBaiWfteprs4Y6Kdc+5rjI3tba0ZgWak3r5K
2902mjTRVsKO63gIBl+1p2t7JkE0FLJCeGqfoLAP140TJxg2VeYy86kRL3JW
x5fIxNmyGcNUhZPhmqd22MrQW4pVWFQTzE38Y5hAlauy01PFc6c0lEP9DwU5
EGy50PnMxhRUZcMH+Xsmf2XI2LY5fl.gzk31qtvYKxx0UGXTTzyOoQmRZ7OF
omh5EOGpW5DHDaNHj+8Rh32KBELABQlEJENEQBMGTJZJTJbFnDYBDJZNnCpS
ngam6.YRQKlEJMofCygxaJAG5EAYlB.RmhUiMLkQ2dJGbqj4yFOgdKjY1Dnr
+L3OMk8.3y.c32q3kZ+.x4LYyDcP2A5LkMZny.clx1LmtKiEzp3vgmk4EtNa
HA.1+yVX4gKMupRsuZJl1hb4ypp9aaQjCXoKAfzGysmn5Kb6gcYJ6Vd5Qka4
LHb.IMGIROfx0GF6mMBsLGgb.3A4Yq3XRYWcPubGPQ9rPSJCXDjp.28DIh1K
AgsYokU+UL7Qu1n66Lelicn5xImjhsd1s5No9PKH9rHjIQER8o5v7akxyVUR
R8Xaev9UYJ4XD2oVaeCWmiT0gQw0+BrOoSQx7Dq9vtsCiz5rQZeg62qiizOV
q9Ao85NGqVm6u9OjDcQ2p7FVQibmbdK0ckoEbD+cY9FQpnaQeeKNfaNfq5tK
hikosGfsDA0Wz5+Je7ktkP4vHpODtENeJy4dVEou8RtF+vWVYG06Ngu6DNyN
gmFiqm+nMzrofKl+VbNHrw6M0k4w+5w+AacJui.
-----------end_max5_patcher-----------