diff --git a/hardware/unicorn/README.md b/hardware/unicorn/README.md index cc75f665..720495ef 100644 --- a/hardware/unicorn/README.md +++ b/hardware/unicorn/README.md @@ -48,3 +48,11 @@ Setting `msg.payload` to `CLS` will clear the display to off and delete any spri The overall brightness may be set by setting `msg.payload` to `brightness,nn`, where `nn` is `0 to 100`. The rotation may be set by setting `msg.payload` to `rotate,rr`, where `rr` is `0`, `90`, `180` or `270`. + +Examples +-------- + +Includes two example flows - found under `Menu - Import - Examples - pi unicorn-hat`. +One shows drawing simple blocks and lines. +The other is a simple graphical clock that shows the current time in hours +and minutes using a number of coloured pixels. diff --git a/hardware/unicorn/examples/Basic.json b/hardware/unicorn/examples/Basic.json index a29d1488..58d558fe 100644 --- a/hardware/unicorn/examples/Basic.json +++ b/hardware/unicorn/examples/Basic.json @@ -1 +1 @@ -[{"id":"651b51cb.9ae4b","type":"rpi-unicorn","z":"40b203f2.bf4dfc","name":"","png":"0,0,0","bright":"20","x":670,"y":120,"wires":[]},{"id":"738418f2.8c7be8","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":80,"wires":[["f4b1a57c.0b4e58"]]},{"id":"f4b1a57c.0b4e58","type":"function","z":"40b203f2.bf4dfc","name":"Random pixel","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":80,"wires":[["651b51cb.9ae4b"]]},{"id":"521bcb52.cdacd4","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":240,"wires":[["339d717e.b7dcbe"]]},{"id":"1ead517.f6ea2af","type":"function","z":"40b203f2.bf4dfc","name":"Random block","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\"-\"+rnd(8)+\",\"+rnd(8)+\"-\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":280,"wires":[["651b51cb.9ae4b"]]},{"id":"3b0f093.055fdf6","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":280,"wires":[["1ead517.f6ea2af"]]},{"id":"78fb1275.1edcfc","type":"function","z":"40b203f2.bf4dfc","name":"Random partial horzontal line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\"-\"+rnd(8)+\",\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":200,"wires":[["651b51cb.9ae4b"]]},{"id":"39a26a50.73f696","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":200,"wires":[["78fb1275.1edcfc"]]},{"id":"a64899c7.7a26a8","type":"comment","z":"40b203f2.bf4dfc","name":"Unicorn Examples","info":"Simple exmplaes of drawing random colour pixels\n, full lines, partial lines and rectangles.\n\nAnd two simple \"sprites\", named by their `msg.topic` \nproperty that can move independantly of the background.","x":160,"y":40,"wires":[]},{"id":"300f653.741879a","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":160,"wires":[["d8af4e17.7d6fb"]]},{"id":"6f424fd0.170e4","type":"function","z":"40b203f2.bf4dfc","name":"Random horizontal line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = \"*,\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":120,"wires":[["651b51cb.9ae4b"]]},{"id":"63f3f789.31d5b8","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":120,"wires":[["6f424fd0.170e4"]]},{"id":"d8af4e17.7d6fb","type":"function","z":"40b203f2.bf4dfc","name":"Random vertical line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",*,\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":160,"wires":[["651b51cb.9ae4b"]]},{"id":"339d717e.b7dcbe","type":"function","z":"40b203f2.bf4dfc","name":"Random partial vertical line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\"-\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":240,"wires":[["651b51cb.9ae4b"]]},{"id":"70b1ae04.a9fc8","type":"inject","z":"40b203f2.bf4dfc","name":"Clear screen","topic":"","payload":"CLS","payloadType":"str","repeat":"","crontab":"","once":false,"x":390,"y":40,"wires":[["651b51cb.9ae4b"]]},{"id":"85a534a6.be6a18","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":340,"wires":[["19299a90.447b95"]]},{"id":"19299a90.447b95","type":"function","z":"40b203f2.bf4dfc","name":"Random red sprite","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",255,0,0\";\nmsg.topic = \"s1\"; // give the sprite a name\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":340,"wires":[["651b51cb.9ae4b"]]},{"id":"6936a42e.a0abfc","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":380,"wires":[["9478822a.49e9d"]]},{"id":"9478822a.49e9d","type":"function","z":"40b203f2.bf4dfc","name":"Random blue sprite","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",0,0,255\";\nmsg.topic = \"s2\"; // give the sprite a name (different from the red one)\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":380,"wires":[["651b51cb.9ae4b"]]}] +[{"id":"651b51cb.9ae4b","type":"rpi-unicorn","z":"40b203f2.bf4dfc","name":"","png":"0,0,0","bright":"20","x":670,"y":120,"wires":[]},{"id":"738418f2.8c7be8","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":80,"wires":[["f4b1a57c.0b4e58"]]},{"id":"f4b1a57c.0b4e58","type":"function","z":"40b203f2.bf4dfc","name":"Random pixel","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":80,"wires":[["651b51cb.9ae4b"]]},{"id":"521bcb52.cdacd4","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":240,"wires":[["339d717e.b7dcbe"]]},{"id":"1ead517.f6ea2af","type":"function","z":"40b203f2.bf4dfc","name":"Random block","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\"-\"+rnd(8)+\",\"+rnd(8)+\"-\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":280,"wires":[["651b51cb.9ae4b"]]},{"id":"3b0f093.055fdf6","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":280,"wires":[["1ead517.f6ea2af"]]},{"id":"78fb1275.1edcfc","type":"function","z":"40b203f2.bf4dfc","name":"Random partial horzontal line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\"-\"+rnd(8)+\",\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":200,"wires":[["651b51cb.9ae4b"]]},{"id":"39a26a50.73f696","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":200,"wires":[["78fb1275.1edcfc"]]},{"id":"a64899c7.7a26a8","type":"comment","z":"40b203f2.bf4dfc","name":"Unicorn Examples","info":"Simple examples of drawing random colour pixels\n, full lines, partial lines and rectangles.\n\nAnd two simple \"sprites\", named by their `msg.topic` \nproperty that can move independantly of the background.","x":160,"y":40,"wires":[]},{"id":"300f653.741879a","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":160,"wires":[["d8af4e17.7d6fb"]]},{"id":"6f424fd0.170e4","type":"function","z":"40b203f2.bf4dfc","name":"Random horizontal line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = \"*,\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":120,"wires":[["651b51cb.9ae4b"]]},{"id":"63f3f789.31d5b8","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":120,"wires":[["6f424fd0.170e4"]]},{"id":"d8af4e17.7d6fb","type":"function","z":"40b203f2.bf4dfc","name":"Random vertical line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",*,\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":160,"wires":[["651b51cb.9ae4b"]]},{"id":"339d717e.b7dcbe","type":"function","z":"40b203f2.bf4dfc","name":"Random partial vertical line","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\"-\"+rnd(8)+\",\"+rnd(256)+\",\"+rnd(256)+\",\"+rnd(256);\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":240,"wires":[["651b51cb.9ae4b"]]},{"id":"70b1ae04.a9fc8","type":"inject","z":"40b203f2.bf4dfc","name":"Clear screen","topic":"","payload":"CLS","payloadType":"str","repeat":"","crontab":"","once":false,"x":390,"y":40,"wires":[["651b51cb.9ae4b"]]},{"id":"85a534a6.be6a18","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":340,"wires":[["19299a90.447b95"]]},{"id":"19299a90.447b95","type":"function","z":"40b203f2.bf4dfc","name":"Random red sprite","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",255,0,0\";\nmsg.topic = \"s1\"; // give the sprite a name\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":340,"wires":[["651b51cb.9ae4b"]]},{"id":"6936a42e.a0abfc","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":380,"wires":[["9478822a.49e9d"]]},{"id":"9478822a.49e9d","type":"function","z":"40b203f2.bf4dfc","name":"Random blue sprite","func":"\nfunction rnd(r) {\n return parseInt(Math.random()*r);\n}\n\nmsg.payload = rnd(8)+\",\"+rnd(8)+\",0,0,255\";\nmsg.topic = \"s2\"; // give the sprite a name (different from the red one)\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":380,"wires":[["651b51cb.9ae4b"]]}] diff --git a/hardware/unicorn/examples/Clock.json b/hardware/unicorn/examples/Clock.json new file mode 100644 index 00000000..d4fd484f --- /dev/null +++ b/hardware/unicorn/examples/Clock.json @@ -0,0 +1 @@ +[{"id":"651b51cb.9ae4b","type":"rpi-unicorn","z":"40b203f2.bf4dfc","name":"","png":"0,0,0","bright":"20","x":530,"y":620,"wires":[]},{"id":"d886ebb5.d40378","type":"inject","z":"40b203f2.bf4dfc","name":"","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":true,"x":100,"y":620,"wires":[["a14fe454.f951f8"]]},{"id":"a14fe454.f951f8","type":"function","z":"40b203f2.bf4dfc","name":"Simple graphical clock","func":"\n// array to hold \"random\" pixels\nvar ranNums = [];\n\n// create a non-overlapping array of random numbers 0-8\nfunction rerand() {\n var nums = [0,1,2,3,4,5,6,7,8];\n var i = nums.length;\n var j;\n ranNums = [];\n while (i--) {\n j = Math.floor(Math.random() * (i+1));\n ranNums.push(nums[j]);\n nums.splice(j,1);\n }\n}\n\n// Get the hours and minutes and split into tens and units\nvar d = new Date();\nvar h = d.getHours();\nvar m = d.getMinutes();\nvar hu = h%10;\nh = parseInt(h/10);\nvar mu = m%10;\nm = parseInt(m/10);\n\n// Do the tens of hours (red)\nrerand();\nnode.send({payload:\"1-3,1-3,0,0,0\"});\nfor (var i=0; i