├── JS ├── .DS_Store ├── arduivis-bpatcher.maxpat ├── arduivis.js ├── arduivis.maxpat ├── arduivis.maxsnip └── info │ ├── arduivis-multiple-1.png │ ├── arduivis-multiple-2.png │ ├── arduivis-single-1.png │ ├── arduivis-single-2.png │ ├── arduivisJS-info.maxpat │ ├── arduivisJS-safety.js │ ├── codegen-input.maxpat │ ├── codegen-output.maxpat │ ├── codegen.maxpat │ ├── codegen.png │ ├── create1.png │ ├── create2.png │ ├── create3.png │ ├── howtouse-inputs.maxpat │ ├── howtouse-outputs.maxpat │ ├── howtouse-template.maxpat │ ├── input-format.maxpat │ ├── input-info.maxpat │ ├── input-ref.maxpat │ ├── inputs1.png │ ├── inputs2.png │ ├── inputs3.png │ ├── inputs4.png │ ├── interface.png │ ├── output-format.maxpat │ ├── output-info.maxpat │ ├── output-ref.maxpat │ ├── output0.png │ ├── output1.png │ ├── output2.png │ ├── ref.png │ ├── template0.png │ ├── template1.png │ ├── template2.png │ └── video │ ├── createinputs.mp4 │ ├── createoutputs.mp4 │ ├── createtemplate.mp4 │ └── creationdemo.mp4 ├── Max ├── model1_output │ ├── arduivis_Max7_model1_output.maxpat │ └── arduivis_MaxMSP_model1_output │ │ └── arduivis_MaxMSP_model1_output.ino ├── model2_input │ ├── arduivis_Max7_model2_input.maxpat │ └── arduivis_MaxMSP_model2_input │ │ └── arduivis_MaxMSP_model2_input.ino ├── model3_feedback │ ├── arduivis_Max7_model3_feedback.maxpat │ └── arduivis_Max7_model3_feedback │ │ └── arduivis_Max7_model3_feedback.ino ├── model4_multipleOutputs │ ├── arduivis_Max7_model4_multipleOutputs.maxpat │ └── arduivis_Max7_model4_multipleOutputs │ │ └── arduivis_Max7_model4_multipleOutputs.ino ├── model5_multipleInputs │ ├── arduivis_Max7_model5_multipleInputs.maxpat │ └── arduivis_Max7_model5_multipleInputs │ │ └── arduivis_Max7_model5_multipleInputs.ino ├── model6_multipleFeedbacks │ ├── arduivis_Max7_model6_multipleFeedbacks.maxpat │ └── arduivis_Max7_model6_multipleFeedbacks │ │ └── arduivis_Max7_model6_multipleFeedbacks.ino ├── project_adafruit-matrix │ ├── arduivis_max_adafruitmatrix.maxpat │ └── arduivis_max_adafruitmatrix │ │ └── arduivis_max_adafruitmatrix.ino ├── project_bluetooth_hc0605 │ ├── arduivis_max_bluetooth_hc0605.maxpat │ └── arduivis_max_bluetooth_hc0605 │ │ └── arduivis_max_bluetooth_hc0605.ino ├── project_bufferlatency │ ├── arduivis_max_bufferlatency.maxpat │ └── arduivis_max_bufferlatency │ │ └── arduivis_max_bufferlatency.ino ├── project_potentiometer │ ├── arduivis_max_potentiometer.maxpat │ └── arduivis_max_potentiometer │ │ └── arduivis_max_potentiometer.ino └── project_servo │ ├── arduivis_max_servo.maxpat │ └── arduivis_max_servo │ └── arduivis_max_servo.ino ├── PD ├── arduivisPD_input │ ├── arduivisPD_input.pd │ └── arduivisPD_input │ │ └── arduivisPD_input.ino ├── arduivisPD_multipleInputs │ ├── arduivisPD_multipleInputs.pd │ └── arduivisPD_multipleInputs │ │ └── arduivisPD_multipleInputs.ino ├── arduivisPD_multipleOutputs │ ├── arduivisPD_multipleOutputs.pd │ └── arduivisPD_multipleOutputs │ │ └── arduivisPD_multipleOutputs.ino └── arduivisPD_output │ ├── arduivisPD_output.pd │ └── arduivisPD_output │ └── arduivisPD_output.ino ├── README.md ├── arduivis.png ├── arduivisJSlogo.png └── projects ├── ControllingLED ├── Arduino │ └── ControllingLED │ │ └── ControllingLED.ino └── Max │ ├── ControllingLED-SpeedTest.maxpat │ └── ControllingLED.maxpat ├── ControllingLEDWithWords ├── ControllingLEDWithWords-v1 │ ├── ControllingLEDWithWords-v1.ino │ └── ControllingLEDWithWords-v1b.ino │ │ └── ControllingLEDWithWords-v1b.ino.ino ├── ControllingLEDWithWords │ └── ControllingLEDWithWords.ino └── Max │ └── ControllingLEDWithWords.maxpat ├── Go ├── arduivis-go-fadeLED.go ├── arduivis-go-model1.go ├── arduivis-go-model4.go ├── arduivis-go-singlePot.go └── arduivis-singlePot.ino ├── MOSFET-Magnet ├── Arduino │ └── MOSFET-Magnet.ino ├── Fritzing │ └── MOSFET-Magnet.fzz └── Max │ └── MOSFET-Magnet.maxpat └── ParsingWords └── ParsingWords └── ParsingWords.ino /JS/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/JS/.DS_Store -------------------------------------------------------------------------------- /JS/arduivis-bpatcher.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 0, 7 | "revision" : 3, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 59.0, 104.0, 640.0, 480.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "", 40 | "boxes" : [ { 41 | "box" : { 42 | "bgmode" : 0, 43 | "border" : 0, 44 | "clickthrough" : 0, 45 | "embed" : 1, 46 | "enablehscroll" : 0, 47 | "enablevscroll" : 0, 48 | "id" : "obj-1", 49 | "lockeddragscroll" : 0, 50 | "maxclass" : "bpatcher", 51 | "name" : "arduivis.maxpat", 52 | "numinlets" : 0, 53 | "numoutlets" : 0, 54 | "offset" : [ 0.0, 0.0 ], 55 | "patcher" : { 56 | "fileversion" : 1, 57 | "appversion" : { 58 | "major" : 8, 59 | "minor" : 0, 60 | "revision" : 3, 61 | "architecture" : "x64", 62 | "modernui" : 1 63 | } 64 | , 65 | "classnamespace" : "box", 66 | "rect" : [ 59.0, 104.0, 486.0, 214.0 ], 67 | "bglocked" : 0, 68 | "openinpresentation" : 0, 69 | "default_fontsize" : 12.0, 70 | "default_fontface" : 0, 71 | "default_fontname" : "Arial", 72 | "gridonopen" : 1, 73 | "gridsize" : [ 15.0, 15.0 ], 74 | "gridsnaponopen" : 1, 75 | "objectsnaponopen" : 1, 76 | "statusbarvisible" : 2, 77 | "toolbarvisible" : 1, 78 | "lefttoolbarpinned" : 0, 79 | "toptoolbarpinned" : 0, 80 | "righttoolbarpinned" : 0, 81 | "bottomtoolbarpinned" : 0, 82 | "toolbars_unpinned_last_save" : 0, 83 | "tallnewobj" : 0, 84 | "boxanimatetime" : 200, 85 | "enablehscroll" : 1, 86 | "enablevscroll" : 1, 87 | "devicewidth" : 0.0, 88 | "description" : "", 89 | "digest" : "", 90 | "tags" : "", 91 | "style" : "", 92 | "subpatcher_template" : "", 93 | "boxes" : [ { 94 | "box" : { 95 | "fontname" : "Avenir Book", 96 | "fontsize" : 12.0, 97 | "id" : "obj-24", 98 | "maxclass" : "comment", 99 | "numinlets" : 1, 100 | "numoutlets" : 0, 101 | "patching_rect" : [ 64.316665999999998, 24.133334999999999, 34.466667000000001, 23.0 ], 102 | "text" : "outs", 103 | "textjustification" : 1 104 | } 105 | 106 | } 107 | , { 108 | "box" : { 109 | "hidden" : 1, 110 | "id" : "obj-7", 111 | "maxclass" : "message", 112 | "numinlets" : 2, 113 | "numoutlets" : 1, 114 | "outlettype" : [ "" ], 115 | "patching_rect" : [ 143.649993999999992, 145.066696000000007, 35.0, 22.0 ], 116 | "text" : "clear" 117 | } 118 | 119 | } 120 | , { 121 | "box" : { 122 | "hidden" : 1, 123 | "id" : "obj-5", 124 | "maxclass" : "button", 125 | "numinlets" : 1, 126 | "numoutlets" : 1, 127 | "outlettype" : [ "bang" ], 128 | "parameter_enable" : 0, 129 | "patching_rect" : [ 143.649993999999992, 122.233315000000005, 15.5, 15.5 ] 130 | } 131 | 132 | } 133 | , { 134 | "box" : { 135 | "hidden" : 1, 136 | "id" : "obj-3", 137 | "maxclass" : "button", 138 | "numinlets" : 1, 139 | "numoutlets" : 1, 140 | "outlettype" : [ "bang" ], 141 | "parameter_enable" : 0, 142 | "patching_rect" : [ 143.649993999999992, 76.566688999999997, 15.5, 15.5 ] 143 | } 144 | 145 | } 146 | , { 147 | "box" : { 148 | "hidden" : 1, 149 | "id" : "obj-1", 150 | "maxclass" : "newobj", 151 | "numinlets" : 2, 152 | "numoutlets" : 1, 153 | "outlettype" : [ "bang" ], 154 | "patching_rect" : [ 143.649993999999992, 95.733315000000005, 54.0, 22.0 ], 155 | "text" : "delay 50" 156 | } 157 | 158 | } 159 | , { 160 | "box" : { 161 | "fontname" : "Avenir Book", 162 | "fontsize" : 24.0, 163 | "id" : "obj-143", 164 | "maxclass" : "comment", 165 | "numinlets" : 1, 166 | "numoutlets" : 0, 167 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 39.0 ], 168 | "text" : "clear", 169 | "textjustification" : 1 170 | } 171 | 172 | } 173 | , { 174 | "box" : { 175 | "fontname" : "Avenir Book", 176 | "fontsize" : 24.0, 177 | "id" : "obj-117", 178 | "maxclass" : "comment", 179 | "numinlets" : 1, 180 | "numoutlets" : 0, 181 | "patching_rect" : [ 127.849997999999999, 3.8, 86.800003000000004, 39.0 ], 182 | "text" : "create", 183 | "textjustification" : 1 184 | } 185 | 186 | } 187 | , { 188 | "box" : { 189 | "fontname" : "Avenir Book", 190 | "fontsize" : 12.0, 191 | "hidden" : 1, 192 | "id" : "obj-116", 193 | "maxclass" : "newobj", 194 | "numinlets" : 2, 195 | "numoutlets" : 1, 196 | "outlettype" : [ "" ], 197 | "patching_rect" : [ 7.458331, 49.566688999999997, 81.324996999999996, 25.0 ], 198 | "text" : "pak 0 0", 199 | "textjustification" : 1 200 | } 201 | 202 | } 203 | , { 204 | "box" : { 205 | "fontname" : "Avenir Book", 206 | "fontsize" : 12.0, 207 | "hidden" : 1, 208 | "id" : "obj-115", 209 | "maxclass" : "newobj", 210 | "numinlets" : 1, 211 | "numoutlets" : 1, 212 | "outlettype" : [ "" ], 213 | "patching_rect" : [ 7.458331, 76.566688999999997, 118.391670000000005, 25.0 ], 214 | "text" : "prepend arduivis", 215 | "textjustification" : 1 216 | } 217 | 218 | } 219 | , { 220 | "box" : { 221 | "fontname" : "Avenir Book", 222 | "fontsize" : 12.0, 223 | "id" : "obj-110", 224 | "maxclass" : "comment", 225 | "numinlets" : 1, 226 | "numoutlets" : 0, 227 | "patching_rect" : [ 2.991664, 24.133334999999999, 24.0, 23.0 ], 228 | "text" : "ins", 229 | "textjustification" : 1 230 | } 231 | 232 | } 233 | , { 234 | "box" : { 235 | "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], 236 | "fontname" : "Avenir Book", 237 | "fontsize" : 24.0, 238 | "id" : "obj-94", 239 | "maxclass" : "comment", 240 | "numinlets" : 1, 241 | "numoutlets" : 0, 242 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 39.0 ], 243 | "text" : "save", 244 | "textjustification" : 1 245 | } 246 | 247 | } 248 | , { 249 | "box" : { 250 | "fontname" : "Avenir Book", 251 | "fontsize" : 24.0, 252 | "id" : "obj-85", 253 | "maxclass" : "comment", 254 | "numinlets" : 1, 255 | "numoutlets" : 0, 256 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 39.0 ], 257 | "text" : "code", 258 | "textjustification" : 1 259 | } 260 | 261 | } 262 | , { 263 | "box" : { 264 | "fontname" : "Avenir Book", 265 | "fontsize" : 12.0, 266 | "hidden" : 1, 267 | "id" : "obj-76", 268 | "maxclass" : "message", 269 | "numinlets" : 2, 270 | "numoutlets" : 1, 271 | "outlettype" : [ "" ], 272 | "patching_rect" : [ 7.458331, 112.733315000000005, 118.391670000000005, 25.0 ], 273 | "text" : "arduivis 3 3", 274 | "textjustification" : 1 275 | } 276 | 277 | } 278 | , { 279 | "box" : { 280 | "fontname" : "Avenir Book", 281 | "fontsize" : 12.0, 282 | "hidden" : 1, 283 | "id" : "obj-73", 284 | "maxclass" : "newobj", 285 | "numinlets" : 1, 286 | "numoutlets" : 2, 287 | "outlettype" : [ "", "" ], 288 | "patching_rect" : [ 7.458331, 145.066696000000007, 118.391670000000005, 25.0 ], 289 | "saved_object_attributes" : { 290 | "filename" : "arduivis.js", 291 | "parameter_enable" : 0 292 | } 293 | , 294 | "text" : "js arduivis.js", 295 | "textjustification" : 1, 296 | "varname" : "js" 297 | } 298 | 299 | } 300 | , { 301 | "box" : { 302 | "fontname" : "Avenir Book", 303 | "fontsize" : 12.0, 304 | "hidden" : 1, 305 | "id" : "obj-72", 306 | "maxclass" : "newobj", 307 | "numinlets" : 1, 308 | "numoutlets" : 3, 309 | "outlettype" : [ "", "bang", "int" ], 310 | "patching_rect" : [ 7.458331, 180.733321999999987, 118.391670000000005, 25.0 ], 311 | "text" : "text", 312 | "textjustification" : 1 313 | } 314 | 315 | } 316 | , { 317 | "box" : { 318 | "background" : 1, 319 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 320 | "fontname" : "Avenir Book", 321 | "fontsize" : 18.0, 322 | "id" : "obj-25", 323 | "maxclass" : "number", 324 | "numinlets" : 1, 325 | "numoutlets" : 2, 326 | "outlettype" : [ "", "bang" ], 327 | "parameter_enable" : 0, 328 | "patching_rect" : [ 69.783332999999999, 6.233334, 53.066665999999998, 33.0 ], 329 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 330 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ] 331 | } 332 | 333 | } 334 | , { 335 | "box" : { 336 | "angle" : 270.0, 337 | "background" : 1, 338 | "border" : 2, 339 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 340 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 341 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 342 | "id" : "obj-26", 343 | "maxclass" : "panel", 344 | "mode" : 1, 345 | "numinlets" : 1, 346 | "numoutlets" : 0, 347 | "patching_rect" : [ 66.283332999999999, 3.8, 59.566665999999998, 39.0 ], 348 | "proportion" : 0.39, 349 | "rounded" : 2 350 | } 351 | 352 | } 353 | , { 354 | "box" : { 355 | "background" : 1, 356 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 357 | "fontname" : "Avenir Book", 358 | "fontsize" : 18.0, 359 | "id" : "obj-18", 360 | "maxclass" : "number", 361 | "numinlets" : 1, 362 | "numoutlets" : 2, 363 | "outlettype" : [ "", "bang" ], 364 | "parameter_enable" : 0, 365 | "patching_rect" : [ 7.458331, 6.233334, 53.066665999999998, 33.0 ], 366 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 367 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ] 368 | } 369 | 370 | } 371 | , { 372 | "box" : { 373 | "angle" : 270.0, 374 | "background" : 1, 375 | "border" : 2, 376 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 377 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 378 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 379 | "id" : "obj-17", 380 | "maxclass" : "panel", 381 | "mode" : 1, 382 | "numinlets" : 1, 383 | "numoutlets" : 0, 384 | "patching_rect" : [ 3.958331, 3.8, 59.566665999999998, 39.0 ], 385 | "proportion" : 0.39, 386 | "rounded" : 2 387 | } 388 | 389 | } 390 | , { 391 | "box" : { 392 | "angle" : 270.0, 393 | "background" : 1, 394 | "border" : 2, 395 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 396 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 397 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 398 | "id" : "obj-11", 399 | "maxclass" : "panel", 400 | "mode" : 1, 401 | "numinlets" : 1, 402 | "numoutlets" : 0, 403 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 38.866669000000002 ], 404 | "proportion" : 0.39, 405 | "rounded" : 2 406 | } 407 | 408 | } 409 | , { 410 | "box" : { 411 | "angle" : 270.0, 412 | "background" : 1, 413 | "border" : 2, 414 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 415 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 416 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 417 | "id" : "obj-10", 418 | "maxclass" : "panel", 419 | "mode" : 1, 420 | "numinlets" : 1, 421 | "numoutlets" : 0, 422 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 38.866669000000002 ], 423 | "proportion" : 0.39, 424 | "rounded" : 2 425 | } 426 | 427 | } 428 | , { 429 | "box" : { 430 | "angle" : 270.0, 431 | "background" : 1, 432 | "border" : 2, 433 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 434 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 435 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 436 | "id" : "obj-9", 437 | "maxclass" : "panel", 438 | "mode" : 1, 439 | "numinlets" : 1, 440 | "numoutlets" : 0, 441 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 38.866669000000002 ], 442 | "proportion" : 0.39, 443 | "rounded" : 2 444 | } 445 | 446 | } 447 | , { 448 | "box" : { 449 | "background" : 1, 450 | "hidden" : 1, 451 | "id" : "obj-146", 452 | "maxclass" : "message", 453 | "numinlets" : 2, 454 | "numoutlets" : 1, 455 | "outlettype" : [ "" ], 456 | "patching_rect" : [ 143.649993999999992, 49.566688999999997, 71.0, 22.0 ], 457 | "text" : "arduivis 0 0", 458 | "textjustification" : 1 459 | } 460 | 461 | } 462 | , { 463 | "box" : { 464 | "background" : 1, 465 | "hidden" : 1, 466 | "id" : "obj-80", 467 | "maxclass" : "message", 468 | "numinlets" : 2, 469 | "numoutlets" : 1, 470 | "outlettype" : [ "" ], 471 | "patching_rect" : [ 312.341675000000009, 7.300001, 73.566665999999998, 22.0 ], 472 | "text" : "write", 473 | "textjustification" : 1 474 | } 475 | 476 | } 477 | , { 478 | "box" : { 479 | "background" : 1, 480 | "handoff" : "", 481 | "id" : "obj-144", 482 | "maxclass" : "ubutton", 483 | "numinlets" : 1, 484 | "numoutlets" : 4, 485 | "outlettype" : [ "bang", "bang", "", "int" ], 486 | "parameter_enable" : 0, 487 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 38.866669000000002 ] 488 | } 489 | 490 | } 491 | , { 492 | "box" : { 493 | "background" : 1, 494 | "handoff" : "", 495 | "id" : "obj-95", 496 | "maxclass" : "ubutton", 497 | "numinlets" : 1, 498 | "numoutlets" : 4, 499 | "outlettype" : [ "bang", "bang", "", "int" ], 500 | "parameter_enable" : 0, 501 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 38.866669000000002 ] 502 | } 503 | 504 | } 505 | , { 506 | "box" : { 507 | "background" : 1, 508 | "handoff" : "", 509 | "id" : "obj-90", 510 | "maxclass" : "ubutton", 511 | "numinlets" : 1, 512 | "numoutlets" : 4, 513 | "outlettype" : [ "bang", "bang", "", "int" ], 514 | "parameter_enable" : 0, 515 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 38.866669000000002 ] 516 | } 517 | 518 | } 519 | , { 520 | "box" : { 521 | "background" : 1, 522 | "handoff" : "", 523 | "id" : "obj-118", 524 | "maxclass" : "ubutton", 525 | "numinlets" : 1, 526 | "numoutlets" : 4, 527 | "outlettype" : [ "bang", "bang", "", "int" ], 528 | "parameter_enable" : 0, 529 | "patching_rect" : [ 127.849997999999999, 3.8, 86.316665999999998, 37.866669000000002 ] 530 | } 531 | 532 | } 533 | , { 534 | "box" : { 535 | "angle" : 270.0, 536 | "background" : 1, 537 | "border" : 2, 538 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 539 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 540 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 541 | "id" : "obj-6", 542 | "maxclass" : "panel", 543 | "mode" : 1, 544 | "numinlets" : 1, 545 | "numoutlets" : 0, 546 | "patching_rect" : [ 127.849997999999999, 3.8, 86.316665999999998, 38.866669000000002 ], 547 | "proportion" : 0.39, 548 | "rounded" : 2 549 | } 550 | 551 | } 552 | , { 553 | "box" : { 554 | "background" : 1, 555 | "hidden" : 1, 556 | "id" : "obj-78", 557 | "maxclass" : "message", 558 | "numinlets" : 2, 559 | "numoutlets" : 1, 560 | "outlettype" : [ "" ], 561 | "patching_rect" : [ 221.316665999999998, 6.800001, 76.983337000000006, 22.0 ], 562 | "text" : "open", 563 | "textjustification" : 1 564 | } 565 | 566 | } 567 | ], 568 | "lines" : [ { 569 | "patchline" : { 570 | "destination" : [ "obj-5", 0 ], 571 | "hidden" : 1, 572 | "source" : [ "obj-1", 0 ] 573 | } 574 | 575 | } 576 | , { 577 | "patchline" : { 578 | "destination" : [ "obj-76", 1 ], 579 | "hidden" : 1, 580 | "midpoints" : [ 16.958331000000001, 106.650002000000001, 116.350001000000006, 106.650002000000001 ], 581 | "source" : [ "obj-115", 0 ] 582 | } 583 | 584 | } 585 | , { 586 | "patchline" : { 587 | "destination" : [ "obj-115", 0 ], 588 | "hidden" : 1, 589 | "source" : [ "obj-116", 0 ] 590 | } 591 | 592 | } 593 | , { 594 | "patchline" : { 595 | "destination" : [ "obj-76", 0 ], 596 | "hidden" : 1, 597 | "midpoints" : [ 137.349997999999999, 106.699989000000002, 16.958331000000001, 106.699989000000002 ], 598 | "source" : [ "obj-118", 0 ] 599 | } 600 | 601 | } 602 | , { 603 | "patchline" : { 604 | "destination" : [ "obj-146", 0 ], 605 | "hidden" : 1, 606 | "source" : [ "obj-144", 0 ] 607 | } 608 | 609 | } 610 | , { 611 | "patchline" : { 612 | "destination" : [ "obj-3", 0 ], 613 | "hidden" : 1, 614 | "order" : 0, 615 | "source" : [ "obj-146", 0 ] 616 | } 617 | 618 | } 619 | , { 620 | "patchline" : { 621 | "destination" : [ "obj-73", 0 ], 622 | "hidden" : 1, 623 | "order" : 1, 624 | "source" : [ "obj-146", 0 ] 625 | } 626 | 627 | } 628 | , { 629 | "patchline" : { 630 | "destination" : [ "obj-116", 0 ], 631 | "hidden" : 1, 632 | "source" : [ "obj-18", 0 ] 633 | } 634 | 635 | } 636 | , { 637 | "patchline" : { 638 | "destination" : [ "obj-116", 1 ], 639 | "hidden" : 1, 640 | "source" : [ "obj-25", 0 ] 641 | } 642 | 643 | } 644 | , { 645 | "patchline" : { 646 | "destination" : [ "obj-1", 0 ], 647 | "hidden" : 1, 648 | "source" : [ "obj-3", 0 ] 649 | } 650 | 651 | } 652 | , { 653 | "patchline" : { 654 | "destination" : [ "obj-7", 0 ], 655 | "hidden" : 1, 656 | "source" : [ "obj-5", 0 ] 657 | } 658 | 659 | } 660 | , { 661 | "patchline" : { 662 | "destination" : [ "obj-72", 0 ], 663 | "hidden" : 1, 664 | "midpoints" : [ 153.149993999999992, 174.0, 16.958331000000001, 174.0 ], 665 | "source" : [ "obj-7", 0 ] 666 | } 667 | 668 | } 669 | , { 670 | "patchline" : { 671 | "destination" : [ "obj-72", 0 ], 672 | "hidden" : 1, 673 | "source" : [ "obj-73", 0 ] 674 | } 675 | 676 | } 677 | , { 678 | "patchline" : { 679 | "destination" : [ "obj-73", 0 ], 680 | "hidden" : 1, 681 | "source" : [ "obj-76", 0 ] 682 | } 683 | 684 | } 685 | , { 686 | "patchline" : { 687 | "destination" : [ "obj-72", 0 ], 688 | "hidden" : 1, 689 | "midpoints" : [ 230.816665999999998, 174.083251999999987, 16.958331000000001, 174.083251999999987 ], 690 | "source" : [ "obj-78", 0 ] 691 | } 692 | 693 | } 694 | , { 695 | "patchline" : { 696 | "destination" : [ "obj-72", 0 ], 697 | "hidden" : 1, 698 | "midpoints" : [ 321.841675000000009, 174.083251999999987, 16.958331000000001, 174.083251999999987 ], 699 | "source" : [ "obj-80", 0 ] 700 | } 701 | 702 | } 703 | , { 704 | "patchline" : { 705 | "destination" : [ "obj-78", 0 ], 706 | "hidden" : 1, 707 | "source" : [ "obj-90", 0 ] 708 | } 709 | 710 | } 711 | , { 712 | "patchline" : { 713 | "destination" : [ "obj-80", 0 ], 714 | "hidden" : 1, 715 | "source" : [ "obj-95", 0 ] 716 | } 717 | 718 | } 719 | ] 720 | } 721 | , 722 | "patching_rect" : [ 3.0, 5.0, 486.0, 47.0 ], 723 | "viewvisibility" : 1 724 | } 725 | 726 | } 727 | ], 728 | "lines" : [ ], 729 | "dependency_cache" : [ { 730 | "name" : "arduivis.js", 731 | "bootpath" : "~/Downloads/arduivis-master/JS", 732 | "patcherrelativepath" : ".", 733 | "type" : "TEXT", 734 | "implicit" : 1 735 | } 736 | ], 737 | "autosave" : 0 738 | } 739 | 740 | } 741 | -------------------------------------------------------------------------------- /JS/arduivis.js: -------------------------------------------------------------------------------- 1 | autowatch = 1; 2 | outlets = 2; 3 | 4 | // global varables and code 5 | var vbox; 6 | var vserial; 7 | var vatoi; 8 | var vsel; 9 | var vx = 200; 10 | var vy = 140; 11 | var count = 0; 12 | 13 | var sliders = new Array(); 14 | var multisliders = new Array(); 15 | var outputbox = new Array(); 16 | 17 | var vrouteport; 18 | var vtclear; 19 | var vbutton; 20 | var vsprintf; 21 | var viter; 22 | var vprependappend; 23 | var vumenu; 24 | var vprependport; 25 | var vserialport; 26 | var vsel; 27 | var vzl; 28 | var vitoa; 29 | var vsym; 30 | var vmettog; 31 | var vmetro; 32 | var vatoi; 33 | var vapp10; 34 | var vpak; 35 | var vunpack; 36 | var vpipe; 37 | var vloadbang; 38 | var vmettogM; 39 | var vmultiSL; 40 | var vupdatemes; 41 | var vcmtupdate; 42 | var vcmtmenu; 43 | var vcmttog; 44 | var vcmtoutput; 45 | var vcmtinput; 46 | 47 | var verticalSpacing = 30; 48 | 49 | var _arduivis = this.patcher; 50 | var owner; 51 | var prev; 52 | 53 | function arduivis(ins, outs) { 54 | owner = this.patcher.box; 55 | prev = 0; 56 | post(ins + " inputs \n"); 57 | post(outs + " outputs \n"); 58 | 59 | var inputs = new Array(); 60 | var outputs = new Array(); 61 | count = count + 1; 62 | 63 | if (count > 1) { 64 | clear(); 65 | outlet(1, "clear"); 66 | } 67 | 68 | for (ii = 0; ii < ins; ii++) { 69 | inputs[ii] = 0; 70 | } 71 | 72 | for (oo = 0; oo < outs; oo++) { 73 | outputs[oo] = 0; 74 | outputbox[oo] = 0; 75 | } 76 | 77 | vinputs = ins; 78 | voutputs = outs; 79 | 80 | if (vinputs == 0 && voutputs == 0) { 81 | 82 | } 83 | 84 | else if (vinputs == 0) { 85 | while (owner) { 86 | prev = owner; 87 | owner = owner.patcher.box; 88 | } 89 | if (prev) { 90 | vcmtupdate = prev.patcher.newobject('comment', 3, verticalSpacing * 4, 200, 12, 'update ports >'); 91 | vrouteport = prev.patcher.newdefault(95, verticalSpacing * 2, 'route', 'port'); 92 | vtclear = prev.patcher.newdefault(95, verticalSpacing * 3, 't', 'clear'); 93 | viter = prev.patcher.newdefault(200, verticalSpacing * 3, 'iter'); 94 | vpipe = prev.patcher.newdefault(200, verticalSpacing * 4, 'pipe', '47'); 95 | vupdatemes = prev.patcher.newobject('message', 95, verticalSpacing * 4, 100, 10, 'update'); 96 | vmessage = prev.patcher.newobject('message', 95, verticalSpacing * 5, 100, 10, 'print'); 97 | vprependappend = prev.patcher.newdefault(200, verticalSpacing * 5, 'prepend', 'append'); 98 | vcmtmenu = prev.patcher.newobject('comment', 100, verticalSpacing * 6, 100, 12, 'select board >'); 99 | vumenu = prev.patcher.newdefault(200, verticalSpacing * 6, 'umenu'); 100 | vmettog = prev.patcher.newdefault(305, verticalSpacing * 6, "toggle"); 101 | vcmttog = prev.patcher.newobject('comment', 335, verticalSpacing * 6, 100, 12, '< start polling'); 102 | vmetro = prev.patcher.newdefault(305, verticalSpacing * 7, "metro", "50"); 103 | vprependport = prev.patcher.newdefault(200, verticalSpacing * 7, 'prepend', 'port'); 104 | vserialport = prev.patcher.newdefault(200, verticalSpacing * 8, 'serial', 'arduivisPort', '9600'); 105 | vsel = prev.patcher.newdefault(200, verticalSpacing * 9, 'sel', '13', '10'); 106 | vzl = prev.patcher.newdefault(200, verticalSpacing * 10, 'zl', 'group', '1000'); 107 | vitoa = prev.patcher.newdefault(200, verticalSpacing * 11, 'itoa'); 108 | vsym = prev.patcher.newdefault(200, verticalSpacing * 12, 'fromsymbol'); 109 | vcmtoutput = prev.patcher.newobject('comment', 310, verticalSpacing * 13, 175, 12, '< output from arduino/to max'); 110 | vunpack = prev.patcher.newdefault(200, verticalSpacing * 13, 'unpack', outputs); 111 | 112 | for (d = 0; d < outs; d++) { 113 | outputbox[d] = prev.patcher.newdefault(200 + (d * 55), verticalSpacing * 14, 'number', 'float'); 114 | } 115 | connectObjects(1); 116 | } 117 | } 118 | else if (voutputs == 0) { 119 | while (owner) { 120 | prev = owner; 121 | owner = owner.patcher.box; 122 | } 123 | if (prev) { 124 | vcmtupdate = prev.patcher.newobject('comment', 3, verticalSpacing * 4, 200, 12, 'update ports >'); 125 | vcmtmenu = prev.patcher.newobject('comment', 100, verticalSpacing * 6, 100, 12, 'select board >'); 126 | vcmttog = prev.patcher.newobject('comment', 335, verticalSpacing * 4, 85, 12, '< start polling'); 127 | vcmtinput = prev.patcher.newobject('comment', 240, verticalSpacing * 2, 175, 12, 'input to arduino/from max >'); 128 | vrouteport = prev.patcher.newdefault(95, verticalSpacing * 2, 'route', 'port'); 129 | vtclear = prev.patcher.newdefault(95, verticalSpacing * 3, 't', 'clear'); 130 | viter = prev.patcher.newdefault(200, verticalSpacing * 3, 'iter'); 131 | vpipe = prev.patcher.newdefault(200, verticalSpacing * 4, 'pipe', '47'); 132 | vmettog = prev.patcher.newdefault(305, verticalSpacing * 4, "toggle"); 133 | vupdatemes = prev.patcher.newobject('message', 95, verticalSpacing * 4, 100, 10, 'update'); 134 | vmessage = prev.patcher.newobject('message', 95, verticalSpacing * 5, 100, 10, 'print'); 135 | vprependappend = prev.patcher.newdefault(200, verticalSpacing * 5, 'prepend', 'append'); 136 | vmetro = prev.patcher.newdefault(305, verticalSpacing * 5, "metro", "50"); 137 | vpak = prev.patcher.newdefault(410, verticalSpacing * 5, 'pak', inputs); 138 | vumenu = prev.patcher.newdefault(200, verticalSpacing * 6, 'umenu'); 139 | vatoi = prev.patcher.newdefault(305, verticalSpacing * 6, 'atoi'); 140 | vprependport = prev.patcher.newdefault(200, verticalSpacing * 7, 'prepend', 'port'); 141 | vapp10 = prev.patcher.newdefault(305, verticalSpacing * 7, 'append', '10'); 142 | vserialport = prev.patcher.newdefault(200, verticalSpacing * 8, 'serial', 'arduivisPort', '9600'); 143 | 144 | for (s = 0; s < ins; s++) { 145 | sliders[s] = prev.patcher.newobject("slider", 410 + (s * 55), verticalSpacing * 2, 40, 77); 146 | } 147 | connectObjects(2); 148 | } 149 | } 150 | 151 | else if (vinputs > 0 && voutputs > 0) { 152 | while (owner) { 153 | prev = owner; 154 | owner = owner.patcher.box; 155 | } 156 | if (prev) { 157 | 158 | vcmtupdate = prev.patcher.newobject('comment', 3, verticalSpacing * 4, 200, 12, 'update ports >'); 159 | vcmtmenu = prev.patcher.newobject('comment', 100, verticalSpacing * 6, 100, 12, 'select board >'); 160 | vcmttog = prev.patcher.newobject('comment', 335, verticalSpacing * 4, 85, 12, '< start polling'); 161 | vcmtinput = prev.patcher.newobject('comment', 240, verticalSpacing * 2, 175, 12, 'input to arduino/from max >'); 162 | vcmtoutput = prev.patcher.newobject('comment', 310, verticalSpacing * 13, 175, 12, '< output from arduino/to max'); 163 | vrouteport = prev.patcher.newdefault(95, verticalSpacing * 2, 'route', 'port'); 164 | vtclear = prev.patcher.newdefault(95, verticalSpacing * 3, 't', 'clear'); 165 | viter = prev.patcher.newdefault(200, verticalSpacing * 3, 'iter'); 166 | vmettog = prev.patcher.newdefault(305, verticalSpacing * 4, "toggle"); 167 | vpipe = prev.patcher.newdefault(200, verticalSpacing * 4, 'pipe', '47'); 168 | vpak = prev.patcher.newdefault(410, verticalSpacing * 5, 'pak', inputs); 169 | vmetro = prev.patcher.newdefault(305, verticalSpacing * 5, "metro", "50"); 170 | vupdatemes = prev.patcher.newobject('message', 95, verticalSpacing * 4, 100, 10, 'update'); 171 | vmessage = prev.patcher.newobject('message', 95, verticalSpacing * 5, 100, 10, 'print'); 172 | vprependappend = prev.patcher.newdefault(200, verticalSpacing * 5, 'prepend', 'append'); 173 | vatoi = prev.patcher.newdefault(305, verticalSpacing * 6, 'atoi'); 174 | vumenu = prev.patcher.newdefault(200, verticalSpacing * 6, 'umenu'); 175 | vapp10 = prev.patcher.newdefault(305, verticalSpacing * 7, 'append', '10'); 176 | vprependport = prev.patcher.newdefault(200, verticalSpacing * 7, 'prepend', 'port'); 177 | vserialport = prev.patcher.newdefault(200, verticalSpacing * 8, 'serial', 'arduivisPort', '9600'); 178 | vsel = prev.patcher.newdefault(200, verticalSpacing * 9, 'sel', '13', '10'); 179 | vzl = prev.patcher.newdefault(200, verticalSpacing * 10, 'zl', 'group', '1000'); 180 | vitoa = prev.patcher.newdefault(200, verticalSpacing * 11, 'itoa'); 181 | vsym = prev.patcher.newdefault(200, verticalSpacing * 12, 'fromsymbol'); 182 | vunpack = prev.patcher.newdefault(200, verticalSpacing * 13, 'unpack', outputs); 183 | 184 | for (s = 0; s < ins; s++) { 185 | sliders[s] = prev.patcher.newobject("slider", 410 + (s * 50), verticalSpacing * 2, 40, 77); 186 | } 187 | 188 | for (d = 0; d < outs; d++) { 189 | outputbox[d] = prev.patcher.newdefault(200 + (d * 55), verticalSpacing * 14, 'number', 'float'); 190 | } 191 | connectObjects(3); 192 | } 193 | } 194 | 195 | createScript(ins, outs); 196 | } 197 | 198 | function connectObjects(type) { 199 | if (type == 1) { 200 | while (owner) { 201 | prev = owner; 202 | owner = owner.patcher.box; 203 | } 204 | if (prev) { 205 | prev.patcher.connect(vserialport, 1, vrouteport, 0); 206 | prev.patcher.connect(vrouteport, 0, viter, 0); 207 | prev.patcher.connect(vrouteport, 0, vtclear, 0); 208 | prev.patcher.connect(vtclear, 0, vumenu, 0); 209 | prev.patcher.connect(vupdatemes, 0, vmessage, 0); 210 | prev.patcher.connect(vmessage, 0, vserialport, 0); 211 | prev.patcher.connect(viter, 0, vpipe, 0); 212 | prev.patcher.connect(vpipe, 0, vprependappend, 0); 213 | prev.patcher.connect(vprependappend, 0, vumenu, 0); 214 | prev.patcher.connect(vumenu, 1, vprependport, 0); 215 | prev.patcher.connect(vprependport, 0, vserialport, 0); 216 | prev.patcher.connect(vserialport, 0, vsel, 0); 217 | prev.patcher.connect(vsel, 0, vzl, 0); 218 | prev.patcher.connect(vsel, 2, vzl, 0); 219 | prev.patcher.connect(vzl, 0, vitoa, 0); 220 | prev.patcher.connect(vitoa, 0, vsym, 0); 221 | prev.patcher.connect(vmettog, 0, vmetro, 0); 222 | prev.patcher.connect(vmetro, 0, vserialport, 0); 223 | prev.patcher.connect(vmetro, 0, vatoi, 0); 224 | prev.patcher.connect(vpak, 0, vatoi, 2); 225 | prev.patcher.connect(vsym, 0, vunpack, 0); 226 | 227 | for (ko = 0; ko < voutputs; ko++) { 228 | prev.patcher.connect(vunpack, ko, outputbox[ko], 0); 229 | } 230 | } 231 | } 232 | if (type == 2) { 233 | while (owner) { 234 | prev = owner; 235 | owner = owner.patcher.box; 236 | } 237 | if (prev) { 238 | prev.patcher.connect(vserialport, 1, vrouteport, 0); 239 | prev.patcher.connect(vrouteport, 0, viter, 0); 240 | prev.patcher.connect(vrouteport, 0, vtclear, 0); 241 | prev.patcher.connect(vtclear, 0, vumenu, 0); 242 | prev.patcher.connect(vupdatemes, 0, vmessage, 0); 243 | prev.patcher.connect(vmessage, 0, vserialport, 0); 244 | prev.patcher.connect(viter, 0, vpipe, 0); 245 | prev.patcher.connect(vpipe, 0, vprependappend, 0); 246 | prev.patcher.connect(vprependappend, 0, vumenu, 0); 247 | prev.patcher.connect(vumenu, 1, vprependport, 0); 248 | prev.patcher.connect(vprependport, 0, vserialport, 0); 249 | prev.patcher.connect(vserialport, 0, vsel, 0); 250 | prev.patcher.connect(vmettog, 0, vmetro, 0); 251 | prev.patcher.connect(vmetro, 0, vatoi, 0); 252 | prev.patcher.connect(vatoi, 0, vapp10, 0); 253 | prev.patcher.connect(vapp10, 0, vserialport, 0); 254 | prev.patcher.connect(vpak, 0, vatoi, 2); 255 | 256 | for (sc = 0; sc < vinputs; sc++) { 257 | prev.patcher.connect(sliders[sc], 0, vpak, sc); 258 | } 259 | } 260 | } 261 | if (type == 3) { 262 | while (owner) { 263 | prev = owner; 264 | owner = owner.patcher.box; 265 | } 266 | if (prev) { 267 | prev.patcher.connect(vserialport, 1, vrouteport, 0); 268 | prev.patcher.connect(vrouteport, 0, viter, 0); 269 | prev.patcher.connect(vrouteport, 0, vtclear, 0); 270 | prev.patcher.connect(vtclear, 0, vumenu, 0); 271 | prev.patcher.connect(vupdatemes, 0, vmessage, 0); 272 | prev.patcher.connect(vmessage, 0, vserialport, 0); 273 | prev.patcher.connect(viter, 0, vpipe, 0); 274 | prev.patcher.connect(vpipe, 0, vprependappend, 0); 275 | prev.patcher.connect(vprependappend, 0, vumenu, 0); 276 | prev.patcher.connect(vumenu, 1, vprependport, 0); 277 | prev.patcher.connect(vprependport, 0, vserialport, 0); 278 | prev.patcher.connect(vserialport, 0, vsel, 0); 279 | prev.patcher.connect(vsel, 0, vzl, 0); 280 | prev.patcher.connect(vsel, 2, vzl, 0); 281 | prev.patcher.connect(vzl, 0, vitoa, 0); 282 | prev.patcher.connect(vitoa, 0, vsym, 0); 283 | prev.patcher.connect(vmettog, 0, vmetro, 0); 284 | prev.patcher.connect(vmetro, 0, vatoi, 0); 285 | prev.patcher.connect(vmetro, 0, vserialport, 0); 286 | prev.patcher.connect(vatoi, 0, vapp10, 0); 287 | prev.patcher.connect(vapp10, 0, vserialport, 0); 288 | prev.patcher.connect(vpak, 0, vatoi, 2); 289 | prev.patcher.connect(vsym, 0, vunpack, 0); 290 | 291 | for (sc = 0; sc < vinputs; sc++) { 292 | prev.patcher.connect(sliders[sc], 0, vpak, sc); 293 | } 294 | for (ko = 0; ko < voutputs; ko++) { 295 | prev.patcher.connect(vunpack, ko, outputbox[ko], 0); 296 | } 297 | } 298 | } 299 | } 300 | 301 | function createScript(scriptIn, scriptOut) { 302 | spacer = '" "'; 303 | outlet(0, "void setup(){" + '\n'); 304 | outlet(0, "Serial.begin(9600);" + '\n' + "}" + '\n'); 305 | outlet(0, "void loop(){" + '\n'); 306 | 307 | for (ii = 0; ii < scriptIn; ii++) { 308 | if (scriptIn !== 0) { 309 | outlet(0, "int ardvFromMax" + ii + " = Serial.parseInt();" + '\n'); 310 | } 311 | } 312 | 313 | for (oo = 0; oo < scriptOut; oo++) { 314 | if (scriptOut !== 0 && oo < scriptOut - 1) { 315 | outlet(0, "Serial.print(ardvFromMax" + oo + ");" + '\n'); 316 | } 317 | else if (oo + 1 == scriptOut) { 318 | outlet(0, "Serial.println(ardvFromMax" + oo + ");" + '\n'); 319 | } 320 | } 321 | outlet(0, "};"); 322 | } 323 | 324 | function clear() { 325 | while (owner) { 326 | prev = owner; 327 | owner = owner.patcher.box; 328 | } 329 | if (prev) { 330 | prev.patcher.remove(vserialport); 331 | prev.patcher.remove(vrouteport); 332 | prev.patcher.remove(vtclear); 333 | prev.patcher.remove(vbutton) 334 | prev.patcher.remove(vmessage); 335 | prev.patcher.remove(viter); 336 | prev.patcher.remove(vpipe); 337 | prev.patcher.remove(vprependappend); 338 | prev.patcher.remove(vumenu); 339 | prev.patcher.remove(vprependport); 340 | prev.patcher.remove(vserialport); 341 | prev.patcher.remove(vsel); 342 | prev.patcher.remove(vsym); 343 | prev.patcher.remove(vunpack); 344 | prev.patcher.remove(vzl); 345 | prev.patcher.remove(vitoa) 346 | prev.patcher.remove(vmettog); 347 | prev.patcher.remove(vmetro); 348 | prev.patcher.remove(vatoi); 349 | prev.patcher.remove(vapp10); 350 | prev.patcher.remove(vpak); 351 | prev.patcher.remove(sliders); 352 | prev.patcher.remove(vupdatemes); 353 | prev.patcher.remove(vcmtoutput); 354 | prev.patcher.remove(vcmtinput); 355 | prev.patcher.remove(vcmttog); 356 | prev.patcher.remove(vcmtmenu); 357 | prev.patcher.remove(vcmtupdate); 358 | 359 | for (ko = 0; ko < voutputs; ko++) { 360 | prev.patcher.remove(outputbox[ko]); 361 | } 362 | 363 | for (j = 0; j < vinputs; j++) { 364 | prev.patcher.remove(sliders[j]); 365 | } 366 | vinputs = 0; 367 | vouputs = 0; 368 | } 369 | } 370 | 371 | function location(x, y) { 372 | vx = x; 373 | vy = y; 374 | if (vbox) { 375 | var width, height; 376 | var r = new Array(); 377 | 378 | width = vbox.rect[2] - vbox.rect[0]; 379 | height = vbox.rect[3] - vbox.rect[1]; 380 | r[0] = x; 381 | r[1] = y; 382 | r[2] = x + width; 383 | r[3] = y + height; 384 | vbox.rect = r; 385 | } 386 | } 387 | 388 | function sizebox(width, height) { 389 | if (vbox) { 390 | var r = new Array(); 391 | r[0] = vbox.rect[0]; 392 | r[1] = vbox.rect[1]; 393 | r[2] = vbox.rect[0] + width; 394 | r[3] = vbox.rect[1] + height; 395 | vbox.rect = r; 396 | } 397 | } 398 | 399 | function hidebox(hidden) { 400 | if (vbox) { 401 | vbox.hidden = hidden; 402 | } 403 | } 404 | 405 | function sendtobox() { 406 | var i; 407 | var a = new Array(); 408 | 409 | if (vbox) { 410 | if (vbox.understands(arguments[0])) { 411 | for (i = 0; i < (arguments.length - 1); i++) 412 | a[i] = arguments[i + 1]; 413 | vbox[arguments[0]](a); 414 | } else if (vbox.understands("sendbox")) { 415 | for (i = 0; i < arguments.length; i++) 416 | a[i] = arguments[i]; 417 | vbox["sendbox"](a); 418 | } else { 419 | post("doesn't understand " + arguments[0] + "\n"); 420 | } 421 | } 422 | } 423 | -------------------------------------------------------------------------------- /JS/arduivis.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 7, 6 | "minor" : 3, 7 | "revision" : 4, 8 | "architecture" : "x86", 9 | "modernui" : 1 10 | } 11 | , 12 | "rect" : [ 59.0, 104.0, 486.0, 214.0 ], 13 | "bglocked" : 0, 14 | "openinpresentation" : 0, 15 | "default_fontsize" : 12.0, 16 | "default_fontface" : 0, 17 | "default_fontname" : "Arial", 18 | "gridonopen" : 1, 19 | "gridsize" : [ 15.0, 15.0 ], 20 | "gridsnaponopen" : 1, 21 | "objectsnaponopen" : 1, 22 | "statusbarvisible" : 2, 23 | "toolbarvisible" : 1, 24 | "lefttoolbarpinned" : 0, 25 | "toptoolbarpinned" : 0, 26 | "righttoolbarpinned" : 0, 27 | "bottomtoolbarpinned" : 0, 28 | "toolbars_unpinned_last_save" : 0, 29 | "tallnewobj" : 0, 30 | "boxanimatetime" : 200, 31 | "enablehscroll" : 1, 32 | "enablevscroll" : 1, 33 | "devicewidth" : 0.0, 34 | "description" : "", 35 | "digest" : "", 36 | "tags" : "", 37 | "style" : "", 38 | "subpatcher_template" : "", 39 | "boxes" : [ { 40 | "box" : { 41 | "fontname" : "Avenir Book", 42 | "fontsize" : 12.0, 43 | "id" : "obj-24", 44 | "maxclass" : "comment", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 64.316666, 24.133335, 34.466667, 23.0 ], 48 | "style" : "", 49 | "text" : "outs", 50 | "textjustification" : 1 51 | } 52 | 53 | } 54 | , { 55 | "box" : { 56 | "hidden" : 1, 57 | "id" : "obj-7", 58 | "maxclass" : "message", 59 | "numinlets" : 2, 60 | "numoutlets" : 1, 61 | "outlettype" : [ "" ], 62 | "patching_rect" : [ 143.649994, 145.066696, 35.0, 22.0 ], 63 | "style" : "", 64 | "text" : "clear" 65 | } 66 | 67 | } 68 | , { 69 | "box" : { 70 | "hidden" : 1, 71 | "id" : "obj-5", 72 | "maxclass" : "button", 73 | "numinlets" : 1, 74 | "numoutlets" : 1, 75 | "outlettype" : [ "bang" ], 76 | "patching_rect" : [ 143.649994, 122.233315, 15.5, 15.5 ], 77 | "style" : "" 78 | } 79 | 80 | } 81 | , { 82 | "box" : { 83 | "hidden" : 1, 84 | "id" : "obj-3", 85 | "maxclass" : "button", 86 | "numinlets" : 1, 87 | "numoutlets" : 1, 88 | "outlettype" : [ "bang" ], 89 | "patching_rect" : [ 143.649994, 76.566689, 15.5, 15.5 ], 90 | "style" : "" 91 | } 92 | 93 | } 94 | , { 95 | "box" : { 96 | "hidden" : 1, 97 | "id" : "obj-1", 98 | "maxclass" : "newobj", 99 | "numinlets" : 2, 100 | "numoutlets" : 1, 101 | "outlettype" : [ "bang" ], 102 | "patching_rect" : [ 143.649994, 95.733315, 54.0, 22.0 ], 103 | "style" : "", 104 | "text" : "delay 50" 105 | } 106 | 107 | } 108 | , { 109 | "box" : { 110 | "fontname" : "Avenir Book", 111 | "fontsize" : 24.0, 112 | "id" : "obj-143", 113 | "maxclass" : "comment", 114 | "numinlets" : 1, 115 | "numoutlets" : 0, 116 | "patching_rect" : [ 395.283325, 3.8, 86.316666, 39.0 ], 117 | "style" : "", 118 | "text" : "clear", 119 | "textjustification" : 1 120 | } 121 | 122 | } 123 | , { 124 | "box" : { 125 | "fontname" : "Avenir Book", 126 | "fontsize" : 24.0, 127 | "id" : "obj-117", 128 | "maxclass" : "comment", 129 | "numinlets" : 1, 130 | "numoutlets" : 0, 131 | "patching_rect" : [ 127.849998, 3.8, 86.800003, 39.0 ], 132 | "style" : "", 133 | "text" : "create", 134 | "textjustification" : 1 135 | } 136 | 137 | } 138 | , { 139 | "box" : { 140 | "fontname" : "Avenir Book", 141 | "fontsize" : 12.0, 142 | "hidden" : 1, 143 | "id" : "obj-116", 144 | "maxclass" : "newobj", 145 | "numinlets" : 2, 146 | "numoutlets" : 1, 147 | "outlettype" : [ "" ], 148 | "patching_rect" : [ 7.458331, 49.566689, 81.324997, 25.0 ], 149 | "style" : "", 150 | "text" : "pak 0 0", 151 | "textjustification" : 1 152 | } 153 | 154 | } 155 | , { 156 | "box" : { 157 | "fontname" : "Avenir Book", 158 | "fontsize" : 12.0, 159 | "hidden" : 1, 160 | "id" : "obj-115", 161 | "maxclass" : "newobj", 162 | "numinlets" : 1, 163 | "numoutlets" : 1, 164 | "outlettype" : [ "" ], 165 | "patching_rect" : [ 7.458331, 76.566689, 118.39167, 25.0 ], 166 | "style" : "", 167 | "text" : "prepend arduivis", 168 | "textjustification" : 1 169 | } 170 | 171 | } 172 | , { 173 | "box" : { 174 | "fontname" : "Avenir Book", 175 | "fontsize" : 12.0, 176 | "id" : "obj-110", 177 | "maxclass" : "comment", 178 | "numinlets" : 1, 179 | "numoutlets" : 0, 180 | "patching_rect" : [ 2.991664, 24.133335, 24.0, 23.0 ], 181 | "style" : "", 182 | "text" : "ins", 183 | "textjustification" : 1 184 | } 185 | 186 | } 187 | , { 188 | "box" : { 189 | "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], 190 | "fontname" : "Avenir Book", 191 | "fontsize" : 24.0, 192 | "id" : "obj-94", 193 | "maxclass" : "comment", 194 | "numinlets" : 1, 195 | "numoutlets" : 0, 196 | "patching_rect" : [ 305.966675, 3.8, 86.316666, 39.0 ], 197 | "style" : "", 198 | "text" : "save", 199 | "textjustification" : 1 200 | } 201 | 202 | } 203 | , { 204 | "box" : { 205 | "fontname" : "Avenir Book", 206 | "fontsize" : 24.0, 207 | "id" : "obj-85", 208 | "maxclass" : "comment", 209 | "numinlets" : 1, 210 | "numoutlets" : 0, 211 | "patching_rect" : [ 216.649994, 3.8, 86.316666, 39.0 ], 212 | "style" : "", 213 | "text" : "code", 214 | "textjustification" : 1 215 | } 216 | 217 | } 218 | , { 219 | "box" : { 220 | "fontname" : "Avenir Book", 221 | "fontsize" : 12.0, 222 | "hidden" : 1, 223 | "id" : "obj-76", 224 | "maxclass" : "message", 225 | "numinlets" : 2, 226 | "numoutlets" : 1, 227 | "outlettype" : [ "" ], 228 | "patching_rect" : [ 7.458331, 112.733315, 118.39167, 25.0 ], 229 | "style" : "", 230 | "text" : "arduivis 3 3", 231 | "textjustification" : 1 232 | } 233 | 234 | } 235 | , { 236 | "box" : { 237 | "fontname" : "Avenir Book", 238 | "fontsize" : 12.0, 239 | "hidden" : 1, 240 | "id" : "obj-73", 241 | "maxclass" : "newobj", 242 | "numinlets" : 1, 243 | "numoutlets" : 2, 244 | "outlettype" : [ "", "" ], 245 | "patching_rect" : [ 7.458331, 145.066696, 118.39167, 25.0 ], 246 | "saved_object_attributes" : { 247 | "filename" : "arduivis.js", 248 | "parameter_enable" : 0 249 | } 250 | , 251 | "style" : "", 252 | "text" : "js arduivis.js", 253 | "textjustification" : 1, 254 | "varname" : "js" 255 | } 256 | 257 | } 258 | , { 259 | "box" : { 260 | "fontname" : "Avenir Book", 261 | "fontsize" : 12.0, 262 | "hidden" : 1, 263 | "id" : "obj-72", 264 | "maxclass" : "newobj", 265 | "numinlets" : 1, 266 | "numoutlets" : 3, 267 | "outlettype" : [ "", "bang", "int" ], 268 | "patching_rect" : [ 7.458331, 180.733322, 118.39167, 25.0 ], 269 | "style" : "", 270 | "text" : "text", 271 | "textjustification" : 1 272 | } 273 | 274 | } 275 | , { 276 | "box" : { 277 | "background" : 1, 278 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 279 | "fontname" : "Avenir Book", 280 | "fontsize" : 18.0, 281 | "id" : "obj-25", 282 | "maxclass" : "number", 283 | "numinlets" : 1, 284 | "numoutlets" : 2, 285 | "outlettype" : [ "", "bang" ], 286 | "parameter_enable" : 0, 287 | "patching_rect" : [ 69.783333, 6.233334, 53.066666, 33.0 ], 288 | "style" : "", 289 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 290 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ] 291 | } 292 | 293 | } 294 | , { 295 | "box" : { 296 | "angle" : 270.0, 297 | "background" : 1, 298 | "border" : 2, 299 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 300 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 301 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 302 | "id" : "obj-26", 303 | "maxclass" : "panel", 304 | "mode" : 1, 305 | "numinlets" : 1, 306 | "numoutlets" : 0, 307 | "patching_rect" : [ 66.283333, 3.8, 59.566666, 39.0 ], 308 | "proportion" : 0.39, 309 | "rounded" : 2, 310 | "style" : "" 311 | } 312 | 313 | } 314 | , { 315 | "box" : { 316 | "background" : 1, 317 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 318 | "fontname" : "Avenir Book", 319 | "fontsize" : 18.0, 320 | "id" : "obj-18", 321 | "maxclass" : "number", 322 | "numinlets" : 1, 323 | "numoutlets" : 2, 324 | "outlettype" : [ "", "bang" ], 325 | "parameter_enable" : 0, 326 | "patching_rect" : [ 7.458331, 6.233334, 53.066666, 33.0 ], 327 | "style" : "", 328 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 329 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ] 330 | } 331 | 332 | } 333 | , { 334 | "box" : { 335 | "angle" : 270.0, 336 | "background" : 1, 337 | "border" : 2, 338 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 339 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 340 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 341 | "id" : "obj-17", 342 | "maxclass" : "panel", 343 | "mode" : 1, 344 | "numinlets" : 1, 345 | "numoutlets" : 0, 346 | "patching_rect" : [ 3.958331, 3.8, 59.566666, 39.0 ], 347 | "proportion" : 0.39, 348 | "rounded" : 2, 349 | "style" : "" 350 | } 351 | 352 | } 353 | , { 354 | "box" : { 355 | "angle" : 270.0, 356 | "background" : 1, 357 | "border" : 2, 358 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 359 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 360 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 361 | "id" : "obj-11", 362 | "maxclass" : "panel", 363 | "mode" : 1, 364 | "numinlets" : 1, 365 | "numoutlets" : 0, 366 | "patching_rect" : [ 395.283325, 3.8, 86.316666, 38.866669 ], 367 | "proportion" : 0.39, 368 | "rounded" : 2, 369 | "style" : "" 370 | } 371 | 372 | } 373 | , { 374 | "box" : { 375 | "angle" : 270.0, 376 | "background" : 1, 377 | "border" : 2, 378 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 379 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 380 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 381 | "id" : "obj-10", 382 | "maxclass" : "panel", 383 | "mode" : 1, 384 | "numinlets" : 1, 385 | "numoutlets" : 0, 386 | "patching_rect" : [ 305.966675, 3.8, 86.316666, 38.866669 ], 387 | "proportion" : 0.39, 388 | "rounded" : 2, 389 | "style" : "" 390 | } 391 | 392 | } 393 | , { 394 | "box" : { 395 | "angle" : 270.0, 396 | "background" : 1, 397 | "border" : 2, 398 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 399 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 400 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 401 | "id" : "obj-9", 402 | "maxclass" : "panel", 403 | "mode" : 1, 404 | "numinlets" : 1, 405 | "numoutlets" : 0, 406 | "patching_rect" : [ 216.649994, 3.8, 86.316666, 38.866669 ], 407 | "proportion" : 0.39, 408 | "rounded" : 2, 409 | "style" : "" 410 | } 411 | 412 | } 413 | , { 414 | "box" : { 415 | "background" : 1, 416 | "hidden" : 1, 417 | "id" : "obj-146", 418 | "maxclass" : "message", 419 | "numinlets" : 2, 420 | "numoutlets" : 1, 421 | "outlettype" : [ "" ], 422 | "patching_rect" : [ 143.649994, 49.566689, 71.0, 22.0 ], 423 | "style" : "", 424 | "text" : "arduivis 0 0", 425 | "textjustification" : 1 426 | } 427 | 428 | } 429 | , { 430 | "box" : { 431 | "background" : 1, 432 | "hidden" : 1, 433 | "id" : "obj-80", 434 | "maxclass" : "message", 435 | "numinlets" : 2, 436 | "numoutlets" : 1, 437 | "outlettype" : [ "" ], 438 | "patching_rect" : [ 312.341675, 7.300001, 73.566666, 22.0 ], 439 | "style" : "", 440 | "text" : "write", 441 | "textjustification" : 1 442 | } 443 | 444 | } 445 | , { 446 | "box" : { 447 | "background" : 1, 448 | "handoff" : "", 449 | "id" : "obj-144", 450 | "maxclass" : "ubutton", 451 | "numinlets" : 1, 452 | "numoutlets" : 4, 453 | "outlettype" : [ "bang", "bang", "", "int" ], 454 | "patching_rect" : [ 395.283325, 3.8, 86.316666, 38.866669 ] 455 | } 456 | 457 | } 458 | , { 459 | "box" : { 460 | "background" : 1, 461 | "handoff" : "", 462 | "id" : "obj-95", 463 | "maxclass" : "ubutton", 464 | "numinlets" : 1, 465 | "numoutlets" : 4, 466 | "outlettype" : [ "bang", "bang", "", "int" ], 467 | "patching_rect" : [ 305.966675, 3.8, 86.316666, 38.866669 ] 468 | } 469 | 470 | } 471 | , { 472 | "box" : { 473 | "background" : 1, 474 | "handoff" : "", 475 | "id" : "obj-90", 476 | "maxclass" : "ubutton", 477 | "numinlets" : 1, 478 | "numoutlets" : 4, 479 | "outlettype" : [ "bang", "bang", "", "int" ], 480 | "patching_rect" : [ 216.649994, 3.8, 86.316666, 38.866669 ] 481 | } 482 | 483 | } 484 | , { 485 | "box" : { 486 | "background" : 1, 487 | "handoff" : "", 488 | "id" : "obj-118", 489 | "maxclass" : "ubutton", 490 | "numinlets" : 1, 491 | "numoutlets" : 4, 492 | "outlettype" : [ "bang", "bang", "", "int" ], 493 | "patching_rect" : [ 127.849998, 3.8, 86.316666, 37.866669 ] 494 | } 495 | 496 | } 497 | , { 498 | "box" : { 499 | "angle" : 270.0, 500 | "background" : 1, 501 | "border" : 2, 502 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 503 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 504 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 505 | "id" : "obj-6", 506 | "maxclass" : "panel", 507 | "mode" : 1, 508 | "numinlets" : 1, 509 | "numoutlets" : 0, 510 | "patching_rect" : [ 127.849998, 3.8, 86.316666, 38.866669 ], 511 | "proportion" : 0.39, 512 | "rounded" : 2, 513 | "style" : "" 514 | } 515 | 516 | } 517 | , { 518 | "box" : { 519 | "background" : 1, 520 | "hidden" : 1, 521 | "id" : "obj-78", 522 | "maxclass" : "message", 523 | "numinlets" : 2, 524 | "numoutlets" : 1, 525 | "outlettype" : [ "" ], 526 | "patching_rect" : [ 221.316666, 6.800001, 76.983337, 22.0 ], 527 | "style" : "", 528 | "text" : "open", 529 | "textjustification" : 1 530 | } 531 | 532 | } 533 | ], 534 | "lines" : [ { 535 | "patchline" : { 536 | "destination" : [ "obj-5", 0 ], 537 | "hidden" : 1, 538 | "source" : [ "obj-1", 0 ] 539 | } 540 | 541 | } 542 | , { 543 | "patchline" : { 544 | "destination" : [ "obj-76", 1 ], 545 | "hidden" : 1, 546 | "midpoints" : [ 16.958332, 106.650002, 116.349998, 106.650002 ], 547 | "source" : [ "obj-115", 0 ] 548 | } 549 | 550 | } 551 | , { 552 | "patchline" : { 553 | "destination" : [ "obj-115", 0 ], 554 | "hidden" : 1, 555 | "source" : [ "obj-116", 0 ] 556 | } 557 | 558 | } 559 | , { 560 | "patchline" : { 561 | "destination" : [ "obj-76", 0 ], 562 | "hidden" : 1, 563 | "midpoints" : [ 137.350006, 106.699989, 16.958332, 106.699989 ], 564 | "source" : [ "obj-118", 0 ] 565 | } 566 | 567 | } 568 | , { 569 | "patchline" : { 570 | "destination" : [ "obj-146", 0 ], 571 | "hidden" : 1, 572 | "source" : [ "obj-144", 0 ] 573 | } 574 | 575 | } 576 | , { 577 | "patchline" : { 578 | "destination" : [ "obj-3", 0 ], 579 | "hidden" : 1, 580 | "order" : 0, 581 | "source" : [ "obj-146", 0 ] 582 | } 583 | 584 | } 585 | , { 586 | "patchline" : { 587 | "destination" : [ "obj-73", 0 ], 588 | "hidden" : 1, 589 | "order" : 1, 590 | "source" : [ "obj-146", 0 ] 591 | } 592 | 593 | } 594 | , { 595 | "patchline" : { 596 | "destination" : [ "obj-116", 0 ], 597 | "hidden" : 1, 598 | "source" : [ "obj-18", 0 ] 599 | } 600 | 601 | } 602 | , { 603 | "patchline" : { 604 | "destination" : [ "obj-116", 1 ], 605 | "hidden" : 1, 606 | "source" : [ "obj-25", 0 ] 607 | } 608 | 609 | } 610 | , { 611 | "patchline" : { 612 | "destination" : [ "obj-1", 0 ], 613 | "hidden" : 1, 614 | "source" : [ "obj-3", 0 ] 615 | } 616 | 617 | } 618 | , { 619 | "patchline" : { 620 | "destination" : [ "obj-7", 0 ], 621 | "hidden" : 1, 622 | "source" : [ "obj-5", 0 ] 623 | } 624 | 625 | } 626 | , { 627 | "patchline" : { 628 | "destination" : [ "obj-72", 0 ], 629 | "hidden" : 1, 630 | "midpoints" : [ 153.149994, 174.0, 16.958332, 174.0 ], 631 | "source" : [ "obj-7", 0 ] 632 | } 633 | 634 | } 635 | , { 636 | "patchline" : { 637 | "destination" : [ "obj-72", 0 ], 638 | "hidden" : 1, 639 | "source" : [ "obj-73", 0 ] 640 | } 641 | 642 | } 643 | , { 644 | "patchline" : { 645 | "destination" : [ "obj-73", 0 ], 646 | "hidden" : 1, 647 | "source" : [ "obj-76", 0 ] 648 | } 649 | 650 | } 651 | , { 652 | "patchline" : { 653 | "destination" : [ "obj-72", 0 ], 654 | "hidden" : 1, 655 | "midpoints" : [ 230.816666, 174.083252, 16.958332, 174.083252 ], 656 | "source" : [ "obj-78", 0 ] 657 | } 658 | 659 | } 660 | , { 661 | "patchline" : { 662 | "destination" : [ "obj-72", 0 ], 663 | "hidden" : 1, 664 | "midpoints" : [ 321.841675, 174.083252, 16.958332, 174.083252 ], 665 | "source" : [ "obj-80", 0 ] 666 | } 667 | 668 | } 669 | , { 670 | "patchline" : { 671 | "destination" : [ "obj-78", 0 ], 672 | "hidden" : 1, 673 | "source" : [ "obj-90", 0 ] 674 | } 675 | 676 | } 677 | , { 678 | "patchline" : { 679 | "destination" : [ "obj-80", 0 ], 680 | "hidden" : 1, 681 | "source" : [ "obj-95", 0 ] 682 | } 683 | 684 | } 685 | ], 686 | "dependency_cache" : [ { 687 | "name" : "arduivis.js", 688 | "bootpath" : "~/Desktop/arduivis/JS", 689 | "patcherrelativepath" : ".", 690 | "type" : "TEXT", 691 | "implicit" : 1 692 | } 693 | ], 694 | "autosave" : 0 695 | } 696 | 697 | } 698 | -------------------------------------------------------------------------------- /JS/arduivis.maxsnip: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "boxes" : [ { 4 | "box" : { 5 | "maxclass" : "bpatcher", 6 | "viewvisibility" : 1, 7 | "offset" : [ 0.0, 0.0 ], 8 | "lockeddragscroll" : 0, 9 | "clickthrough" : 0, 10 | "enablehscroll" : 0, 11 | "enablevscroll" : 0, 12 | "bgmode" : 0, 13 | "border" : 0, 14 | "name" : "arduivis.maxpat", 15 | "numoutlets" : 0, 16 | "id" : "obj-1", 17 | "patching_rect" : [ 10.0, 10.0, 486.0, 47.0 ], 18 | "numinlets" : 0, 19 | "embed" : 1, 20 | "patcher" : { 21 | "fileversion" : 1, 22 | "appversion" : { 23 | "major" : 8, 24 | "minor" : 0, 25 | "revision" : 3, 26 | "architecture" : "x64", 27 | "modernui" : 1 28 | } 29 | , 30 | "classnamespace" : "box", 31 | "rect" : [ 59.0, 104.0, 486.0, 214.0 ], 32 | "bglocked" : 0, 33 | "openinpresentation" : 0, 34 | "default_fontsize" : 12.0, 35 | "default_fontface" : 0, 36 | "default_fontname" : "Arial", 37 | "gridonopen" : 1, 38 | "gridsize" : [ 15.0, 15.0 ], 39 | "gridsnaponopen" : 1, 40 | "objectsnaponopen" : 1, 41 | "statusbarvisible" : 2, 42 | "toolbarvisible" : 1, 43 | "lefttoolbarpinned" : 0, 44 | "toptoolbarpinned" : 0, 45 | "righttoolbarpinned" : 0, 46 | "bottomtoolbarpinned" : 0, 47 | "toolbars_unpinned_last_save" : 0, 48 | "tallnewobj" : 0, 49 | "boxanimatetime" : 200, 50 | "enablehscroll" : 1, 51 | "enablevscroll" : 1, 52 | "devicewidth" : 0.0, 53 | "description" : "", 54 | "digest" : "", 55 | "tags" : "", 56 | "style" : "", 57 | "subpatcher_template" : "", 58 | "boxes" : [ { 59 | "box" : { 60 | "maxclass" : "comment", 61 | "text" : "outs", 62 | "numoutlets" : 0, 63 | "textjustification" : 1, 64 | "id" : "obj-24", 65 | "fontsize" : 12.0, 66 | "fontname" : "Avenir Book", 67 | "patching_rect" : [ 64.316665999999998, 24.133334999999999, 34.466667000000001, 23.0 ], 68 | "numinlets" : 1 69 | } 70 | 71 | } 72 | , { 73 | "box" : { 74 | "maxclass" : "message", 75 | "text" : "clear", 76 | "numoutlets" : 1, 77 | "id" : "obj-7", 78 | "outlettype" : [ "" ], 79 | "patching_rect" : [ 143.649993999999992, 145.066696000000007, 35.0, 22.0 ], 80 | "hidden" : 1, 81 | "numinlets" : 2 82 | } 83 | 84 | } 85 | , { 86 | "box" : { 87 | "maxclass" : "button", 88 | "numoutlets" : 1, 89 | "id" : "obj-5", 90 | "parameter_enable" : 0, 91 | "outlettype" : [ "bang" ], 92 | "patching_rect" : [ 143.649993999999992, 122.233315000000005, 15.5, 15.5 ], 93 | "hidden" : 1, 94 | "numinlets" : 1 95 | } 96 | 97 | } 98 | , { 99 | "box" : { 100 | "maxclass" : "button", 101 | "numoutlets" : 1, 102 | "id" : "obj-3", 103 | "parameter_enable" : 0, 104 | "outlettype" : [ "bang" ], 105 | "patching_rect" : [ 143.649993999999992, 76.566688999999997, 15.5, 15.5 ], 106 | "hidden" : 1, 107 | "numinlets" : 1 108 | } 109 | 110 | } 111 | , { 112 | "box" : { 113 | "maxclass" : "newobj", 114 | "text" : "delay 50", 115 | "numoutlets" : 1, 116 | "id" : "obj-1", 117 | "outlettype" : [ "bang" ], 118 | "patching_rect" : [ 143.649993999999992, 95.733315000000005, 54.0, 22.0 ], 119 | "hidden" : 1, 120 | "numinlets" : 2 121 | } 122 | 123 | } 124 | , { 125 | "box" : { 126 | "maxclass" : "comment", 127 | "text" : "clear", 128 | "numoutlets" : 0, 129 | "textjustification" : 1, 130 | "id" : "obj-143", 131 | "fontsize" : 24.0, 132 | "fontname" : "Avenir Book", 133 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 39.0 ], 134 | "numinlets" : 1 135 | } 136 | 137 | } 138 | , { 139 | "box" : { 140 | "maxclass" : "comment", 141 | "text" : "create", 142 | "numoutlets" : 0, 143 | "textjustification" : 1, 144 | "id" : "obj-117", 145 | "fontsize" : 24.0, 146 | "fontname" : "Avenir Book", 147 | "patching_rect" : [ 127.849997999999999, 3.8, 86.800003000000004, 39.0 ], 148 | "numinlets" : 1 149 | } 150 | 151 | } 152 | , { 153 | "box" : { 154 | "maxclass" : "newobj", 155 | "text" : "pak 0 0", 156 | "numoutlets" : 1, 157 | "textjustification" : 1, 158 | "id" : "obj-116", 159 | "outlettype" : [ "" ], 160 | "fontsize" : 12.0, 161 | "fontname" : "Avenir Book", 162 | "patching_rect" : [ 7.458331, 49.566688999999997, 81.324996999999996, 25.0 ], 163 | "hidden" : 1, 164 | "numinlets" : 2 165 | } 166 | 167 | } 168 | , { 169 | "box" : { 170 | "maxclass" : "newobj", 171 | "text" : "prepend arduivis", 172 | "numoutlets" : 1, 173 | "textjustification" : 1, 174 | "id" : "obj-115", 175 | "outlettype" : [ "" ], 176 | "fontsize" : 12.0, 177 | "fontname" : "Avenir Book", 178 | "patching_rect" : [ 7.458331, 76.566688999999997, 118.391670000000005, 25.0 ], 179 | "hidden" : 1, 180 | "numinlets" : 1 181 | } 182 | 183 | } 184 | , { 185 | "box" : { 186 | "maxclass" : "comment", 187 | "text" : "ins", 188 | "numoutlets" : 0, 189 | "textjustification" : 1, 190 | "id" : "obj-110", 191 | "fontsize" : 12.0, 192 | "fontname" : "Avenir Book", 193 | "patching_rect" : [ 2.991664, 24.133334999999999, 24.0, 23.0 ], 194 | "numinlets" : 1 195 | } 196 | 197 | } 198 | , { 199 | "box" : { 200 | "maxclass" : "comment", 201 | "text" : "save", 202 | "numoutlets" : 0, 203 | "textjustification" : 1, 204 | "id" : "obj-94", 205 | "fontsize" : 24.0, 206 | "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], 207 | "fontname" : "Avenir Book", 208 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 39.0 ], 209 | "numinlets" : 1 210 | } 211 | 212 | } 213 | , { 214 | "box" : { 215 | "maxclass" : "comment", 216 | "text" : "code", 217 | "numoutlets" : 0, 218 | "textjustification" : 1, 219 | "id" : "obj-85", 220 | "fontsize" : 24.0, 221 | "fontname" : "Avenir Book", 222 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 39.0 ], 223 | "numinlets" : 1 224 | } 225 | 226 | } 227 | , { 228 | "box" : { 229 | "maxclass" : "message", 230 | "text" : "arduivis 3 3", 231 | "numoutlets" : 1, 232 | "textjustification" : 1, 233 | "id" : "obj-76", 234 | "outlettype" : [ "" ], 235 | "fontsize" : 12.0, 236 | "fontname" : "Avenir Book", 237 | "patching_rect" : [ 7.458331, 112.733315000000005, 118.391670000000005, 25.0 ], 238 | "hidden" : 1, 239 | "numinlets" : 2 240 | } 241 | 242 | } 243 | , { 244 | "box" : { 245 | "maxclass" : "newobj", 246 | "varname" : "js", 247 | "text" : "js arduivis.js", 248 | "numoutlets" : 2, 249 | "textjustification" : 1, 250 | "id" : "obj-73", 251 | "outlettype" : [ "", "" ], 252 | "fontsize" : 12.0, 253 | "fontname" : "Avenir Book", 254 | "patching_rect" : [ 7.458331, 145.066696000000007, 118.391670000000005, 25.0 ], 255 | "hidden" : 1, 256 | "numinlets" : 1, 257 | "saved_object_attributes" : { 258 | "filename" : "arduivis.js", 259 | "parameter_enable" : 0 260 | } 261 | 262 | } 263 | 264 | } 265 | , { 266 | "box" : { 267 | "maxclass" : "newobj", 268 | "text" : "text", 269 | "numoutlets" : 3, 270 | "textjustification" : 1, 271 | "id" : "obj-72", 272 | "outlettype" : [ "", "bang", "int" ], 273 | "fontsize" : 12.0, 274 | "fontname" : "Avenir Book", 275 | "patching_rect" : [ 7.458331, 180.733321999999987, 118.391670000000005, 25.0 ], 276 | "hidden" : 1, 277 | "numinlets" : 1 278 | } 279 | 280 | } 281 | , { 282 | "box" : { 283 | "maxclass" : "number", 284 | "numoutlets" : 2, 285 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 286 | "id" : "obj-25", 287 | "parameter_enable" : 0, 288 | "outlettype" : [ "", "bang" ], 289 | "fontsize" : 18.0, 290 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 291 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ], 292 | "fontname" : "Avenir Book", 293 | "patching_rect" : [ 69.783332999999999, 6.233334, 53.066665999999998, 33.0 ], 294 | "numinlets" : 1, 295 | "background" : 1 296 | } 297 | 298 | } 299 | , { 300 | "box" : { 301 | "maxclass" : "panel", 302 | "border" : 2, 303 | "numoutlets" : 0, 304 | "id" : "obj-26", 305 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 306 | "patching_rect" : [ 66.283332999999999, 3.8, 59.566665999999998, 39.0 ], 307 | "numinlets" : 1, 308 | "rounded" : 2, 309 | "background" : 1, 310 | "mode" : 1, 311 | "angle" : 270.0, 312 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 313 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 314 | "proportion" : 0.39 315 | } 316 | 317 | } 318 | , { 319 | "box" : { 320 | "maxclass" : "number", 321 | "numoutlets" : 2, 322 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 323 | "id" : "obj-18", 324 | "parameter_enable" : 0, 325 | "outlettype" : [ "", "bang" ], 326 | "fontsize" : 18.0, 327 | "bgcolor" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 328 | "tricolor" : [ 0.368627, 0.192157, 0.482353, 1.0 ], 329 | "fontname" : "Avenir Book", 330 | "patching_rect" : [ 7.458331, 6.233334, 53.066665999999998, 33.0 ], 331 | "numinlets" : 1, 332 | "background" : 1 333 | } 334 | 335 | } 336 | , { 337 | "box" : { 338 | "maxclass" : "panel", 339 | "border" : 2, 340 | "numoutlets" : 0, 341 | "id" : "obj-17", 342 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 343 | "patching_rect" : [ 3.958331, 3.8, 59.566665999999998, 39.0 ], 344 | "numinlets" : 1, 345 | "rounded" : 2, 346 | "background" : 1, 347 | "mode" : 1, 348 | "angle" : 270.0, 349 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 350 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 351 | "proportion" : 0.39 352 | } 353 | 354 | } 355 | , { 356 | "box" : { 357 | "maxclass" : "panel", 358 | "border" : 2, 359 | "numoutlets" : 0, 360 | "id" : "obj-11", 361 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 362 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 38.866669000000002 ], 363 | "numinlets" : 1, 364 | "rounded" : 2, 365 | "background" : 1, 366 | "mode" : 1, 367 | "angle" : 270.0, 368 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 369 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 370 | "proportion" : 0.39 371 | } 372 | 373 | } 374 | , { 375 | "box" : { 376 | "maxclass" : "panel", 377 | "border" : 2, 378 | "numoutlets" : 0, 379 | "id" : "obj-10", 380 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 381 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 38.866669000000002 ], 382 | "numinlets" : 1, 383 | "rounded" : 2, 384 | "background" : 1, 385 | "mode" : 1, 386 | "angle" : 270.0, 387 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 388 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 389 | "proportion" : 0.39 390 | } 391 | 392 | } 393 | , { 394 | "box" : { 395 | "maxclass" : "panel", 396 | "border" : 2, 397 | "numoutlets" : 0, 398 | "id" : "obj-9", 399 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 400 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 38.866669000000002 ], 401 | "numinlets" : 1, 402 | "rounded" : 2, 403 | "background" : 1, 404 | "mode" : 1, 405 | "angle" : 270.0, 406 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 407 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 408 | "proportion" : 0.39 409 | } 410 | 411 | } 412 | , { 413 | "box" : { 414 | "maxclass" : "message", 415 | "text" : "arduivis 0 0", 416 | "numoutlets" : 1, 417 | "textjustification" : 1, 418 | "id" : "obj-146", 419 | "outlettype" : [ "" ], 420 | "patching_rect" : [ 143.649993999999992, 49.566688999999997, 71.0, 22.0 ], 421 | "hidden" : 1, 422 | "numinlets" : 2, 423 | "background" : 1 424 | } 425 | 426 | } 427 | , { 428 | "box" : { 429 | "maxclass" : "message", 430 | "text" : "write", 431 | "numoutlets" : 1, 432 | "textjustification" : 1, 433 | "id" : "obj-80", 434 | "outlettype" : [ "" ], 435 | "patching_rect" : [ 312.341675000000009, 7.300001, 73.566665999999998, 22.0 ], 436 | "hidden" : 1, 437 | "numinlets" : 2, 438 | "background" : 1 439 | } 440 | 441 | } 442 | , { 443 | "box" : { 444 | "maxclass" : "ubutton", 445 | "numoutlets" : 4, 446 | "id" : "obj-144", 447 | "parameter_enable" : 0, 448 | "outlettype" : [ "bang", "bang", "", "int" ], 449 | "handoff" : "", 450 | "patching_rect" : [ 395.283324999999991, 3.8, 86.316665999999998, 38.866669000000002 ], 451 | "numinlets" : 1, 452 | "background" : 1 453 | } 454 | 455 | } 456 | , { 457 | "box" : { 458 | "maxclass" : "ubutton", 459 | "numoutlets" : 4, 460 | "id" : "obj-95", 461 | "parameter_enable" : 0, 462 | "outlettype" : [ "bang", "bang", "", "int" ], 463 | "handoff" : "", 464 | "patching_rect" : [ 305.966675000000009, 3.8, 86.316665999999998, 38.866669000000002 ], 465 | "numinlets" : 1, 466 | "background" : 1 467 | } 468 | 469 | } 470 | , { 471 | "box" : { 472 | "maxclass" : "ubutton", 473 | "numoutlets" : 4, 474 | "id" : "obj-90", 475 | "parameter_enable" : 0, 476 | "outlettype" : [ "bang", "bang", "", "int" ], 477 | "handoff" : "", 478 | "patching_rect" : [ 216.649993999999992, 3.8, 86.316665999999998, 38.866669000000002 ], 479 | "numinlets" : 1, 480 | "background" : 1 481 | } 482 | 483 | } 484 | , { 485 | "box" : { 486 | "maxclass" : "ubutton", 487 | "numoutlets" : 4, 488 | "id" : "obj-118", 489 | "parameter_enable" : 0, 490 | "outlettype" : [ "bang", "bang", "", "int" ], 491 | "handoff" : "", 492 | "patching_rect" : [ 127.849997999999999, 3.8, 86.316665999999998, 37.866669000000002 ], 493 | "numinlets" : 1, 494 | "background" : 1 495 | } 496 | 497 | } 498 | , { 499 | "box" : { 500 | "maxclass" : "panel", 501 | "border" : 2, 502 | "numoutlets" : 0, 503 | "id" : "obj-6", 504 | "bordercolor" : [ 0.0, 0.0, 0.0, 1.0 ], 505 | "patching_rect" : [ 127.849997999999999, 3.8, 86.316665999999998, 38.866669000000002 ], 506 | "numinlets" : 1, 507 | "rounded" : 2, 508 | "background" : 1, 509 | "mode" : 1, 510 | "angle" : 270.0, 511 | "grad1" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 512 | "grad2" : [ 0.996078, 0.996078, 0.996078, 1.0 ], 513 | "proportion" : 0.39 514 | } 515 | 516 | } 517 | , { 518 | "box" : { 519 | "maxclass" : "message", 520 | "text" : "open", 521 | "numoutlets" : 1, 522 | "textjustification" : 1, 523 | "id" : "obj-78", 524 | "outlettype" : [ "" ], 525 | "patching_rect" : [ 221.316665999999998, 6.800001, 76.983337000000006, 22.0 ], 526 | "hidden" : 1, 527 | "numinlets" : 2, 528 | "background" : 1 529 | } 530 | 531 | } 532 | ], 533 | "lines" : [ { 534 | "patchline" : { 535 | "source" : [ "obj-95", 0 ], 536 | "destination" : [ "obj-80", 0 ], 537 | "hidden" : 1 538 | } 539 | 540 | } 541 | , { 542 | "patchline" : { 543 | "source" : [ "obj-90", 0 ], 544 | "destination" : [ "obj-78", 0 ], 545 | "hidden" : 1 546 | } 547 | 548 | } 549 | , { 550 | "patchline" : { 551 | "source" : [ "obj-80", 0 ], 552 | "destination" : [ "obj-72", 0 ], 553 | "hidden" : 1, 554 | "midpoints" : [ 321.841675000000009, 174.083251999999987, 16.958331000000001, 174.083251999999987 ] 555 | } 556 | 557 | } 558 | , { 559 | "patchline" : { 560 | "source" : [ "obj-78", 0 ], 561 | "destination" : [ "obj-72", 0 ], 562 | "hidden" : 1, 563 | "midpoints" : [ 230.816665999999998, 174.083251999999987, 16.958331000000001, 174.083251999999987 ] 564 | } 565 | 566 | } 567 | , { 568 | "patchline" : { 569 | "source" : [ "obj-76", 0 ], 570 | "destination" : [ "obj-73", 0 ], 571 | "hidden" : 1 572 | } 573 | 574 | } 575 | , { 576 | "patchline" : { 577 | "source" : [ "obj-73", 0 ], 578 | "destination" : [ "obj-72", 0 ], 579 | "hidden" : 1 580 | } 581 | 582 | } 583 | , { 584 | "patchline" : { 585 | "source" : [ "obj-7", 0 ], 586 | "destination" : [ "obj-72", 0 ], 587 | "hidden" : 1, 588 | "midpoints" : [ 153.149993999999992, 174.0, 16.958331000000001, 174.0 ] 589 | } 590 | 591 | } 592 | , { 593 | "patchline" : { 594 | "source" : [ "obj-5", 0 ], 595 | "destination" : [ "obj-7", 0 ], 596 | "hidden" : 1 597 | } 598 | 599 | } 600 | , { 601 | "patchline" : { 602 | "source" : [ "obj-3", 0 ], 603 | "destination" : [ "obj-1", 0 ], 604 | "hidden" : 1 605 | } 606 | 607 | } 608 | , { 609 | "patchline" : { 610 | "source" : [ "obj-25", 0 ], 611 | "destination" : [ "obj-116", 1 ], 612 | "hidden" : 1 613 | } 614 | 615 | } 616 | , { 617 | "patchline" : { 618 | "source" : [ "obj-18", 0 ], 619 | "destination" : [ "obj-116", 0 ], 620 | "hidden" : 1 621 | } 622 | 623 | } 624 | , { 625 | "patchline" : { 626 | "source" : [ "obj-146", 0 ], 627 | "destination" : [ "obj-73", 0 ], 628 | "hidden" : 1, 629 | "order" : 1 630 | } 631 | 632 | } 633 | , { 634 | "patchline" : { 635 | "source" : [ "obj-146", 0 ], 636 | "destination" : [ "obj-3", 0 ], 637 | "hidden" : 1, 638 | "order" : 0 639 | } 640 | 641 | } 642 | , { 643 | "patchline" : { 644 | "source" : [ "obj-144", 0 ], 645 | "destination" : [ "obj-146", 0 ], 646 | "hidden" : 1 647 | } 648 | 649 | } 650 | , { 651 | "patchline" : { 652 | "source" : [ "obj-118", 0 ], 653 | "destination" : [ "obj-76", 0 ], 654 | "hidden" : 1, 655 | "midpoints" : [ 137.349997999999999, 106.699989000000002, 16.958331000000001, 106.699989000000002 ] 656 | } 657 | 658 | } 659 | , { 660 | "patchline" : { 661 | "source" : [ "obj-116", 0 ], 662 | "destination" : [ "obj-115", 0 ], 663 | "hidden" : 1 664 | } 665 | 666 | } 667 | , { 668 | "patchline" : { 669 | "source" : [ "obj-115", 0 ], 670 | "destination" : [ "obj-76", 1 ], 671 | "hidden" : 1, 672 | "midpoints" : [ 16.958331000000001, 106.650002000000001, 116.350001000000006, 106.650002000000001 ] 673 | } 674 | 675 | } 676 | , { 677 | "patchline" : { 678 | "source" : [ "obj-1", 0 ], 679 | "destination" : [ "obj-5", 0 ], 680 | "hidden" : 1 681 | } 682 | 683 | } 684 | ] 685 | } 686 | 687 | } 688 | 689 | } 690 | ], 691 | "appversion" : { 692 | "major" : 8, 693 | "minor" : 0, 694 | "revision" : 3, 695 | "architecture" : "x64", 696 | "modernui" : 1 697 | } 698 | , 699 | "classnamespace" : "box", 700 | "description" : "486 x 47, containing 1 object", 701 | "tags" : "", 702 | "snippetinfo" : { 703 | "name" : "arduivis", 704 | "objects" : "jpatcher", 705 | "tags" : "", 706 | "description" : "486 x 47, containing 1 object", 707 | "image" : "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" 708 | } 709 | 710 | } 711 | 712 | } 713 | -------------------------------------------------------------------------------- /JS/info/arduivis-multiple-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/JS/info/arduivis-multiple-1.png -------------------------------------------------------------------------------- /JS/info/arduivis-multiple-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/JS/info/arduivis-multiple-2.png -------------------------------------------------------------------------------- /JS/info/arduivis-single-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/JS/info/arduivis-single-1.png -------------------------------------------------------------------------------- /JS/info/arduivis-single-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/JS/info/arduivis-single-2.png -------------------------------------------------------------------------------- /JS/info/arduivisJS-safety.js: -------------------------------------------------------------------------------- 1 | autowatch=1; 2 | outlets=2; 3 | 4 | // global varables and code 5 | var vbox; 6 | var vserial; 7 | var vatoi; 8 | var vsel; 9 | var vx=200; 10 | var vy=140; 11 | var count=0; 12 | 13 | var sliders = new Array(); 14 | var multisliders = new Array(); 15 | var outputbox = new Array(); 16 | 17 | var vrouteport; 18 | var vtclear; 19 | var vbutton; 20 | var vsprintf; 21 | var viter; 22 | var vprependappend; 23 | var vumenu; 24 | var vprependport; 25 | var vserialport; 26 | var vsel; 27 | var vzl; 28 | var vitoa; 29 | var vsym; 30 | var vmettog; 31 | var vmetro; 32 | var vatoi; 33 | var vapp10; 34 | var vpak; 35 | var vunpack; 36 | var vpipe; 37 | var vloadbang; 38 | var vmettogM; 39 | var vmultiSL; 40 | var vupdatemes; 41 | var vcmtupdate; 42 | var vcmtmenu; 43 | var vcmttog; 44 | var vcmtoutput; 45 | var vcmtinput; 46 | 47 | var verticalSpacing=30; 48 | 49 | var _arduivis = this.patcher; 50 | 51 | function arduivis(ins, outs){ 52 | 53 | post(ins+" inputs \n"); 54 | post(outs+" outputs \n"); 55 | 56 | var inputs = new Array(); 57 | var outputs = new Array(); 58 | 59 | 60 | count = count +1; 61 | post(count); 62 | 63 | if(count > 1){ 64 | clear(); 65 | outlet(1, "clear"); 66 | } 67 | 68 | for(ii=0;ii'); 88 | vrouteport = _arduivis.newdefault(95, verticalSpacing*2, 'route', 'port'); 89 | vtclear = _arduivis.newdefault(95, verticalSpacing*3, 't', 'clear'); 90 | viter = _arduivis.newdefault(200, verticalSpacing*3, 'iter'); 91 | vpipe = _arduivis.newdefault(200, verticalSpacing*4, 'pipe', '47'); 92 | vupdatemes = _arduivis.newobject('message', 95, verticalSpacing*4, 100, 10, 'update'); 93 | vmessage = _arduivis.newobject('message', 95, verticalSpacing*5, 100, 10, 'print'); 94 | vprependappend = _arduivis.newdefault(200, verticalSpacing*5, 'prepend', 'append'); 95 | vcmtmenu = _arduivis.newobject('comment', 100, verticalSpacing*6, 100, 12, 'select board >'); 96 | vumenu = _arduivis.newdefault(200, verticalSpacing*6, 'umenu'); 97 | 98 | vmettog = _arduivis.newdefault(305, verticalSpacing*6, "toggle"); 99 | vcmttog = _arduivis.newobject('comment', 335, verticalSpacing*6, 100, 12, '< start polling'); 100 | vmetro = _arduivis.newdefault(305, verticalSpacing*7, "metro", "50"); 101 | vprependport = _arduivis.newdefault(200, verticalSpacing*7, 'prepend', 'port'); 102 | vserialport = _arduivis.newdefault(200, verticalSpacing*8, 'serial', 'arduivisPort', '9600'); 103 | vsel = _arduivis.newdefault(200, verticalSpacing*9, 'sel', '13', '10'); 104 | vzl = _arduivis.newdefault(200, verticalSpacing*10, 'zl', 'group', '1000'); 105 | vitoa = _arduivis.newdefault(200, verticalSpacing*11, 'itoa'); 106 | vsym = _arduivis.newdefault(200, verticalSpacing*12, 'fromsymbol'); 107 | vcmtoutput = _arduivis.newobject('comment', 310, verticalSpacing*13, 175, 12, '< output from arduino/to max'); 108 | vunpack = _arduivis.newdefault(200, verticalSpacing*13, 'unpack', outputs); 109 | 110 | for(d=0;d'); 120 | vcmtmenu = _arduivis.newobject('comment', 100, verticalSpacing*6, 100, 12, 'select board >'); 121 | vcmttog = _arduivis.newobject('comment', 335, verticalSpacing*4, 85, 12, '< start polling'); 122 | vcmtinput = _arduivis.newobject('comment', 240, verticalSpacing*2, 175, 12, 'input to arduino/from max >'); 123 | 124 | 125 | vrouteport = _arduivis.newdefault(95, verticalSpacing*2, 'route', 'port'); 126 | vtclear = _arduivis.newdefault(95, verticalSpacing*3, 't', 'clear'); 127 | viter = _arduivis.newdefault(200, verticalSpacing*3, 'iter'); 128 | vpipe = _arduivis.newdefault(200, verticalSpacing*4, 'pipe', '47'); 129 | vmettog = _arduivis.newdefault(305, verticalSpacing*4, "toggle"); 130 | vupdatemes = _arduivis.newobject('message', 95, verticalSpacing*4, 100, 10, 'update'); 131 | vmessage = _arduivis.newobject('message', 95, verticalSpacing*5, 100, 10, 'print'); 132 | vprependappend = _arduivis.newdefault(200, verticalSpacing*5, 'prepend', 'append'); 133 | vmetro = _arduivis.newdefault(305, verticalSpacing*5, "metro", "50"); 134 | vpak = _arduivis.newdefault(410, verticalSpacing*5,'pak', inputs); 135 | vumenu = _arduivis.newdefault(200, verticalSpacing*6, 'umenu'); 136 | vatoi = _arduivis.newdefault(305, verticalSpacing*6, 'atoi'); 137 | vprependport = _arduivis.newdefault(200, verticalSpacing*7, 'prepend', 'port'); 138 | vapp10 = _arduivis.newdefault(305, verticalSpacing*7, 'append', '10'); 139 | 140 | vserialport = _arduivis.newdefault(200, verticalSpacing*8, 'serial', 'arduivisPort', '9600'); 141 | 142 | for(s=0;s 0 && voutputs > 0){ 150 | 151 | vcmtupdate = _arduivis.newobject('comment', 3, verticalSpacing*4, 200, 12, 'update ports >'); 152 | vcmtmenu = _arduivis.newobject('comment', 100, verticalSpacing*6, 100, 12, 'select board >'); 153 | vcmttog = _arduivis.newobject('comment', 335, verticalSpacing*4, 85, 12, '< start polling'); 154 | vcmtinput = _arduivis.newobject('comment', 240, verticalSpacing*2, 175, 12, 'input to arduino/from max >'); 155 | vcmtoutput = _arduivis.newobject('comment', 310, verticalSpacing*13, 175, 12, '< output from arduino/to max'); 156 | 157 | // inputs 158 | vrouteport = _arduivis.newdefault(95, verticalSpacing*2, 'route', 'port'); 159 | vtclear = _arduivis.newdefault(95, verticalSpacing*3, 't', 'clear'); 160 | viter = _arduivis.newdefault(200, verticalSpacing*3, 'iter'); 161 | vmettog = _arduivis.newdefault(305, verticalSpacing*4, "toggle"); 162 | 163 | vpipe = _arduivis.newdefault(200, verticalSpacing*4, 'pipe', '47'); 164 | vpak = _arduivis.newdefault(410, verticalSpacing*5,'pak', inputs); 165 | vmetro = _arduivis.newdefault(305, verticalSpacing*5, "metro", "50"); 166 | vupdatemes = _arduivis.newobject('message', 95, verticalSpacing*4, 100, 10, 'update'); 167 | vmessage = _arduivis.newobject('message', 95, verticalSpacing*5, 100, 10, 'print'); 168 | vprependappend = _arduivis.newdefault(200, verticalSpacing*5, 'prepend', 'append'); 169 | vatoi = _arduivis.newdefault(305, verticalSpacing*6, 'atoi'); 170 | vumenu = _arduivis.newdefault(200, verticalSpacing*6, 'umenu'); 171 | 172 | vapp10 = _arduivis.newdefault(305, verticalSpacing*7, 'append', '10'); 173 | 174 | vprependport = _arduivis.newdefault(200, verticalSpacing*7, 'prepend', 'port'); 175 | // vmessage = _arduivis.newobject('message', 95, verticalSpacing*7, 100, 10, 'print'); 176 | 177 | 178 | vserialport = _arduivis.newdefault(200, verticalSpacing*8, 'serial', 'arduivisPort', '9600'); 179 | vsel = _arduivis.newdefault(200, verticalSpacing*9, 'sel', '13', '10'); 180 | vzl = _arduivis.newdefault(200, verticalSpacing*10, 'zl', 'group', '1000'); 181 | vitoa = _arduivis.newdefault(200, verticalSpacing*11, 'itoa'); 182 | vsym = _arduivis.newdefault(200, verticalSpacing*12, 'fromsymbol'); 183 | vunpack = _arduivis.newdefault(200, verticalSpacing*13, 'unpack', outputs); 184 | 185 | for(s=0;s=0; lp--) // Create decremental loop 53 | { 54 | // Deremental loop values to LED 55 | // Controls PWM fade 56 | analogWrite(3,lp); 57 | 58 | // Decremental loop values to serial buffer 59 | // [serial] object 60 | // to MaxMSP, from Arduino 61 | Serial.println(lp); 62 | 63 | delay(10); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Max/model2_input/arduivis_MaxMSP_model2_input/arduivis_MaxMSP_model2_input.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - MaxMSP ~~~~~~~ 4 | ~~~~~~~~ model#2: input ~~~~~~~~~ 5 | 6 | MaxMSP: arduivis_Max7_model2_input.maxpat 7 | 8 | This is an example of how to read a slider from 9 | MaxMSP and write the values to a PWM LED connected 10 | to an Arduino. 11 | 12 | This code is in the public domain 13 | 14 | written by Christopher Konopka 15 | http://cskonopka.github.io/arduivis/ 16 | http://christopherkonopka.com/ 17 | 18 | */ 19 | 20 | void setup() 21 | { 22 | // Create/open serial port 23 | Serial.begin(9600); 24 | 25 | // Define LED mode 26 | // PWM LED 27 | pinMode(13, OUTPUT); 28 | } 29 | 30 | void loop() 31 | { 32 | 33 | // Slider from MaxMSP 34 | int maxmspSlider1, maxmspSlider2, maxmspSlider3; 35 | 36 | // Parse incoming MaxMSP slider values 37 | // from MaxMSP, to Arduino 38 | maxmspSlider1 = Serial.parseInt(); 39 | maxmspSlider2 = Serial.parseInt(); 40 | maxmspSlider3 = Serial.parseInt(); 41 | 42 | // Write parsed values to LEDs 43 | // Fading LED 44 | // from MaxMSP, to Arduino 45 | // analogWrite(13, maxmspSlider); 46 | Serial.print(maxmspSlider1); 47 | Serial.print(" "); 48 | Serial.print(maxmspSlider2); 49 | Serial.print(" "); 50 | Serial.println(maxmspSlider3); 51 | 52 | } 53 | -------------------------------------------------------------------------------- /Max/model3_feedback/arduivis_Max7_model3_feedback/arduivis_Max7_model3_feedback.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - MaxMSP ~~~~~~~ 4 | ~~~~~~~~ model#3: feedback ~~~~~~~~~ 5 | 6 | MaxMSP: arduivis_Max7_model3_feedback.maxpat 7 | 8 | This is an example of a feedback loop that 9 | simultaneously sends information from the 10 | Arduino (output), through aprogramming 11 | language, and back to the Arduino (input). 12 | 13 | This code is in the public domain 14 | 15 | written by Christopher Konopka 16 | http://cskonopka.github.io/arduivis/ 17 | http://christopherkonopka.com/ 18 | 19 | */ 20 | 21 | void setup() 22 | { 23 | // Create/open serial port 24 | Serial.begin(9600); 25 | 26 | // Define LED mode 27 | // PWM LED 28 | pinMode(3, OUTPUT); 29 | } 30 | 31 | void loop() 32 | { 33 | 34 | // Slider from MaxMSP 35 | int maxmspSlider; 36 | 37 | // Feedback input from MaxMSP 38 | int feedbackInput; 39 | 40 | // Parse incoming MaxMSP slider values 41 | // from MaxMSP, to Arduino 42 | maxmspSlider = Serial.parseInt(); 43 | 44 | // MaxMSP Slider values to serial buffer 45 | // [serial] object 46 | // to MaxMSP, from Arduino 47 | Serial.print(maxmspSlider); 48 | Serial.print(" "); 49 | 50 | // Feedback Input 51 | // From MaxMSP 52 | feedbackInput = Serial.parseInt(); 53 | 54 | // Write parsed feedback values to LEDs 55 | // Fading LED 56 | // from MaxMSP, to Arduino 57 | analogWrite(3, feedbackInput); 58 | 59 | // MaxMSP feedback values to serial buffer 60 | // [serial] object 61 | // to MaxMSP, from Arduino 62 | Serial.println(feedbackInput); 63 | } 64 | -------------------------------------------------------------------------------- /Max/model4_multipleOutputs/arduivis_Max7_model4_multipleOutputs/arduivis_Max7_model4_multipleOutputs.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - MaxMSP ~~~~~~~~ 4 | ~~~~~ model#4: multiple outputs ~~~~~ 5 | 6 | MaxMSP: arduivis_Max7_model4_multipleOutputs.maxpat 7 | 8 | This is an example of how to use a loop to write 9 | several streams of data to MaxMSP, from an Arduino. 10 | A fading LED is used to provide visual feedback for 11 | this process. 12 | 13 | This code is in the public domain 14 | 15 | written by Christopher Konopka 16 | http://cskonopka.github.io/arduivis/ 17 | http://christopherkonopka.com/ 18 | 19 | */ 20 | 21 | void setup() 22 | { 23 | // Create/open serial port 24 | Serial.begin(9600); 25 | 26 | // Define LED mode 27 | // PWM LED 28 | pinMode(3, OUTPUT); 29 | pinMode(5, OUTPUT); 30 | pinMode(6, OUTPUT); 31 | pinMode(9, OUTPUT); 32 | } 33 | 34 | void loop() 35 | { 36 | // Loop variables 37 | int lp; 38 | int startIncrement = 0; 39 | int incrementLoopRange = 255; 40 | int startDecrement = 255; 41 | int decrementLoopRange = 0; 42 | 43 | 44 | // Loop Function 45 | lp = loopSystem(startIncrement, incrementLoopRange, startDecrement, decrementLoopRange); 46 | 47 | } 48 | 49 | int loopSystem(int startIncrement, int incrementLoopRange, int startDecrement, int decrementLoopRange) 50 | { 51 | int lp; 52 | 53 | // Loop #1 54 | // Incremental Loop 55 | for(lp = startIncrement; lp < incrementLoopRange; lp++) 56 | { 57 | // Incremental loop values to LED 58 | // Controls fade of 4 LEDs 59 | analogWrite(3, lp); 60 | analogWrite(5, lp); 61 | analogWrite(6, lp); 62 | analogWrite(9, lp); 63 | 64 | // Incremental loop values to serial buffer 65 | // [serial] object 66 | // to MaxMSP, from Arduino 67 | Serial.print(lp); 68 | Serial.print(" "); 69 | Serial.print(lp); 70 | Serial.print(" "); 71 | Serial.print(lp); 72 | Serial.print(" "); 73 | Serial.println(lp); 74 | 75 | delay(10); 76 | } 77 | 78 | // Loop #2 79 | // Decremental Loop 80 | for(lp = startDecrement; lp > decrementLoopRange; lp--) 81 | { 82 | // Deremental loop values to LED 83 | // Controls fade of 4 LEDs 84 | analogWrite(3, lp); 85 | analogWrite(5, lp); 86 | analogWrite(6, lp); 87 | analogWrite(9, lp); 88 | 89 | // Decremental loop values to serial buffer 90 | // [serial] object 91 | // to MaxMSP, from Arduino 92 | Serial.print(lp); 93 | Serial.print(" "); 94 | Serial.print(lp); 95 | Serial.print(" "); 96 | Serial.print(lp); 97 | Serial.print(" "); 98 | Serial.println(lp); 99 | 100 | delay(10); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Max/model5_multipleInputs/arduivis_Max7_model5_multipleInputs/arduivis_Max7_model5_multipleInputs.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~~~ arduivis - MaxMSP ~~~~~~~~ 4 | ~~~~~ model#5: multiple inputs ~~~~~ 5 | 6 | MaxMSP: arduivis_Max7_model5_multipleInputs.maxpat 7 | 8 | This is an example of how to send a multiple streams 9 | of data from MaxMSP, to an Arduino. 10 | 11 | This code is in the public domain 12 | 13 | written by Christopher Konopka 14 | http://cskonopka.github.io/arduivis/ 15 | http://christopherkonopka.com/ 16 | 17 | */ 18 | 19 | void setup() 20 | { 21 | // Create/open serial port 22 | Serial.begin(9600); 23 | 24 | // Define LED mode 25 | // PWM LED 26 | pinMode(3, OUTPUT); 27 | pinMode(5, OUTPUT); 28 | pinMode(6, OUTPUT); 29 | pinMode(9, OUTPUT); 30 | } 31 | 32 | void loop() 33 | { 34 | // Sliders from MaxMSP 35 | int maxmspSlider1, maxmspSlider2, maxmspSlider3, maxmspSlider4; 36 | 37 | // Parse incoming MaxMSP slider values 38 | // from MaxMSP, to Arduino 39 | maxmspSlider1 = Serial.parseInt(); 40 | maxmspSlider2 = Serial.parseInt(); 41 | maxmspSlider3 = Serial.parseInt(); 42 | maxmspSlider4 = Serial.parseInt(); 43 | 44 | // Write parsed values to LEDs 45 | // Fading LED 46 | // from MaxMSP, to Arduino 47 | analogWrite(3, maxmspSlider1); 48 | analogWrite(5, maxmspSlider2); 49 | analogWrite(6, maxmspSlider3); 50 | analogWrite(9, maxmspSlider4); 51 | 52 | // Print output of slider to serial buffer 53 | // This is mainly for debugging 54 | Serial.print(maxmspSlider1); 55 | Serial.print(" "); 56 | Serial.print(maxmspSlider2); 57 | Serial.print(" "); 58 | Serial.print(maxmspSlider3); 59 | Serial.print(" "); 60 | Serial.println(maxmspSlider4); 61 | } 62 | -------------------------------------------------------------------------------- /Max/model6_multipleFeedbacks/arduivis_Max7_model6_multipleFeedbacks/arduivis_Max7_model6_multipleFeedbacks.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - MaxMSP ~~~~~~~ 4 | ~~~~ model#6: multiple feedbacks ~~~ 5 | 6 | MaxMSP: arduivis_Max7_model6_multipleFeedbacks.maxpat 7 | 8 | This is an example of to read sliders from MaxMSP. 9 | An Arduino reads and parses this data, sending 10 | it from the Arduino and back into MaxmSP. This 11 | feedback data is then sent back to the Arduino 12 | from MaxMSP, controlling the PWM of a LED. 13 | This is done with several streams of data in 14 | this example. 15 | 16 | This code is in the public domain 17 | 18 | written by Christopher Konopka 19 | http://cskonopka.github.io/arduivis/ 20 | http://christopherkonopka.com/ 21 | 22 | */ 23 | 24 | void setup() 25 | { 26 | // Create/open serial port 27 | Serial.begin(9600); 28 | 29 | // Define LED mode 30 | // PWM LED 31 | pinMode(3, OUTPUT); 32 | pinMode(5, OUTPUT); 33 | pinMode(6, OUTPUT); 34 | pinMode(9, OUTPUT); 35 | } 36 | 37 | void loop() 38 | { 39 | // Sliders from MaxMSP 40 | int maxmspSlider1, maxmspSlider2, maxmspSlider3, maxmspSlider4; 41 | 42 | // Feedback from MaxMSP (original output from Arduino) 43 | int feedbackFromMaxMSP1, feedbackFromMaxMSP2, feedbackFromMaxMSP3, feedbackFromMaxMSP4; 44 | 45 | // Parse incoming MaxMSP slider values 46 | // from MaxMSP, to Arduino 47 | maxmspSlider1 = Serial.parseInt(); 48 | maxmspSlider2 = Serial.parseInt(); 49 | maxmspSlider3 = Serial.parseInt(); 50 | maxmspSlider4 = Serial.parseInt(); 51 | 52 | // Write parsed slider values to serial buffer 53 | // [comport] object 54 | // to MaxMSP, from Arduino 55 | Serial.print(maxmspSlider1); 56 | Serial.print(" "); 57 | Serial.print(maxmspSlider2); 58 | Serial.print(" "); 59 | Serial.print(maxmspSlider3); 60 | Serial.print(" "); 61 | Serial.println(maxmspSlider4); 62 | 63 | // Parse incoming MaxMSP (feedback) values 64 | // from MaxMSP (feedback), to Arduino 65 | feedbackFromMaxMSP1 = Serial.parseInt(); 66 | feedbackFromMaxMSP2 = Serial.parseInt(); 67 | feedbackFromMaxMSP3 = Serial.parseInt(); 68 | feedbackFromMaxMSP4 = Serial.parseInt(); 69 | 70 | // Write parsed values to LEDs 71 | // Fading LED 72 | // from MaxMSP (feedback), to Arduino 73 | analogWrite(3, feedbackFromMaxMSP1); 74 | analogWrite(5, feedbackFromMaxMSP2); 75 | analogWrite(6, feedbackFromMaxMSP3); 76 | analogWrite(9, feedbackFromMaxMSP4); 77 | 78 | delay(2); 79 | } 80 | -------------------------------------------------------------------------------- /Max/project_adafruit-matrix/arduivis_max_adafruitmatrix/arduivis_max_adafruitmatrix.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This code is in the public domain 4 | 5 | written by Christopher Konopka 6 | http://cskonopka.github.io/arduivis/ 7 | http://christopherkonopka.com/ 8 | 9 | */ 10 | 11 | // i2c 12 | #include 13 | 14 | // adafruit (github) 15 | #include "Adafruit_LEDBackpack.h" 16 | #include "Adafruit_GFX.h" 17 | 18 | Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix(); 19 | 20 | String ledPins[2] = {"LED_GREEN", "LED_OFF"}; 21 | 22 | void setup() { 23 | // create serial buffer 24 | Serial.begin(9600); 25 | 26 | // create the matrix 27 | matrix.begin(0x70); 28 | } 29 | 30 | void loop() { 31 | // clearing the matrix (last hightlighted cube) 32 | matrix.clear(); 33 | 34 | // create the two sliders in max 35 | int x = Serial.parseInt(); 36 | int y = Serial.parseInt(); 37 | 38 | // draw cube 39 | matrix.drawPixel(x, y, 1); 40 | 41 | // write cube to matrix 42 | matrix.writeDisplay(); 43 | 44 | // refreshing 45 | delay(1); 46 | } 47 | -------------------------------------------------------------------------------- /Max/project_bluetooth_hc0605/arduivis_max_bluetooth_hc0605/arduivis_max_bluetooth_hc0605.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This code is in the public domain 4 | 5 | written by Christopher Konopka 6 | http://cskonopka.github.io/arduivis/ 7 | http://christopherkonopka.com/ 8 | 9 | */ 10 | 11 | void setup(){ 12 | Serial.begin(9600); 13 | } 14 | 15 | void loop(){ 16 | for(int i = 0; i < 255; i++){ 17 | Serial.println(i); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Max/project_bufferlatency/arduivis_max_bufferlatency/arduivis_max_bufferlatency.ino: -------------------------------------------------------------------------------- 1 | // Arduino Serial Tester 2 | // rld, cycling'74, 3.2008 3 | 4 | long randomvalue = 0; // random value 5 | long countervalue = 0; // counter value 6 | int serialvalue; // value for serial input 7 | int started = 0; // flag for whether we've received serial yet 8 | int port[11] = {300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200}; 9 | 10 | void setup() 11 | { 12 | Serial.begin(115200); // open the arduino serial port 13 | } 14 | 15 | void loop() 16 | { 17 | 18 | serialvalue = Serial.parseInt(); // read a byte of serial data 19 | started = 1; // set the started flag to on 20 | 21 | 22 | if(started) // loop once serial data has been received 23 | { 24 | randomvalue = random(1000); // pick a new random number 25 | Serial.print(countervalue); // print the counter 26 | Serial.print(" "); // print a space 27 | Serial.print(randomvalue); // print the random value 28 | Serial.print(" "); // print a space 29 | Serial.print(serialvalue); // echo the received serial value 30 | Serial.println(); // print a line-feed 31 | countervalue = (countervalue+1)%1000; // increment the counter 32 | // delay(100); // pause 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Max/project_potentiometer/arduivis_max_potentiometer/arduivis_max_potentiometer.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This code is in the public domain 4 | 5 | written by Christopher Konopka 6 | http://cskonopka.github.io/arduivis/ 7 | http://christopherkonopka.com/ 8 | 9 | */ 10 | 11 | void setup(){ 12 | // create serial buffer 13 | Serial.begin(9600); 14 | } 15 | 16 | void loop(){ 17 | // pot input 18 | int pot = analogRead(0); 19 | 20 | // write values to serial buffer 21 | Serial.println(pot); 22 | } 23 | -------------------------------------------------------------------------------- /Max/project_servo/arduivis_max_servo/arduivis_max_servo.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This code is in the public domain 4 | 5 | written by Christopher Konopka 6 | http://cskonopka.github.io/arduivis/ 7 | http://christopherkonopka.com/ 8 | 9 | */ 10 | 11 | #include 12 | Servo myservo; 13 | 14 | void setup(){ 15 | //create serial buffer 16 | Serial.begin(9600); 17 | 18 | // pinmode of pin 19 | pinMode(3, OUTPUT); 20 | 21 | // attach servo 22 | myservo.attach(3); 23 | } 24 | 25 | void loop(){ 26 | int maxSlider = Serial.parseInt(); 27 | servo.write(maxSlider); 28 | } 29 | -------------------------------------------------------------------------------- /PD/arduivisPD_input/arduivisPD_input.pd: -------------------------------------------------------------------------------- 1 | #N canvas 0 22 477 465 10; 2 | #X obj 301 67 tgl 50 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 3 | 1; 4 | #X obj 301 140 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 5 | -1 -1; 6 | #X obj 301 120 metro 50; 7 | #X obj 158 295 comport 9600; 8 | #X msg 286 209 devices; 9 | #X msg 286 282 close; 10 | #X floatatom 286 236 5 0 0 0 - - -; 11 | #X msg 286 255 open \$1; 12 | #X obj 158 315 sel 13 10; 13 | #X obj 158 342 zl group 1000; 14 | #X obj 158 362 iem_anything; 15 | #X obj 158 382 iem_alisttosym; 16 | #X obj 158 402 fromsymbol; 17 | #X floatatom 158 110 5 0 0 0 - - -; 18 | #X obj 158 149 spell; 19 | #X obj 158 209 prepend set; 20 | #X msg 158 252 49 52 55 10; 21 | #X obj 158 229 t b a; 22 | #X obj 161 67 hsl 128 20 0 255 0 0 empty empty empty -2 -8 0 10 -262144 23 | -1 -1 0 1; 24 | #X obj 158 90 list-round; 25 | #X obj 158 129 speedlim 0.47; 26 | #X obj 158 169 thresh 0.47; 27 | #X obj 158 189 iem_append 10; 28 | #X obj 301 158 s clock; 29 | #X obj 238 209 r clock; 30 | #X obj 238 229 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 31 | -1 -1; 32 | #X text 117 13 arduivis - model #2 - input; 33 | #X text 341 209 find Arduino board; 34 | #X text 90 33 sketch: arduivis_PD_model2_input.ino; 35 | #X text 342 282 close serial port; 36 | #X text 342 244 open serial port; 37 | #X text 21 68 slider data to Arduino; 38 | #X text 21 89 round slider floats; 39 | #X text 21 128 slow down data; 40 | #X text 21 148 convert to ASCII; 41 | #X text 21 168 combine into list; 42 | #X text 21 188 add newline int; 43 | #X text 21 208 set message; 44 | #X text 21 248 poll slider data; 45 | #X text 21 291 serial port; 46 | #X text 21 312 route & trigger; 47 | #X text 21 352 group into 1 message; 48 | #X text 21 382 convert ASCII to int; 49 | #X text 22 400 convert symbol; 50 | #X floatatom 158 422 5 0 0 0 - - -; 51 | #X text 22 420 data from slider; 52 | #X text 354 100 poll clock; 53 | #X text 304 191 1; 54 | #X text 354 90 2; 55 | #X text 163 68 3; 56 | #X text 273 397 Christopher Konopka; 57 | #X text 273 410 cskonopka.github.io/arduivis/; 58 | #X text 273 423 christopherkonopka.com; 59 | #X connect 0 0 2 0; 60 | #X connect 1 0 23 0; 61 | #X connect 2 0 1 0; 62 | #X connect 3 0 8 0; 63 | #X connect 4 0 3 0; 64 | #X connect 5 0 3 0; 65 | #X connect 6 0 7 0; 66 | #X connect 7 0 3 0; 67 | #X connect 8 0 9 0; 68 | #X connect 8 2 9 0; 69 | #X connect 9 0 10 0; 70 | #X connect 10 0 11 0; 71 | #X connect 11 0 12 0; 72 | #X connect 12 0 44 0; 73 | #X connect 13 0 20 0; 74 | #X connect 14 0 21 0; 75 | #X connect 15 0 17 0; 76 | #X connect 16 0 3 0; 77 | #X connect 17 0 16 0; 78 | #X connect 17 1 16 0; 79 | #X connect 18 0 19 0; 80 | #X connect 19 0 13 0; 81 | #X connect 20 0 14 0; 82 | #X connect 21 0 22 0; 83 | #X connect 22 0 15 0; 84 | #X connect 24 0 25 0; 85 | #X connect 25 0 16 0; 86 | -------------------------------------------------------------------------------- /PD/arduivisPD_input/arduivisPD_input/arduivisPD_input.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - Pure Data ~~~~~~~ 4 | ~~~~~ model#2: input ~~~~~ 5 | 6 | PD: arduivis_model2_PD_input.pd 7 | 8 | This is an example of how to read a slider from 9 | Pure Data and write the values to a PWM LED connected 10 | to an Arduino. 11 | 12 | This code is in the public domain 13 | 14 | written by Christopher Konopka 15 | http://cskonopka.github.io/arduivis/ 16 | http://christopherkonopka.com/ 17 | 18 | */ 19 | void setup() 20 | { 21 | // Create/open serial port 22 | Serial.begin(9600); 23 | 24 | // Define LED mode 25 | // PWM LED 26 | pinMode(3, OUTPUT); 27 | } 28 | 29 | void loop() 30 | { 31 | 32 | // Slider from Pure Data 33 | int pdSlider; 34 | 35 | // Parse incoming Pure Data slider values 36 | // from Pure Data, to Arduino 37 | pdSlider = Serial.parseInt(); 38 | 39 | // Write parsed values to LEDs 40 | // Fading LED 41 | // from Pure Data, to Arduino 42 | analogWrite(3, pdSlider); 43 | 44 | // Pure Data Slider values to serial buffer 45 | // [comport] object 46 | // to Pure Data, from Arduino 47 | Serial.println(pdSlider); 48 | } 49 | -------------------------------------------------------------------------------- /PD/arduivisPD_multipleInputs/arduivisPD_multipleInputs.pd: -------------------------------------------------------------------------------- 1 | #N canvas 0 22 594 836 10; 2 | #X floatatom 191 46 5 0 0 0 - - -; 3 | #X obj 194 3 hsl 128 20 1 255 0 0 empty empty empty -2 -8 0 10 -262144 4 | -1 -1 0 1; 5 | #X obj 191 26 list-round; 6 | #X floatatom 211 109 5 0 0 0 - - -; 7 | #X obj 214 66 hsl 128 20 1 255 0 0 empty empty empty -2 -8 0 10 -262144 8 | -1 -1 0 1; 9 | #X obj 211 89 list-round; 10 | #X obj 194 317 spell; 11 | #X obj 194 397 prepend set; 12 | #X msg 194 440 50 53 53 32 55 48 32 57 50 32 49 49 50 10; 13 | #X obj 194 417 t b a; 14 | #X obj 194 377 iem_append 10; 15 | #X floatatom 231 171 5 0 0 0 - - -; 16 | #X obj 234 128 hsl 128 20 1 255 0 0 empty empty empty -2 -8 0 10 -262144 17 | -1 -1 0 1; 18 | #X obj 231 151 list-round; 19 | #X floatatom 252 233 5 0 0 0 - - -; 20 | #X obj 255 190 hsl 128 20 1 255 0 0 empty empty empty -2 -8 0 10 -262144 21 | -1 -1 0 1; 22 | #X obj 252 213 list-round; 23 | #X obj 171 -70 tgl 50 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 24 | 1; 25 | #X obj 171 3 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 26 | -1; 27 | #X obj 194 465 comport 9600; 28 | #X msg 17 297 devices; 29 | #X msg 17 370 close; 30 | #X floatatom 17 324 5 0 0 0 - - -; 31 | #X msg 17 343 open \$1; 32 | #X obj 194 485 sel 13 10; 33 | #X obj 194 532 iem_anything; 34 | #X obj 194 552 iem_alisttosym; 35 | #X obj 194 572 fromsymbol; 36 | #X text 72 297 find Arduino board; 37 | #X text 73 370 close serial port; 38 | #X text 73 332 open serial port; 39 | #X text 427 71 slider data to Arduino; 40 | #X text 427 92 round slider floats; 41 | #X text 427 317 convert to ASCII; 42 | #X text 427 337 combine into list; 43 | #X text 427 439 poll slider data; 44 | #X text 427 465 serial port; 45 | #X text 427 485 route & trigger; 46 | #X text 427 522 group into 1 message; 47 | #X text 427 552 convert ASCII to int; 48 | #X text 428 572 convert symbol; 49 | #X text 35 279 1; 50 | #X text 224 -48 2; 51 | #X floatatom 194 618 5 0 0 0 - - -; 52 | #X floatatom 221 635 5 0 0 0 - - -; 53 | #X floatatom 248 652 5 0 0 0 - - -; 54 | #X floatatom 275 669 5 0 0 0 - - -; 55 | #X obj 194 512 zl group 1000; 56 | #X obj 194 337 thresh 0.047; 57 | #X obj 171 257 pack 0 0 0 0 0; 58 | #X obj 171 277 unpack 0 0 0 0 0; 59 | #X obj 194 297 pack 0 0 0 0; 60 | #X obj 194 357 speedlim 0.047; 61 | #X text 224 -37 poll clock; 62 | #X text 427 276 unpack data; 63 | #X text 427 257 pack data; 64 | #X text 427 296 repack data; 65 | #X obj 171 -17 metro 50; 66 | #X text 427 357 slow down data; 67 | #X text 427 378 append newline; 68 | #X text 427 397 set message for polling; 69 | #X text 428 592 unpack slider data; 70 | #X text 85 -110 arduivis - model #5 - multipleInputs; 71 | #X text 58 -90 sketch: arduivis_PD_model5_multipleInputs.ino; 72 | #X text 24 657 Christopher Konopka; 73 | #X text 24 670 cskonopka.github.io/arduivis/; 74 | #X text 24 683 christopherkonopka.com; 75 | #X obj 194 593 unpack 0 0 0 0 0; 76 | #X connect 0 0 49 1; 77 | #X connect 1 0 2 0; 78 | #X connect 2 0 0 0; 79 | #X connect 3 0 49 2; 80 | #X connect 4 0 5 0; 81 | #X connect 5 0 3 0; 82 | #X connect 6 0 48 0; 83 | #X connect 7 0 9 0; 84 | #X connect 8 0 19 0; 85 | #X connect 9 0 8 0; 86 | #X connect 9 1 8 0; 87 | #X connect 10 0 7 0; 88 | #X connect 11 0 49 3; 89 | #X connect 12 0 13 0; 90 | #X connect 13 0 11 0; 91 | #X connect 14 0 49 4; 92 | #X connect 15 0 16 0; 93 | #X connect 16 0 14 0; 94 | #X connect 17 0 57 0; 95 | #X connect 18 0 8 0; 96 | #X connect 18 0 49 0; 97 | #X connect 19 0 24 0; 98 | #X connect 20 0 19 0; 99 | #X connect 21 0 19 0; 100 | #X connect 22 0 23 0; 101 | #X connect 23 0 19 0; 102 | #X connect 24 0 47 0; 103 | #X connect 24 2 47 0; 104 | #X connect 25 0 26 0; 105 | #X connect 26 0 27 0; 106 | #X connect 27 0 67 0; 107 | #X connect 47 0 25 0; 108 | #X connect 48 0 52 0; 109 | #X connect 49 0 50 0; 110 | #X connect 50 1 51 0; 111 | #X connect 50 2 51 1; 112 | #X connect 50 3 51 2; 113 | #X connect 50 4 51 3; 114 | #X connect 51 0 6 0; 115 | #X connect 52 0 10 0; 116 | #X connect 57 0 18 0; 117 | #X connect 67 0 43 0; 118 | #X connect 67 1 44 0; 119 | #X connect 67 2 45 0; 120 | #X connect 67 3 46 0; 121 | -------------------------------------------------------------------------------- /PD/arduivisPD_multipleInputs/arduivisPD_multipleInputs/arduivisPD_multipleInputs.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~~~ arduivis - pd ~~~~~~~~ 4 | ~~~~~ model#5: multiple inputs ~~~~~ 5 | 6 | pd: arduivis_PD_model5_multipleInputs.maxpat 7 | 8 | This is an example of how to send a multiple streams 9 | of data from pd, to an Arduino. 10 | 11 | This code is in the public domain 12 | 13 | written by Christopher Konopka 14 | http://cskonopka.github.io/arduivis/ 15 | http://christopherkonopka.com/ 16 | 17 | */ 18 | 19 | void setup() 20 | { 21 | // Create/open serial port 22 | Serial.begin(9600); 23 | 24 | // Define LED mode 25 | // PWM LED 26 | pinMode(3, OUTPUT); 27 | pinMode(5, OUTPUT); 28 | pinMode(6, OUTPUT); 29 | pinMode(9, OUTPUT); 30 | } 31 | 32 | void loop() 33 | { 34 | // Sliders from pd 35 | word pdSlider1, pdSlider2, pdSlider3, pdSlider4; 36 | 37 | // Parse incoming pd slider values 38 | // from pd, to Arduino 39 | pdSlider1 = Serial.parseInt(); 40 | pdSlider2 = Serial.parseInt(); 41 | pdSlider3 = Serial.parseInt(); 42 | pdSlider4 = Serial.parseInt(); 43 | 44 | // Write parsed values to LEDs 45 | // Fading LED 46 | // from pd, to Arduino 47 | analogWrite(3, pdSlider1); 48 | analogWrite(5, pdSlider2); 49 | analogWrite(6, pdSlider3); 50 | analogWrite(9, pdSlider4); 51 | 52 | // Print output of slider to serial buffer 53 | // This is mainly for debugging 54 | Serial.print(pdSlider1); 55 | Serial.print(" "); 56 | Serial.print(pdSlider2); 57 | Serial.print(" "); 58 | Serial.print(pdSlider3); 59 | Serial.print(" "); 60 | Serial.println(pdSlider4); 61 | } 62 | -------------------------------------------------------------------------------- /PD/arduivisPD_multipleOutputs/arduivisPD_multipleOutputs.pd: -------------------------------------------------------------------------------- 1 | #N canvas 135 22 320 547 10; 2 | #X obj -123 191 sel 13 10; 3 | #X obj -123 238 iem_anything; 4 | #X obj -123 258 iem_alisttosym; 5 | #X obj -123 278 fromsymbol; 6 | #X obj -123 218 zl group 1000; 7 | #X text -21 191 route & trigger; 8 | #X text -21 228 group into 1 message; 9 | #X text -21 258 convert ASCII to int; 10 | #X text -20 278 convert symbol; 11 | #X text -20 298 unpack slider data; 12 | #X msg -123 71 devices; 13 | #X msg -93 144 close; 14 | #X obj -123 171 comport 9600; 15 | #X floatatom -112 98 5 0 0 0 - - -; 16 | #X msg -112 117 open \$1; 17 | #X obj -123 390 vsl 24 128 0 255 0 0 empty empty empty 0 -9 0 10 -262144 18 | -1 -1 0 1; 19 | #X obj -96 390 vsl 24 128 0 255 0 0 empty empty empty 0 -9 0 10 -262144 20 | -1 -1 0 1; 21 | #X obj -69 390 vsl 24 128 0 255 0 0 empty empty empty 0 -9 0 10 -262144 22 | -1 -1 0 1; 23 | #X obj -42 390 vsl 24 128 0 255 0 0 empty empty empty 0 -9 0 10 -262144 24 | -1 -1 0 1; 25 | #X text -94 10 arduivis - model #4 - multipleOutputs; 26 | #X text -131 34 sketch: arduivis_PD_model4_multipleoutputs.ino; 27 | #X obj -123 298 unpack 0 0 0 0; 28 | #X floatatom -123 318 5 0 0 0 - - -; 29 | #X floatatom -96 335 5 0 0 0 - - -; 30 | #X floatatom -69 352 5 0 0 0 - - -; 31 | #X floatatom -42 369 5 0 0 0 - - -; 32 | #X text -22 71 find Arduino board; 33 | #X text -21 145 close serial port; 34 | #X text -21 106 open serial port; 35 | #X text -5 418 Christopher Konopka; 36 | #X text -5 431 cskonopka.github.io/arduivis/; 37 | #X text -5 444 christopherkonopka.com; 38 | #X connect 0 0 4 0; 39 | #X connect 0 2 4 0; 40 | #X connect 1 0 2 0; 41 | #X connect 2 0 3 0; 42 | #X connect 3 0 21 0; 43 | #X connect 4 0 1 0; 44 | #X connect 10 0 12 0; 45 | #X connect 11 0 12 0; 46 | #X connect 12 0 0 0; 47 | #X connect 13 0 14 0; 48 | #X connect 14 0 12 0; 49 | #X connect 21 0 22 0; 50 | #X connect 21 1 23 0; 51 | #X connect 21 2 24 0; 52 | #X connect 21 3 25 0; 53 | #X connect 22 0 15 0; 54 | #X connect 23 0 16 0; 55 | #X connect 24 0 17 0; 56 | #X connect 25 0 18 0; 57 | -------------------------------------------------------------------------------- /PD/arduivisPD_multipleOutputs/arduivisPD_multipleOutputs/arduivisPD_multipleOutputs.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - Pure Data ~~~~~~~~ 4 | ~~~~~ model#4: multiple outputs ~~~~~ 5 | 6 | pd patch: arduivis_model4_PD_multipleOutputs.pd 7 | 8 | This is an example of how to use a loop to write 9 | several streams of data to Pure Data, from an Arduino. 10 | A fading LED is used to provide visual feedback for 11 | this process. 12 | 13 | This code is in the public domain 14 | 15 | written by Christopher Konopka 16 | http://cskonopka.github.io/arduivis/ 17 | http://christopherkonopka.com/ 18 | 19 | */ 20 | 21 | void setup() 22 | { 23 | // Create/open serial port 24 | Serial.begin(9600); 25 | 26 | // Define LED mode 27 | // PWM LED 28 | pinMode(3, OUTPUT); 29 | } 30 | 31 | void loop() 32 | { 33 | // Loop variables 34 | int lp = 0; 35 | 36 | int startIncrement = 0; 37 | int incrementLoopRange = 255; 38 | int startDecrement = 255; 39 | int decrementLoopRange = 0; 40 | 41 | 42 | // Loop Function 43 | lp = loopSystem(startIncrement, incrementLoopRange, startDecrement, decrementLoopRange); 44 | } 45 | 46 | int loopSystem(int startIncrement, int incrementLoopRange, int startDecrement, int decrementLoopRange) 47 | { 48 | int lp; 49 | 50 | // Loop #1 51 | // Incremental Loop 52 | for(lp = startIncrement; lp < incrementLoopRange; lp++) 53 | { 54 | // Incremental loop values to LED 55 | // Controls fade of 4 LEDs 56 | analogWrite(3, lp); 57 | analogWrite(5, lp - 13); 58 | analogWrite(6, lp + 47); 59 | analogWrite(9, lp - 60); 60 | 61 | // Incremental loop values to serial buffer 62 | // [comport] object 63 | // to Pure Data, from Arduino 64 | Serial.print(lp); 65 | Serial.print(" "); 66 | Serial.print(lp - 13); 67 | Serial.print(" "); 68 | Serial.print(lp + 47); 69 | Serial.print(" "); 70 | Serial.println(lp - 60); 71 | 72 | delay(10); 73 | } 74 | 75 | // Loop #2 76 | // Decremental Loop 77 | for(lp = startDecrement; lp > decrementLoopRange; lp--) 78 | { 79 | // Deremental loop values to LED 80 | // Controls fade of 4 LEDs 81 | analogWrite(3, lp); 82 | analogWrite(5, lp - 13); 83 | analogWrite(6, lp + 47); 84 | analogWrite(9, lp - 60); 85 | 86 | // Decremental loop values to serial buffer 87 | // [comport] object 88 | // to Pure Data, from Arduino 89 | Serial.print(lp); 90 | Serial.print(" "); 91 | Serial.print(lp - 13); 92 | Serial.print(" "); 93 | Serial.print(lp + 47); 94 | Serial.print(" "); 95 | Serial.println(lp - 60); 96 | 97 | delay(10); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /PD/arduivisPD_output/arduivisPD_output.pd: -------------------------------------------------------------------------------- 1 | #N canvas 424 131 280 416 10; 2 | #X msg -125 83 devices; 3 | #X msg -95 156 close; 4 | #X floatatom -125 310 5 0 0 0 - - -; 5 | #X obj -125 183 comport 9600; 6 | #X floatatom -114 110 5 0 0 0 - - -; 7 | #X msg -114 129 open \$1; 8 | #X text -47 81 find Arduino board; 9 | #X text -91 22 arduivis - model #1 - input; 10 | #X obj -122 329 hsl 128 15 0 255 0 0 empty empty empty -2 -8 0 10 -262144 11 | -1 -1 0 1; 12 | #X text -130 42 sketch: arduivis_PD_model1_output.ino; 13 | #X text -47 117 open serial port; 14 | #X text -47 154 close serial port; 15 | #X obj -125 203 sel 13 10; 16 | #X obj -125 250 iem_anything; 17 | #X obj -125 270 iem_alisttosym; 18 | #X obj -125 290 fromsymbol; 19 | #X obj -125 230 zl group 1000; 20 | #X text -23 183 serial port; 21 | #X text -23 203 route & trigger; 22 | #X text -23 240 group into 1 message; 23 | #X text -23 270 convert ASCII to int; 24 | #X text -22 290 convert symbol; 25 | #X text -22 310 unpack slider data; 26 | #X text -126 363 Christopher Konopka; 27 | #X text -126 376 cskonopka.github.io/arduivis/; 28 | #X text -126 389 christopherkonopka.com; 29 | #X connect 0 0 3 0; 30 | #X connect 1 0 3 0; 31 | #X connect 2 0 8 0; 32 | #X connect 3 0 12 0; 33 | #X connect 4 0 5 0; 34 | #X connect 5 0 3 0; 35 | #X connect 12 0 16 0; 36 | #X connect 12 2 16 0; 37 | #X connect 13 0 14 0; 38 | #X connect 14 0 15 0; 39 | #X connect 15 0 2 0; 40 | #X connect 16 0 13 0; 41 | -------------------------------------------------------------------------------- /PD/arduivisPD_output/arduivisPD_output/arduivisPD_output.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ~~~~~~~ arduivis - Pure Data ~~~~~~~ 4 | ~~~~~~~~~ model#1: output ~~~~~~~~~~ 5 | 6 | PD: arduivis_model1_PD_output.pd 7 | 8 | This is an example of how to send data from 9 | an Arduino and read it in Pure Data via 10 | a serial buffer. 11 | 12 | This code is in the public domain 13 | 14 | written by Christopher Konopka 15 | http://cskonopka.github.io/arduivis/ 16 | http://christopherkonopka.com/ 17 | 18 | */ 19 | 20 | void setup() 21 | { 22 | // Create/open serial port 23 | Serial.begin(9600); 24 | 25 | // Define LED mode 26 | // PWM LED 27 | pinMode(3, OUTPUT); 28 | } 29 | 30 | void loop() 31 | { 32 | // Loop variables 33 | int lp = 0; 34 | 35 | // Loop #1 36 | // Incremental Loop 37 | for(lp = 0; lp<=255; lp++) // Create incremental loop 38 | { 39 | // Incremental loop values to LED 40 | // Controls PWM fade 41 | analogWrite(3,lp); 42 | 43 | // Incremental loop values to serial buffer 44 | // [comport] object 45 | // to Pure Data, from Arduin o 46 | Serial.println(lp); 47 | } 48 | 49 | // Loop #2 50 | // Decremental Loop 51 | for(lp = 255; lp>=0; lp--) // Create decremental loop 52 | { 53 | // Deremental loop values to LED 54 | // Controls PWM fade 55 | analogWrite(3,lp); 56 | 57 | // Decremental loop values to serial buffer 58 | // [comport] object 59 | // to Pure Data, from Arduino 60 | Serial.println(lp); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

a bi-directional communication paradigm for programming languages & microcontrollers

6 | 7 | # Background 8 | The idea revolves around using an Arduino, or similar mircocontroller with serial capability, as a communication hub. Within this hub, a user can send and/or receive data from a microcontroller using a programming language that has serial capabilities. Anything connected to the microcontroller that provides data or voltage source, is a new source of information that can for new forms of research. 9 | 10 | # Installation 11 | - Download the repository. 12 | - Open Max8. 13 | - Go to file *Options > File Preferences*. 14 |

15 | 16 |

17 | - Click the *plus* to add the *arduivis* repository to the filepath. 18 |

19 | 20 |

21 | - Open a new Max patch. 22 |

23 | 24 |

25 | - Unlock it. 26 |

27 | 28 |

29 | - Click *Snippets* and find *arduivis*. 30 |

31 | 32 |

33 | - Drag the snippet into the patch. 34 |

35 | 36 |

37 | 38 | # Interface 39 | + ins - *The number of inputs, going from Max to Arduino* 40 | + outs - *The number of outputs, going from Arduino to Max* 41 | + create - *Create a new arduivis instance based on the number of i/o's* 42 | + code - *View generated Arduino code* 43 | + save - *Save new Arduino code* 44 | + clear - *Clear arduivis instance and generated code* 45 | 46 | # Demo 47 |

48 | 49 |

50 | 51 | The demo is an example how to use arduivis. The arduivis snippet is added to an empty patch and places at the top left of the patch. The patch requires four *inputs* and seven *outputs*. Add four to the *inputs* box and seven to the *outputs* box. Click create, it generates a new patch from the user-defined inputs and outputs parameters. It generates Arduino code based on the parameters and press the *code* button to copy the code. Paste the code into the Arduino IDE and upload it to the microcontroller. When finished, go to the Mac patch and click *update* to refresh the menu of boards. Select the board connected to the computer and wait three seconds. Start *polling* by clicking the *toggle*. The connection is established and data can be sent bi-directionally between Max and the microcontroller. 52 | -------------------------------------------------------------------------------- /arduivis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/arduivis.png -------------------------------------------------------------------------------- /arduivisJSlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/arduivisJSlogo.png -------------------------------------------------------------------------------- /projects/ControllingLED/Arduino/ControllingLED/ControllingLED.ino: -------------------------------------------------------------------------------- 1 | void setup() 2 | { 3 | // Create/open serial port 4 | Serial.begin(9600); 5 | pinMode(13, OUTPUT); 6 | } 7 | 8 | void loop() 9 | { 10 | int maxmspInput; 11 | maxmspInput = Serial.parseInt(); 12 | if (maxmspInput == 1) { 13 | digitalWrite(13, HIGH); 14 | } else if (maxmspInput == 0) { 15 | digitalWrite(13, LOW); 16 | } 17 | Serial.println(maxmspInput); 18 | } 19 | -------------------------------------------------------------------------------- /projects/ControllingLEDWithWords/ControllingLEDWithWords-v1/ControllingLEDWithWords-v1.ino: -------------------------------------------------------------------------------- 1 | // Example 3 - Receive with start- and end-markers 2 | 3 | const byte numChars = 32; 4 | char receivedChars[numChars]; 5 | 6 | boolean newData = false; 7 | 8 | void setup() { 9 | Serial.begin(9600); 10 | pinMode(13, OUTPUT); 11 | Serial.println(""); 12 | } 13 | 14 | void loop() { 15 | recvWithStartEndMarkers(); 16 | showNewData(); 17 | } 18 | 19 | void recvWithStartEndMarkers() { 20 | static boolean recvInProgress = false; 21 | static byte ndx = 0; 22 | char startMarker = '<'; 23 | char endMarker = '>'; 24 | char rc; 25 | 26 | while (Serial.available() > 0 && newData == false) { 27 | rc = Serial.read(); 28 | 29 | if (recvInProgress == true) { 30 | if (rc != endMarker) { 31 | receivedChars[ndx] = rc; 32 | ndx++; 33 | if (ndx >= numChars) { 34 | ndx = numChars - 1; 35 | } 36 | } 37 | else { 38 | receivedChars[ndx] = '\0'; // terminate the string 39 | recvInProgress = false; 40 | ndx = 0; 41 | newData = true; 42 | } 43 | } 44 | 45 | else if (rc == startMarker) { 46 | recvInProgress = true; 47 | } 48 | } 49 | } 50 | 51 | void showNewData() { 52 | if (newData == true) { 53 | if (strcmp (receivedChars, "red") == 0) { 54 | Serial.println(receivedChars); 55 | digitalWrite(13, HIGH); 56 | } else { 57 | digitalWrite(13, LOW); 58 | } 59 | newData = false; 60 | } 61 | } 62 | 63 | -------------------------------------------------------------------------------- /projects/ControllingLEDWithWords/ControllingLEDWithWords-v1/ControllingLEDWithWords-v1b.ino/ControllingLEDWithWords-v1b.ino.ino: -------------------------------------------------------------------------------- 1 | // Example 3 - Receive with start- and end-markers 2 | // http://forum.arduino.cc/index.php?topic=396450 3 | 4 | const byte numChars = 32; 5 | char receivedChars[numChars]; 6 | 7 | boolean newData = false; 8 | 9 | void setup() { 10 | Serial.begin(9600); 11 | pinMode(13, OUTPUT); 12 | Serial.println(""); 13 | } 14 | 15 | void loop() { 16 | recvWithStartEndMarkers(); 17 | showNewData(); 18 | } 19 | 20 | void recvWithStartEndMarkers() { 21 | static boolean recvInProgress = false; 22 | static byte ndx = 0; 23 | char startMarker = '<'; 24 | char endMarker = '>'; 25 | char rc; 26 | 27 | while (Serial.available() > 0 && newData == false) { 28 | rc = Serial.read(); 29 | 30 | if (recvInProgress == true) { 31 | if (rc != endMarker) { 32 | receivedChars[ndx] = rc; 33 | ndx++; 34 | if (ndx >= numChars) { 35 | ndx = numChars - 1; 36 | } 37 | } 38 | else { 39 | receivedChars[ndx] = '\0'; // terminate the string 40 | recvInProgress = false; 41 | ndx = 0; 42 | newData = true; 43 | } 44 | } 45 | 46 | else if (rc == startMarker) { 47 | recvInProgress = true; 48 | } 49 | } 50 | } 51 | 52 | void showNewData() { 53 | if (newData == true) { 54 | if (strcmp (receivedChars, "red") == 0) { 55 | digitalWrite(13, HIGH); 56 | } else { 57 | Serial.println(receivedChars); 58 | digitalWrite(13, LOW); 59 | } 60 | newData = false; 61 | } 62 | } 63 | 64 | -------------------------------------------------------------------------------- /projects/ControllingLEDWithWords/ControllingLEDWithWords/ControllingLEDWithWords.ino: -------------------------------------------------------------------------------- 1 | void setup() 2 | { 3 | Serial.begin(9600); 4 | pinMode(13, OUTPUT); 5 | } 6 | char side; 7 | void loop() 8 | { 9 | side = Serial.read(); 10 | // if (side == true) { 11 | 12 | 13 | // if (side == "high") { 14 | // digitalWrite(13, HIGH); 15 | // Serial.println("AsidfnaksdfsadF"); 16 | // } else if (side == "low") { 17 | // digitalWrite(13, LOW); 18 | // } 19 | 20 | // if (side == "high") { 21 | // Serial.println("hi"); 22 | // digitalWrite(13, HIGH); 23 | // } 24 | char charBuf[50]; 25 | String stringOne = ""; 26 | stringOne += side; 27 | stringOne.toCharArray(charBuf, 50); 28 | 29 | // if (newData == true) { 30 | 31 | // Serial.println(charBuf); 32 | if (strcmp (charBuf, "red") == 0) { 33 | Serial.println(charBuf); 34 | digitalWrite(13, HIGH); 35 | } else { 36 | Serial.println(charBuf); 37 | digitalWrite(13, LOW); 38 | } 39 | 40 | 41 | 42 | // Serial.println(side); 43 | // Serial.flush(); 44 | 45 | } 46 | -------------------------------------------------------------------------------- /projects/ControllingLEDWithWords/Max/ControllingLEDWithWords.maxpat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/projects/ControllingLEDWithWords/Max/ControllingLEDWithWords.maxpat -------------------------------------------------------------------------------- /projects/Go/arduivis-go-fadeLED.go: -------------------------------------------------------------------------------- 1 | // arduivis + go 2 | // arduivis-go-sineled.go 3 | 4 | // This is a basic example of how to send looping data and fade an LED on an 5 | // microcontroller with serial port compatibility 6 | 7 | package main 8 | 9 | import ( 10 | "fmt" 11 | "log" 12 | "go.bug.st/serial.v1" 13 | "time" 14 | "strconv" 15 | ) 16 | 17 | func main() { 18 | ports, err := serial.GetPortsList() 19 | if err != nil { 20 | log.Fatal(err) 21 | } 22 | if len(ports) == 0 { 23 | log.Fatal("No serial ports found!") 24 | } 25 | for _, port := range ports { 26 | fmt.Printf("Found port: %v\n", port) 27 | } 28 | 29 | mode := &serial.Mode{ 30 | BaudRate: 9600, 31 | } 32 | port, err := serial.Open("/dev/cu.usbmodem1411", mode) 33 | _ = port 34 | if err != nil { 35 | log.Fatal(err) 36 | } 37 | 38 | sum := 1 39 | for { 40 | sum += sum 41 | time.Sleep(1 * time.Millisecond) 42 | for i := 0; i < 255; i++ { 43 | convert2string := strconv.Itoa(i) 44 | addCarriage := convert2string + "\r" 45 | fmt.Println(addCarriage) 46 | n, err := port.Write([]byte(addCarriage)) 47 | _ = n 48 | if err != nil { 49 | log.Fatal(err) 50 | } 51 | time.Sleep(50 * time.Millisecond) 52 | } 53 | for i := 255; i > 0; i-- { 54 | convert2string := strconv.Itoa(i) 55 | addCarriage := convert2string + "\r" 56 | fmt.Println(addCarriage) 57 | n, err := port.Write([]byte(addCarriage)) 58 | _ = n 59 | if err != nil { 60 | log.Fatal(err) 61 | } 62 | time.Sleep(50 * time.Millisecond) 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /projects/Go/arduivis-go-model1.go: -------------------------------------------------------------------------------- 1 | // package main 2 | 3 | // import ( 4 | // "log" 5 | 6 | // "github.com/tarm/serial" 7 | // ) 8 | 9 | // func main() { 10 | // c := &serial.Config{Name: "/dev/cu.usbmodem1411", Baud: 9600} 11 | // s, err := serial.OpenPort(c) 12 | // if err != nil { 13 | // log.Fatal(err) 14 | // } 15 | 16 | // // n, err := s.Write([]byte("test")) 17 | // // if err != nil { 18 | // // log.Fatal(err) 19 | // // } 20 | 21 | // buf := make([]byte, 128) 22 | // n, err := s.Read(buf) 23 | // // if err != nil { 24 | // // log.Fatal(err) 25 | // // } 26 | // log.Printf("%q", buf[:n]) 27 | // } 28 | 29 | package main 30 | import ( 31 | "fmt" 32 | "time" 33 | "log" 34 | "github.com/jacobsa/go-serial/serial") 35 | 36 | func main () { 37 | // Set up options. 38 | options := serial.OpenOptions{ 39 | PortName: "/dev/cu.usbmodem1411", 40 | BaudRate: 9600, 41 | DataBits: 8, 42 | StopBits: 1, 43 | MinimumReadSize: 4, 44 | } 45 | 46 | // Open the port. 47 | port, err := serial.Open(options) 48 | if err != nil { 49 | log.Fatalf("serial.Open: %v", err) 50 | } 51 | 52 | // continous reading 53 | sum := 1 54 | for { 55 | sum += sum 56 | time.Sleep(1 * time.Millisecond) 57 | 58 | buf := make([]byte, 255) 59 | n, err := port.Read(buf) 60 | if err != nil { 61 | log.Fatal(err) 62 | } 63 | // log.Printf("%q", buf[:n]) 64 | // fmt.Printf("%s", buf[:n]) 65 | 66 | f := buf[:n] 67 | fmt.Printf("%s", f) 68 | 69 | } 70 | 71 | // timed open 72 | // for i := 0; i <100; i++{ 73 | // buf := make([]byte, 128) 74 | // n, err := port.Read(buf) 75 | // if err != nil { 76 | // log.Fatal(err) 77 | // } 78 | // log.Printf("%q", buf[:n]) 79 | // } 80 | 81 | 82 | // Make sure to close it later. 83 | // defer port.Close() 84 | 85 | // // Write 4 bytes to the port. 86 | // b := []byte{0x00, 0x01, 0x02, 0x03} 87 | // n, err := port.Write(b) 88 | // if err != nil { 89 | // log.Fatalf("port.Write: %v", err) 90 | // } 91 | 92 | // fmt.Println("Wrote", n, "bytes.") 93 | } -------------------------------------------------------------------------------- /projects/Go/arduivis-go-model4.go: -------------------------------------------------------------------------------- 1 | // package main 2 | 3 | // import ( 4 | // "log" 5 | 6 | // "github.com/tarm/serial" 7 | // ) 8 | 9 | // func main() { 10 | // c := &serial.Config{Name: "/dev/cu.usbmodem1411", Baud: 9600} 11 | // s, err := serial.OpenPort(c) 12 | // if err != nil { 13 | // log.Fatal(err) 14 | // } 15 | 16 | // // n, err := s.Write([]byte("test")) 17 | // // if err != nil { 18 | // // log.Fatal(err) 19 | // // } 20 | 21 | // buf := make([]byte, 128) 22 | // n, err := s.Read(buf) 23 | // // if err != nil { 24 | // // log.Fatal(err) 25 | // // } 26 | // log.Printf("%q", buf[:n]) 27 | // } 28 | 29 | package main 30 | import ( 31 | "fmt" 32 | "time" 33 | "log" 34 | "bytes" 35 | "github.com/jacobsa/go-serial/serial") 36 | 37 | func main () { 38 | // Set up options. 39 | options := serial.OpenOptions{ 40 | PortName: "/dev/cu.usbmodem1411", 41 | BaudRate: 9600, 42 | DataBits: 8, 43 | StopBits: 1, 44 | MinimumReadSize: 4, 45 | } 46 | 47 | // Open the port. 48 | port, err := serial.Open(options) 49 | if err != nil { 50 | log.Fatalf("serial.Open: %v", err) 51 | } 52 | 53 | // continous reading 54 | sum := 1 55 | for { 56 | sum += sum 57 | time.Sleep(100 * time.Millisecond) 58 | 59 | buf := make([]byte, 255) 60 | n, err := port.Read(buf) 61 | if err != nil { 62 | log.Fatal(err) 63 | } 64 | // log.Printf("%q", buf[:n]) 65 | // fmt.Printf("%s", buf[:n]) 66 | 67 | // f := buf[:n] 68 | 69 | f := []byte(buf[:n]) 70 | 71 | // fmt.Printf("%q", f) 72 | space := []byte{'\n'} 73 | splitExample := bytes.Split(f, space) 74 | 75 | fmt.Printf("%q", splitExample) 76 | fmt.Println(len(splitExample)) 77 | 78 | 79 | // space2 := []byte{' \r'} 80 | // splitExample := bytes.Split(spl, space2) 81 | 82 | // for index, element := range splitExample{ 83 | 84 | // for i := 0; i < 4; i++ { 85 | // fmt.Println("%d => %q", index, element) 86 | // } 87 | 88 | // } 89 | } 90 | // fmt.Printf("%s", len(f)) 91 | 92 | 93 | // } 94 | 95 | // timed open 96 | // for i := 0; i <100; i++{ 97 | // buf := make([]byte, 128) 98 | // n, err := port.Read(buf) 99 | // if err != nil { 100 | // log.Fatal(err) 101 | // } 102 | // log.Printf("%q", buf[:n]) 103 | // } 104 | 105 | 106 | // Make sure to close it later. 107 | // defer port.Close() 108 | 109 | // // Write 4 bytes to the port. 110 | // b := []byte{0x00, 0x01, 0x02, 0x03} 111 | // n, err := port.Write(b) 112 | // if err != nil { 113 | // log.Fatalf("port.Write: %v", err) 114 | // } 115 | 116 | // fmt.Println("Wrote", n, "bytes.") 117 | } -------------------------------------------------------------------------------- /projects/Go/arduivis-go-singlePot.go: -------------------------------------------------------------------------------- 1 | // package main 2 | 3 | // import ( 4 | // "log" 5 | 6 | // "github.com/tarm/serial" 7 | // ) 8 | 9 | // func main() { 10 | // c := &serial.Config{Name: "/dev/cu.usbmodem1411", Baud: 9600} 11 | // s, err := serial.OpenPort(c) 12 | // if err != nil { 13 | // log.Fatal(err) 14 | // } 15 | 16 | // // n, err := s.Write([]byte("test")) 17 | // // if err != nil { 18 | // // log.Fatal(err) 19 | // // } 20 | 21 | // buf := make([]byte, 128) 22 | // n, err := s.Read(buf) 23 | // // if err != nil { 24 | // // log.Fatal(err) 25 | // // } 26 | // log.Printf("%q", buf[:n]) 27 | // } 28 | 29 | package main 30 | import ( 31 | "fmt" 32 | "time" 33 | "log" 34 | "github.com/jacobsa/go-serial/serial") 35 | 36 | func main () { 37 | // Set up options. 38 | options := serial.OpenOptions{ 39 | PortName: "/dev/cu.usbmodem1411", 40 | BaudRate: 9600, 41 | DataBits: 8, 42 | StopBits: 1, 43 | MinimumReadSize: 4, 44 | } 45 | 46 | // Open the port. 47 | port, err := serial.Open(options) 48 | if err != nil { 49 | log.Fatalf("serial.Open: %v", err) 50 | } 51 | 52 | // continous reading 53 | sum := 1 54 | for { 55 | sum += sum 56 | time.Sleep(1 * time.Millisecond) 57 | 58 | buf := make([]byte, 255) 59 | n, err := port.Read(buf) 60 | if err != nil { 61 | log.Fatal(err) 62 | } 63 | f := buf[:n] 64 | fmt.Printf("%s", f) 65 | 66 | } 67 | } -------------------------------------------------------------------------------- /projects/Go/arduivis-singlePot.ino: -------------------------------------------------------------------------------- 1 | void setup() { 2 | // Create/open serial port 3 | Serial.begin(9600); 4 | } 5 | 6 | void loop() { 7 | int pot1 = analogRead(A0); 8 | Serial.println(pot1); 9 | } -------------------------------------------------------------------------------- /projects/MOSFET-Magnet/Arduino/MOSFET-Magnet.ino: -------------------------------------------------------------------------------- 1 | void setup() { 2 | Serial.begin(9600); 3 | pinMode(13, OUTPUT); 4 | } 5 | 6 | void loop() { 7 | int j = Serial.parseInt(); 8 | if (j == 1) { 9 | digitalWrite(13, HIGH); 10 | } else if (j == 0) { 11 | digitalWrite(13, LOW); 12 | } 13 | } -------------------------------------------------------------------------------- /projects/MOSFET-Magnet/Fritzing/MOSFET-Magnet.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cskonopka/arduivis/0bca741cd64bab9e9d265fde18f8ea278acdc58d/projects/MOSFET-Magnet/Fritzing/MOSFET-Magnet.fzz -------------------------------------------------------------------------------- /projects/ParsingWords/ParsingWords/ParsingWords.ino: -------------------------------------------------------------------------------- 1 | void setup() 2 | { 3 | Serial.begin(9600); 4 | } 5 | 6 | void loop() 7 | { 8 | String side = Serial.readStringUntil(':'); 9 | Serial.println(side); 10 | Serial.flush(); 11 | } 12 | --------------------------------------------------------------------------------