{"id":1123,"date":"2011-06-18T21:46:06","date_gmt":"2011-06-18T21:46:06","guid":{"rendered":"http:\/\/blog.ensci.com\/fablab\/?p=1123"},"modified":"2011-09-22T10:22:07","modified_gmt":"2011-09-22T10:22:07","slug":"radio-3-o-la-radio-qui-tweet-christopher-santerre","status":"publish","type":"post","link":"http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/","title":{"rendered":"Radio 3.0 &#8211; la radio qui tweet. Christopher Santerre"},"content":{"rendered":"<p><a href=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/radio3.allume%CC%81e72dpi.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1189\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/radio3.allume%CC%81e72dpi-212x300.jpg\" alt=\"\" width=\"212\" height=\"300\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/vimeo.com\/29045173\">Radio 3.0<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><!-- p.p1 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 17.0px; font: 13.0px Arial} p.p2 {margin: 0.0px 0.0px 12.0px 0.0px; font: 13.0px Arial} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Arial} --><em><strong>Le Fablab de l&rsquo;ensci, un terrain d&rsquo;exp\u00e9rimentation <\/strong><\/em><\/p>\n<p><em><strong> <\/strong><\/em> Radio 3.0 est un objet qui permet de s\u00e9lectionner, d\u2019\u00e9couter et de partager\u00a0des donn\u00e9es li\u00e9es \u00e0 des flux musicaux num\u00e9riques.\u00a0M\u00e9langeant usages d\u2019hier et pratiques d\u2019aujourd\u2019hui il est un support de recherche sur de nouvelles interactions possibles entre les hommes, les objets et le r\u00e9seau. Revendiquant une conception libre, reproductible et reprogrammable ais\u00e9ment, RADIO 3.0 est un patchwork fait d\u2019\u00e9l\u00e9ments de la grande\u00a0industrie et de pi\u00e8ces sur mesures. Ayant largement recours \u00e0 des technologies opensource comme Arduino,RADIO 3.0 fut une opportunit\u00e9 d\u2019aborder l\u2019ensemble des dimensions d&rsquo;un projet de design de l\u2019intention de d\u00e9part au prototype fonctionnel. Ce fut l&rsquo;occasion de tester directement l&rsquo;interface de l&rsquo;objet \u00e0 travers ses diff\u00e9rents capteurs et leur programmation.<\/p>\n<p><em><strong>ainsi qu&rsquo;un puissant outil de production<\/strong><\/em><\/p>\n<p>Le Fablab de l\u2019ENSCI m\u2019a permis d\u2019exp\u00e9rimenter la conception d\u2019un objet complexe int\u00e9grant \u00e0 la fois des savoirs-faires traditionnels\u00a0comme celui du bois \u00e0 de l\u2019\u00e9lectronique de pointe. Cela a \u00e9t\u00e9 l\u2019occasion de g\u00e9n\u00e9rer de nombreux ponts entre les diff\u00e9rents ateliers de\u00a0l\u2019\u00e9cole que j\u2019ai pu utiliser pendant ces quelques mois comme un outil de prototypage et de production pouss\u00e9.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 25%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-1123 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/radio3-allume%cc%81e72dpi\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/radio3.allume\u0301e72dpi-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/plans\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/plans-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/a-programmation\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/A.programmation-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/b-testaffichage\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/B.testaffichage-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/c-connexion\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/C.connexion-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/d-rhino\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/D.rhino_-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/e-fraisage\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/E.fraisage-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/f-fraisage\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/F.fraisage-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/g-ampli\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/G.ampli_-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/blog.ensci.com\/fablab\/2011\/06\/18\/radio-3-o-la-radio-qui-tweet-christopher-santerre\/h-test\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/H.test_-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n\n<p>&nbsp;<\/p>\n<p><strong><em>Plans<\/em><\/strong>:<\/p>\n<p><a href=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/plans.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1191\" src=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/plans-212x300.jpg\" alt=\"\" width=\"212\" height=\"300\" srcset=\"http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/plans-212x300.jpg 212w, http:\/\/blog.ensci.com\/fablab\/files\/2011\/06\/plans.jpg 596w\" sizes=\"auto, (max-width: 212px) 100vw, 212px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Liste des \u00e9l\u00e9ments composant la radio:<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/www.sureelectronics.net\/goods.php?id=1121\">1x afficheur Sure Electronics matrice led rouge 32&#215;8<\/a><\/p>\n<p><a href=\"http:\/\/store.apple.com\/fr\/product\/MB321Z\/A\/AirPort-Express-AirTunes?fnode=MTY1NDA0Mg&amp;mco=MTkwNDA3MDc\">1x airport express apple<\/a><\/p>\n<p>1x ampli mono velleman 7w<\/p>\n<p>1<a href=\"http:\/\/www.lamaisonduhautparleur.com\/hp-visaton.php\">x hauts parleurs VISATON FRWS5 2watts<\/a><\/p>\n<p><a href=\"http:\/\/arduino.cc\/en\/Main\/ArduinoBoardUno\">1x Arduino Uno<\/a><\/p>\n<p><a href=\"http:\/\/arduino.cc\/en\/Main\/ArduinoEthernetShield\">1x Arduino Ethernet Shield<\/a><\/p>\n<p>1x Potentiom\u00e8tre lin\u00e9aire simple<\/p>\n<p>1x Rotary encoder<\/p>\n<p>1x Inverseur \u00e9lectronique<\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>code arduino (provisoire)<\/strong><\/em><\/p>\n<p>#include &lt;avr\/pgmspace.h&gt;<\/p>\n<p>enum PinAssignments {\u00a0 encoderPinA = 2,\u00a0 encoderPinB = 3,};<br \/>\n\/\/ chris config#define CS1 13\u00a0#define CLK 10 \/\/ WR clock#define RD 5\u00a0#define DAT 7\/\/\/*\/\/ uros config\u00a0#define CS1 13\u00a0\u00a0#define CLK 4 \/\/ WR clock\u00a0#define RD 5\u00a0\u00a0#define DAT 7*\/#define RC_MASTER_MODE 0b100000110000#define SYS_DIS 0b100000000000#define SYS_EN 0b100000000010#define LED_OFF 0b100000000100#define LED_ON 0b100000000110#define N_MOS_COM8 0b100001000000#define PWM_16 0b100101011110#define PWM_1 0b100101000000#define CS_ON digitalWrite(CS1, LOW)#define CS_OFF digitalWrite(CS1, HIGH)#define CLK_ON digitalWrite(CLK, HIGH)#define CLK_OFF digitalWrite(CLK, LOW)#define DAT_ON digitalWrite(DAT, HIGH)#define DAT_OFF digitalWrite(DAT, LOW)<br \/>\n#define WORLD 0#define LOCAL 1<br \/>\n#define RESISTOR 0<br \/>\n#define TWEET 9<br \/>\n#define SWITCH 8<\/p>\n<p>#define W_MATRIX 32#define H_MATRIX 8<\/p>\n<p>byte image[32];byte p_image[32];boolean refreshImg = true;<br \/>\nboolean etat = false;int count = 0;<br \/>\n\/\/\/encodeur<br \/>\nvolatile unsigned int encoderPos = 0;unsigned int lastReportedPos = 1;<br \/>\nboolean A_set = false;boolean B_set = false;<br \/>\nlong timerEnc = 0;int encoder = 0;<br \/>\n\/\/\/end encodeur<\/p>\n<p>boolean uglySwitch = false; \/\/ bug correction, change this auful thing<br \/>\nbyte ser = 0;<br \/>\nlong timer = 0;<br \/>\nboolean lock = false;<br \/>\nchar* phrases[] = {<\/p>\n<p>\u00ab\u00a0Eclectik &#8211; Pierric Bailly\u00a0\u00bb, \u00ab\u00a0La Tete au Carre &#8211; Les comites d&rsquo;ethique\u00a0\u00bb, \u00ab\u00a0PLACE DE LA TOILE 01.05.2011\u00a0\u00bb, \u00ab\u00a0Rencontre des Ateliers &#8211; Gilles Rougon\u00a0\u00bb, \u00ab\u00a0Le Mouv &#8211; Le Post Politik 13.06.2011\u00a0\u00bb, \/\/\u00a0 \u00ab\u00a0CHIC &#8211; Le Freak\u00a0\u00bb, \u00ab\u00a0Frederic Chopin &#8211; Minute Waltz\u00a0\u00bb, \u00ab\u00a0Herbie Hancock &#8211; Cantaloupe Island\u00a0\u00bb}; \/\/\/ world 5-7<\/p>\n<p>int local = 5;int world = 0;<\/p>\n<p>String incoming = \u00ab\u00a0\u00a0\u00bb;<\/p>\n<p>const byte ascii[][6] PROGMEM = { \/\/ put this into the flash memory\u00a0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 32 (space)<br \/>\n0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 33 !<br \/>\n0x00, 0x07, 0x00, 0x07, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 34 \u00a0\u00bb<br \/>\n0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, \u00a0 \u00a0 \u00a0\/\/ 35 #<br \/>\n0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, \u00a0 \u00a0 \u00a0\/\/ 36 0x<br \/>\n0x23, 0x13, 0x08, 0x64, 0x62, 0x00, \u00a0 \u00a0 \u00a0\/\/ 37 %<br \/>\n0x36, 0x49, 0x56, 0x20, 0x50, 0x00, \u00a0 \u00a0 \u00a0\/\/ 38 &amp;<br \/>\n0x00, 0x08, 0x07, 0x03, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 39 &lsquo;<br \/>\n0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 40 (<br \/>\n0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 41 )<br \/>\n0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, \u00a0 \u00a0 \u00a0\/\/ 42 *<br \/>\n0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, \u00a0 \u00a0 \u00a0\/\/ 43 +<br \/>\n0x00, 0x80, 0x70, 0x30, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 44 ,<br \/>\n0x08, 0x08, 0x08, 0x08, 0x08, 0x00, \u00a0 \u00a0 \u00a0\/\/ 45 &#8211;<br \/>\n0x00, 0x00, 0x60, 0x60, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 46 .<br \/>\n0x20, 0x10, 0x08, 0x04, 0x02, 0x00, \u00a0 \u00a0 \u00a0\/\/ 47 \/<br \/>\n0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 48 0<br \/>\n0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 49 1<br \/>\n0x72, 0x49, 0x49, 0x49, 0x46, 0x00, \u00a0 \u00a0 \u00a0\/\/ 50 2<br \/>\n0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, \u00a0 \u00a0 \u00a0\/\/ 51 3<br \/>\n0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, \u00a0 \u00a0 \u00a0\/\/ 52 4<br \/>\n0x27, 0x45, 0x45, 0x45, 0x39, 0x00, \u00a0 \u00a0 \u00a0\/\/ 53 5<br \/>\n0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, \u00a0 \u00a0 \u00a0\/\/ 54 6<br \/>\n0x41, 0x21, 0x11, 0x09, 0x07, 0x00, \u00a0 \u00a0 \u00a0\/\/ 55 7<br \/>\n0x36, 0x49, 0x49, 0x49, 0x36, 0x00, \u00a0 \u00a0 \u00a0\/\/ 56 8<br \/>\n0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 57 9<br \/>\n0x00, 0x00, 0x14, 0x00, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 58 :<br \/>\n0x00, 0x40, 0x34, 0x00, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 59 ;<br \/>\n0x00, 0x08, 0x14, 0x22, 0x41, 0x00, \u00a0 \u00a0 \u00a0\/\/ 60 &lt;<br \/>\n0x14, 0x14, 0x14, 0x14, 0x14, 0x00, \u00a0 \u00a0 \u00a0\/\/ 61 =<br \/>\n0x00, 0x41, 0x22, 0x14, 0x08, 0x00, \u00a0 \u00a0 \u00a0\/\/ 62 &gt;<br \/>\n0x02, 0x01, 0x59, 0x09, 0x06, 0x00, \u00a0 \u00a0 \u00a0\/\/ 63 ?<br \/>\n0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 64 @<br \/>\n0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, \u00a0 \u00a0 \u00a0\/\/ 65 A<br \/>\n0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, \u00a0 \u00a0 \u00a0\/\/ 66 B<br \/>\n0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, \u00a0 \u00a0 \u00a0\/\/ 67 C<br \/>\n0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 68 D<br \/>\n0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, \u00a0 \u00a0 \u00a0\/\/ 69 E<br \/>\n0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, \u00a0 \u00a0 \u00a0\/\/ 70 F<br \/>\n0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, \u00a0 \u00a0 \u00a0\/\/ 71 G<br \/>\n0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 72 H<br \/>\n0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 73 I<br \/>\n0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, \u00a0 \u00a0 \u00a0\/\/ 74 J<br \/>\n0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, \u00a0 \u00a0 \u00a0\/\/ 75 K<br \/>\n0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, \u00a0 \u00a0 \u00a0\/\/ 76 L<br \/>\n0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 77 M<br \/>\n0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 78 N<br \/>\n0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 79 O<br \/>\n0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, \u00a0 \u00a0 \u00a0\/\/ 80 P<br \/>\n0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, \u00a0 \u00a0 \u00a0\/\/ 81 Q<br \/>\n0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, \u00a0 \u00a0 \u00a0\/\/ 82 R<br \/>\n0x26, 0x49, 0x49, 0x49, 0x32, 0x00, \u00a0 \u00a0 \u00a0\/\/ 83 S<br \/>\n0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, \u00a0 \u00a0 \u00a0\/\/ 84 T<br \/>\n0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 85 U<br \/>\n0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 86 V<br \/>\n0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 87 W<br \/>\n0x63, 0x14, 0x08, 0x14, 0x63, 0x00, \u00a0 \u00a0 \u00a0\/\/ 88 X<br \/>\n0x03, 0x04, 0x78, 0x04, 0x03, 0x00, \u00a0 \u00a0 \u00a0\/\/ 89 Y<br \/>\n0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, \u00a0 \u00a0 \u00a0\/\/ 90 Z<br \/>\n0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, \u00a0 \u00a0 \u00a0\/\/ 91<br \/>\n0x02, 0x04, 0x08, 0x10, 0x20, 0x00, \u00a0 \u00a0 \u00a0\/\/ 92<br \/>\n0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 93<br \/>\n0x04, 0x02, 0x01, 0x02, 0x04, 0x00, \u00a0 \u00a0 \u00a0\/\/ 94<br \/>\n0x40, 0x40, 0x40, 0x40, 0x40, 0x00, \u00a0 \u00a0 \u00a0\/\/ 95<br \/>\n0x00, 0x03, 0x07, 0x08, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 96<br \/>\n0x20, 0x54, 0x54, 0x78, 0x40, 0x00, \u00a0 \u00a0 \u00a0\/\/ 97 a<br \/>\n0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, \u00a0 \u00a0 \u00a0\/\/ 98 b<br \/>\n0x38, 0x44, 0x44, 0x44, 0x28, 0x00, \u00a0 \u00a0 \u00a0\/\/ 99 c<br \/>\n0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, \u00a0 \u00a0 \u00a0\/\/ 100 d<br \/>\n0x38, 0x54, 0x54, 0x54, 0x18, 0x00, \u00a0 \u00a0 \u00a0\/\/ 101 e<br \/>\n0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, \u00a0 \u00a0 \u00a0\/\/ 102 f<br \/>\n0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, \u00a0 \u00a0 \u00a0\/\/ 103 g<br \/>\n0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, \u00a0 \u00a0 \u00a0\/\/ 104 h<br \/>\n0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 105 i<br \/>\n0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 106 j<br \/>\n0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 107 k<br \/>\n0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 108 l<br \/>\n0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, \u00a0 \u00a0 \u00a0\/\/ 109 m<br \/>\n0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, \u00a0 \u00a0 \u00a0\/\/ 110 n<br \/>\n0x38, 0x44, 0x44, 0x44, 0x38, 0x00, \u00a0 \u00a0 \u00a0\/\/ 111 o<br \/>\n0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, \u00a0 \u00a0 \u00a0\/\/ 112 p<br \/>\n0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, \u00a0 \u00a0 \u00a0\/\/ 113 q<br \/>\n0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, \u00a0 \u00a0 \u00a0\/\/ 114 r<br \/>\n0x48, 0x54, 0x54, 0x54, 0x24, 0x00, \u00a0 \u00a0 \u00a0\/\/ 115 s<br \/>\n0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, \u00a0 \u00a0 \u00a0\/\/ 116 t<br \/>\n0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, \u00a0 \u00a0 \u00a0\/\/ 117 u<br \/>\n0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, \u00a0 \u00a0 \u00a0\/\/ 118 v<br \/>\n0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, \u00a0 \u00a0 \u00a0\/\/ 119 w<br \/>\n0x44, 0x28, 0x10, 0x28, 0x44, 0x00, \u00a0 \u00a0 \u00a0\/\/ 120 x<br \/>\n0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, \u00a0 \u00a0 \u00a0\/\/ 121 y<br \/>\n0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, \u00a0 \u00a0 \u00a0\/\/ 122 z<br \/>\n0x00, 0x08, 0x36, 0x41, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 123<br \/>\n0x00, 0x00, 0x77, 0x00, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 124<br \/>\n0x00, 0x41, 0x36, 0x08, 0x00, 0x00, \u00a0 \u00a0 \u00a0\/\/ 125<br \/>\n0x02, 0x01, 0x02, 0x04, 0x02, 0x00, \u00a0 \u00a0 \u00a0\/\/ 126<br \/>\n0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00 }; \u00a0 \u00a0\/\/ 127<br \/>\nvoid setup() {<br \/>\npinMode(CS1, OUTPUT);\u00a0 pinMode(CLK, OUTPUT);\u00a0 pinMode(RD, OUTPUT);\u00a0 pinMode(DAT, OUTPUT);<br \/>\ncommandWrite(SYS_EN);\u00a0 commandWrite(LED_ON);\u00a0 commandWrite(RC_MASTER_MODE);\u00a0 commandWrite(N_MOS_COM8);\u00a0 commandWrite(PWM_16);<br \/>\ninitImage();\u00a0 for (int i=0; i&lt;32; i++) p_image[i] = 0;<\/p>\n<p>\/\/\/\u00a0 Serial.begin(9600);<\/p>\n<p>\/\/\/ SWITCH\u00a0 pinMode(SWITCH, INPUT);\u00a0 digitalWrite(SWITCH, HIGH); \/\/ pull down<br \/>\npinMode(TWEET, INPUT);<br \/>\ntimer = millis();<br \/>\n\/\/for (int i=0; i&lt;5; i++) Serial.println(getLength(phrases[i]));<\/p>\n<p>if (getWorldLocalSwitch() == WORLD) {\u00a0 \u00a0 Serial.println(world);\u00a0 }\u00a0\u00a0 else {\u00a0 \u00a0 Serial.println(local);\u00a0 }<br \/>\n\/\/\/encodeur\u00a0 pinMode(encoderPinA, INPUT);\u00a0\u00a0 pinMode(encoderPinB, INPUT);<br \/>\ndigitalWrite(encoderPinA, HIGH); \u00a0\/\/ turn on pullup resistor\u00a0 digitalWrite(encoderPinB, HIGH); \u00a0\/\/ turn on pullup resistor<\/p>\n<p>\/\/ encoder pin on interrupt 0 (pin 2)\u00a0 attachInterrupt(0, doEncoderA, CHANGE);\u00a0 \/\/ encoder pin on interrupt 1 (pin 3)\u00a0 attachInterrupt(1, doEncoderB, CHANGE);<\/p>\n<p>\/\/\/\/<\/p>\n<p>}<\/p>\n<p>void loop() { \/\/ this is main loop for drawing<br \/>\nevents();<br \/>\n\/*\u00a0 Serial.print(world);\u00a0 \u00a0Serial.print(\u00a0\u00bb \u00ab\u00a0);\u00a0 \u00a0Serial.println(local);\u00a0 \u00a0*\/<\/p>\n<p>if (millis()&gt;timer + 70){\u00a0 \u00a0 \/\/\/\/\u00a0 \u00a0 makeScene();\u00a0 \u00a0 draw();\u00a0 \u00a0 \/\/\/\/\u00a0 \u00a0 timer = millis();\u00a0 }<\/p>\n<p>}<\/p>\n<p>void makeScene() {\u00a0 background(0);\u00a0 \/\/ phrase scrolling\u00a0 count&#8211;;<br \/>\nif (getWorldLocalSwitch() == WORLD) {\u00a0 \u00a0 \/\/ Serial.println(getLength(phrases[world]));<br \/>\nif (count==-(getLength(phrases[world])*6))\u00a0\u00a0 \u00a0 \u00a0 count = W_MATRIX;<br \/>\ndrawPhrase(phrases[world],count,0);<br \/>\n}\u00a0\u00a0 else {<br \/>\nif (count==-(getLength(phrases[local])*6))\u00a0\u00a0 \u00a0 \u00a0 count = W_MATRIX;<br \/>\ndrawPhrase(phrases[local],count,0);\u00a0 }<\/p>\n<p>}<\/p>\n<p>void draw() { \/\/ don&rsquo;t touch here<br \/>\nCS_ON;\u00a0 addressWrite(0x00);\u00a0 for (int i=0; i&lt;32; i++) {\u00a0 \u00a0 byteOut(image[i]);\u00a0 }\u00a0 CS_OFF;<br \/>\n}<br \/>\nint getLength(String s) {\u00a0 return s.length();}<\/p>\n<p>void events() {<br \/>\n\/\/\/SWITCH\u00a0 static int lastWorldChange = 0;\u00a0 int wlc = getWorldLocalSwitch();\u00a0 if (lastWorldChange != wlc) {\u00a0 \u00a0 worldLocalChange();\u00a0 \u00a0 uglySwitch = false;\u00a0 }<br \/>\nlastWorldChange = wlc;\u00a0 \/\/\/END SWITCH<br \/>\n\/\/\/\/ encodeur<br \/>\nif (lastReportedPos != encoderPos) {<br \/>\n\/*\u00a0 \u00a0 Serial.print(\u00ab\u00a0Index:\u00a0\u00bb);\u00a0 \u00a0 \u00a0Serial.print(encoderPos, DEC);\u00a0 \u00a0 \u00a0Serial.println();\u00a0 \u00a0 \u00a0\u00a0 \u00a0 \u00a0*\/<br \/>\nif (millis() &gt; timerEnc+600) {<br \/>\nif (lastReportedPos&gt;encoderPos) {\u00a0 \u00a0 \u00a0 \u00a0 encoder = 1;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 listChange();\u00a0 \u00a0 \u00a0 }\u00a0 \u00a0 \u00a0 else {\u00a0 \u00a0 \u00a0 \u00a0 encoder = 2;\u00a0 \u00a0 \u00a0 \u00a0 listChange();\u00a0 \u00a0 \u00a0 }<br \/>\n}<br \/>\ntimerEnc = millis();<br \/>\nlastReportedPos = encoderPos;\u00a0 }\u00a0 \/\/\/ end encodeur<\/p>\n<p>\/\/\/TWITTER\u00a0\u00a0 static int lastTweet = 0;\u00a0 int tt = getTweet();\u00a0 if (lastTweet != tt) tweet();\u00a0 lastTweet = tt;\u00a0 \/\/\/END TWITTER<br \/>\n}<br \/>\nvoid tweet() {\u00a0 background(0);\u00a0 drawPhrase(\u00ab\u00a0share\u00a0\u00bb, 0,0);\u00a0 Serial.println(8);\u00a0 draw();\u00a0 delay(1500);\u00a0 count = W_MATRIX;}<\/p>\n<p>void worldLocalChange() {<br \/>\nbackground(0);<br \/>\nif (getWorldLocalSwitch() == WORLD) {<br \/>\ndrawPhrase(\u00ab\u00a0local\u00a0\u00bb, 0,0);\u00a0 \u00a0 draw();\u00a0 \u00a0 Serial.println(9); \/\/ 8- stop\u00a0 \u00a0 delay(1500);\u00a0 \u00a0 count = W_MATRIX;\u00a0 \u00a0 Serial.println(world);<br \/>\n}\u00a0\u00a0 else { \/\/\/\/ WORLD<br \/>\ndrawPhrase(\u00ab\u00a0world\u00a0\u00bb, 0,0);\u00a0 \u00a0 draw();\u00a0 \u00a0 Serial.println(9); \/\/ 8- stop\u00a0 \u00a0 delay(1500);\u00a0 \u00a0 count = W_MATRIX;\u00a0 \u00a0 Serial.println(local);\u00a0 }<\/p>\n<p>}<br \/>\nvoid listChange() {<br \/>\nswitch(encoder) {\u00a0 case 1: \/\/\/ turn UP<br \/>\nif (getWorldLocalSwitch() == WORLD) {<br \/>\nif (world&lt;4)\u00a0 \u00a0 \u00a0 \u00a0 world++;\u00a0\u00a0 \u00a0 \u00a0 else world = 0;\u00a0 \u00a0 \u00a0 uglySwitch = true;\u00a0 \u00a0 \u00a0 scrollUpPhrase(phrases[world]);\u00a0 \u00a0 \u00a0 Serial.println(world);<br \/>\n}\u00a0\u00a0 \u00a0 else {<br \/>\nif (uglySwitch == false) {\u00a0 \u00a0 \u00a0 \u00a0 if (local&lt;7)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 local++;\u00a0\u00a0 \u00a0 \u00a0 \u00a0 else local = 5;\u00a0 \u00a0 \u00a0 }\u00a0 \u00a0 \u00a0 scrollUpPhrase(phrases[local]);\u00a0 \u00a0 \u00a0 Serial.println(local);\u00a0 \u00a0 }\u00a0 \u00a0 break;<\/p>\n<p>case 2: \/\/\/ turn DOWN<br \/>\nif (getWorldLocalSwitch() == WORLD) {<\/p>\n<p>if (world&gt;0)\u00a0 \u00a0 \u00a0 \u00a0 world&#8211;;\u00a0\u00a0 \u00a0 \u00a0 else world = 4;\u00a0 \u00a0 \u00a0 scrollDownPhrase(phrases[world]);\u00a0 \u00a0 \u00a0 Serial.println(world);\u00a0 \u00a0 }\u00a0\u00a0 \u00a0 else {<br \/>\nif (local&gt;5)\u00a0 \u00a0 \u00a0 \u00a0 local&#8211;;\u00a0\u00a0 \u00a0 \u00a0 else local = 7;\u00a0 \u00a0 \u00a0 scrollDownPhrase(phrases[local]);\u00a0 \u00a0 \u00a0 Serial.println(local);\u00a0 \u00a0 }<br \/>\nbreak;\u00a0 }<br \/>\ndelay(1500);\u00a0 count = 0;<br \/>\n\/*\u00a0 Serial.print(world);\u00a0 \u00a0Serial.print(\u00a0\u00bb \u00ab\u00a0);\u00a0 \u00a0Serial.println(local);\u00a0 \u00a0*\/<\/p>\n<p>}<\/p>\n<p>int getWorldLocalSwitch() {\u00a0 return digitalRead(SWITCH);\u00a0}<\/p>\n<p>int getTweet() {\u00a0 return digitalRead(TWEET);}<\/p>\n<p>void invert() {\u00a0 for (int i=0; i&lt;32; i++) {\u00a0 \u00a0 image[i] = image[i] ^ 255;\u00a0 }}<br \/>\n\/*void drawImage(byte *img, int x, int y, int w, int h) {\u00a0\u00a0if ( ((y+h)&gt;0) &amp;&amp; (y&lt;H_MATRIX) ) { \/\/ define y on screen\u00a0if ( ((x+w)&gt;0) &amp;&amp; (x&lt;W_MATRIX) ) { \/\/ define x on screen\u00a0\u00a0byte imgA[W_MATRIX];\u00a0for (int i=0; i&lt;W_MATRIX; i++) imgA[i] = 0;\u00a0\/\/x\u00a0for (int i=0; i&lt;w-x; i++) \u00a0imgA[x+i] = img[i];\u00a0\u00a0\u00a0\/\/y\u00a0for (int i=0; i&lt;W_MATRIX; i++) {\u00a0imgA[i] = (y&gt;0) ? imgA[i]&lt;&lt;y : imgA[i]&gt;&gt;y;\u00a0image[i] = imgA[i];\u00a0}\u00a0}\u00a0} \u00a0\u00a0}\u00a0*\/<br \/>\nvoid scrollDownPhrase(char *p2) {<br \/>\nbyte imgA[W_MATRIX];\u00a0 for (int j=0; j&lt;W_MATRIX; j++) imgA[j] = image[j];<br \/>\nfor (int i=0;i&lt;=H_MATRIX;i++) {<br \/>\n\/\/y\u00a0 \u00a0 for (int j=0; j&lt;W_MATRIX; j++)\u00a0\u00a0 \u00a0 \u00a0 image[j] = imgA[j]&lt;&lt;i;<\/p>\n<p>drawPhrase(p2, 0, H_MATRIX-i);\u00a0 \u00a0 draw();\u00a0 \u00a0 delay(100);\u00a0 }}<br \/>\nvoid scrollUpPhrase(char *p2) {<br \/>\nbyte imgA[W_MATRIX];\u00a0 for (int j=0; j&lt;W_MATRIX; j++) imgA[j] = image[j];<br \/>\nfor (int i=0;i&lt;=H_MATRIX;i++) {<br \/>\n\/\/y\u00a0 \u00a0 for (int j=0; j&lt;W_MATRIX; j++)\u00a0\u00a0 \u00a0 \u00a0 image[j] = imgA[j]&gt;&gt;i;<\/p>\n<p>drawPhrase(p2, 0, i-8);\u00a0 \u00a0 draw();\u00a0 \u00a0 delay(100);\u00a0 }}<br \/>\nvoid drawPhrase(String phrase, int x, int y) {<br \/>\nint pos = x;\u00a0 for (int i=0; i&lt;phrase.length(); i++) {\u00a0 \u00a0 if (pos&lt;W_MATRIX) {\u00a0 \u00a0 \u00a0 drawLetterAt(phrase.charAt(i), pos, y);\u00a0 \u00a0 }\u00a0\u00a0 \u00a0 else {\u00a0 \u00a0 \u00a0 break;\u00a0 \u00a0 }\u00a0 \u00a0 pos+=6;\u00a0 }<br \/>\n}<br \/>\nvoid drawLetterAt(char letter, int x, int y) {<br \/>\nif ((x&lt;W_MATRIX) &amp;&amp; (x&gt;-6)) {<br \/>\nif ((letter&gt;=32) &amp;&amp; (letter&lt;=127)) letter-=32;<br \/>\nbyte ll[6];\u00a0 \u00a0 ll[0] = pgm_read_byte(&amp;(ascii[letter][0]));\u00a0\u00a0 \u00a0 ll[1] = pgm_read_byte(&amp;(ascii[letter][1]));\u00a0\u00a0 \u00a0 ll[2] = pgm_read_byte(&amp;(ascii[letter][2]));\u00a0\u00a0 \u00a0 ll[3] = pgm_read_byte(&amp;(ascii[letter][3]));\u00a0\u00a0 \u00a0 ll[4] = pgm_read_byte(&amp;(ascii[letter][4]));\u00a0\u00a0 \u00a0 ll[5] = pgm_read_byte(&amp;(ascii[letter][5]));\u00a0\u00a0 \u00a0 byte *let = &amp;ll[0];<br \/>\nif (x&lt;0) { \/\/ left offscreen<br \/>\n\/\/\/\/drawing on the beginning of the screen\u00a0 \u00a0 \u00a0 let+=abs(x); \/\/ put on the new first position\u00a0 \u00a0 \u00a0 for (int i=0; i&lt;x+6; i++) { \/\/ only draw in visible area from 0 till something (x+6)\u00a0 \u00a0 \u00a0 \u00a0 if ((i+6)&lt;W_MATRIX) \u00a0{\/\/\/ don&rsquo;t draw in offscreen, break out<br \/>\nbyte buff = *let++;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (y&lt;0) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 buff = buff &lt;&lt; abs(y);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 buff = buff &gt;&gt; y;<br \/>\n}<br \/>\nimage[x+i] = image[x+i] | buff;<br \/>\n}\u00a0 \u00a0 \u00a0 \u00a0 else break;\u00a0 \u00a0 \u00a0 }<\/p>\n<p>}\u00a0\u00a0 \u00a0 else {\u00a0 \u00a0 \u00a0 \/\/\/ drawing anywhere on the screen\u00a0 \u00a0 \u00a0 for (int i=0; i&lt;6; i++) {\u00a0\u00a0 \u00a0 \u00a0 \u00a0 if ((i+6)&lt;W_MATRIX) \u00a0{\/\/\/ don&rsquo;t draw in offscreen break out<br \/>\nbyte buff = *let++;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (y&lt;0) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 buff = buff &lt;&lt; abs(y);<br \/>\n}\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 buff = buff &gt;&gt; abs(y);<br \/>\n}<br \/>\nimage[x+i] = image[x+i] | buff;<br \/>\n}\u00a0 \u00a0 \u00a0 \u00a0 else break;\u00a0 \u00a0 \u00a0 }<br \/>\n}\u00a0 }<\/p>\n<p>}<br \/>\nvoid background(int a) { \/\/ enter 1 or 0\u00a0 for (int i=0; i&lt;32; i++) {\u00a0 \u00a0 image[i] = (a&gt;0) ? 255 : 0;\u00a0 }}<br \/>\nvoid initImage() { \/\/\/ first image in the array\/\/ blank array\u00a0 for (int i=0; i&lt;32; i++) {\u00a0 \u00a0 image[i] = 0;\u00a0 }}\/* this function don&rsquo;t use PROGMEM flash memory\u00a0char *getLetter(char l) {\u00a0return ascii[l-32];\u00a0}\u00a0*\/<\/p>\n<p>\/\/ Interrupt on A changing statevoid doEncoderA(){\u00a0 \/\/ Test transition\u00a0 A_set = digitalRead(encoderPinA) == HIGH;\u00a0 \/\/ and adjust counter + if A leads B\u00a0 encoderPos += (A_set != B_set) ? +1 : -1;}<br \/>\n\/\/ Interrupt on B changing statevoid doEncoderB(){\u00a0 \/\/ Test transition\u00a0 B_set = digitalRead(encoderPinB) == HIGH;\u00a0 \/\/ and adjust counter + if B follows A\u00a0 encoderPos += (A_set == B_set) ? +1 : -1;}<\/p>\n<p>void byteOut(byte a) {\u00a0 shiftOut(DAT,CLK,LSBFIRST,a);}<\/p>\n<p>void commandWrite(unsigned int command) {<br \/>\nunsigned char i;\u00a0 unsigned int j;\u00a0 command = command &amp; 0x0fff; \/\/12-bit command word, upper four bits masked\u00a0 CS_OFF;\u00a0 CS_ON;<br \/>\nfor (i=0; i&lt;12; i++) {\u00a0 \u00a0 CLK_OFF;<br \/>\nj = command &amp; 0x0800; \/\/ return MSB\u00a0 \u00a0 command = command &lt;&lt; 1; \/\/Move the control character to the left one\u00a0 \u00a0 j = j &gt;&gt; 11;\u00a0 \u00a0 digitalWrite(DAT, j);\u00a0 \u00a0 CLK_ON;\u00a0 }<br \/>\nCS_OFF;<br \/>\n}<br \/>\nvoid addressWrite(unsigned char address) {\u00a0 unsigned char i,temp;\u00a0\u00a0 address = address &amp; 0x7f;\u00a0\u00a0 CLK_OFF;\u00a0 DAT_ON;\u00a0 CLK_ON;\u00a0\u00a0 CLK_OFF;\u00a0\u00a0 DAT_OFF;\u00a0 CLK_ON;\u00a0\u00a0 CLK_OFF;\u00a0\u00a0 DAT_ON;\u00a0 CLK_ON;\u00a0\u00a0 for(int i=0; i&lt;7; i++) {\u00a0 \u00a0 CLK_OFF;\u00a0\u00a0 \u00a0 temp = address &amp; 0x40;\u00a0\u00a0 \u00a0 address = address &lt;&lt; 1;\u00a0\u00a0 \u00a0 temp = temp &gt;&gt; 6;\u00a0\u00a0 \u00a0 digitalWrite(DAT,temp);\u00a0\u00a0 \u00a0 CLK_ON;\u00a0\u00a0 }\u00a0 CLK_OFF;}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Radio 3.0 &nbsp; Le Fablab de l&rsquo;ensci, un terrain d&rsquo;exp\u00e9rimentation Radio 3.0 est un objet qui permet de s\u00e9lectionner, d\u2019\u00e9couter et de partager\u00a0des donn\u00e9es li\u00e9es \u00e0 des flux musicaux num\u00e9riques.\u00a0M\u00e9langeant usages d\u2019hier et pratiques d\u2019aujourd\u2019hui il est un support de recherche sur de nouvelles interactions possibles entre les hommes, les objets et le r\u00e9seau. [&hellip;]<\/p>\n","protected":false},"author":139,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[87],"tags":[],"class_list":["post-1123","post","type-post","status-publish","format-standard","hentry","category-radio2-0"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/1123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/comments?post=1123"}],"version-history":[{"count":13,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/1123\/revisions"}],"predecessor-version":[{"id":1135,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/1123\/revisions\/1135"}],"wp:attachment":[{"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/media?parent=1123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/categories?post=1123"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/tags?post=1123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}