Networked light arduino-Nicolas pdf.pde
Aller à la navigation
Aller à la recherche
// getting started with Arduino // Example 08A: Arduino networked lamp // parts of the code are inspired // by a blog post by Tod E. Kurt (todbot.com) // // tested and corrected with @nicolasszilas // April 5, 2010 // French commenting April 14 // @atelierpdf.com // the arduino API has to run networked-lamp.ino in parallel import processing.serial.*; // String feed = "https://twitter.com/lci"; //String feed = "http://www.lefigaro.fr"; String feed = "https://twitter.com/#!/search/ange"; int interval = 10; // analyse du site toutes les 10 secondes int lastTime; // le moment de la dernière analyse int love = 0; // variable contenant le mot 1 int peace = 0; // variable contenant le mot 2 int arduino = 0; // variable contenant le mot 1 int light = 0; // varibale du niveau capté par la cellule photoélectrique Serial port; color c; String cs; String buffer = ""; // empile les valeurs provenant de l'arduino PFont font; void setup() { size(640,480); frameRate(10); // rythme des mises à jour de processing font = loadFont("HelveticaNeue-Bold-32.vlw"); fill(255); textFont(font, 32); // IMPORTANT NOTE: // The first serial port retrieved by Serial.list() // should be your Arduino. If not, uncomment the next // line by deleting the // before it, and re-run the // sketch to see a list of serial ports. Then, change // the 0 in between [ and ] to the number of the port // that your Arduino is connected to. // println(Serial.list()); String arduinoPort = Serial.list()[0]; // adresse du port sériel port = new Serial(this, arduinoPort, 9600); // connection avec celui de l'aduino lastTime = 0; fetchData(); } void draw() { background( c ); int n = (interval - ((millis()-lastTime)/1000)); // Debug: build a colour based on the 3 values // peace = 255; // love = 200; // arduino = 200; // c = color(peace, love, arduino); cs = "#" + hex(c,6); // formattage du "string" à envoyer à l'arduino // affichage du programme: mots tracés, traduction en couleurs text("Arduino - la lampe en ligne", 10,40); text("Analyse du site: ", 10, 100); text(feed, 10, 140); text("Prochain relevé dans "+ n + " secondes",10,450); text("mot 1 ",10 ,200); text(" " + peace, 130, 200); rect(250,172, peace, 28); text("mot 2 ",10,240); text(" " + love, 130, 240); rect(250,212, love, 28); text("mot 3 ",10,280); text(" " + arduino, 130, 280); rect(250,252, arduino, 28); // write the colour string to the screen text("envoi de", 10, 340); text(cs, 250,340); text("lumière ambiante: ", 10, 380); rect(300, 352,light/10.23,28); // on exprime 1023 en 100 if (n <= 0) { fetchData(); println("Fetching fata"); // affichage dans processing de chaque appel lastTime = millis(); } port.write(cs); // envoi des données vers l'arduino if (port.available() > 0) { // le port sériel attend-t-il des donnée? int inByte = port.read(); // lecture d'un byte if (inByte != 10) { // s'il n'est pas un "newline" buffer = buffer + char(inByte); // on l'ajoute au tampon (buffer) } else { // dès que le "new line" est reçue, on traite les données if (buffer.length() > 1) { // teste si les données existent // on enlève le dernier caractère, c'est un retour de charriot buffer = buffer.substring(0,buffer.length() -1); // on transforme les données en valeurs entières light = int(buffer); // puis on le vide la mémoire tampou pour le cycle suivant buffer = ""; // préparons la place en mémoire pour les nouvelles // données... en effaçant tout port.clear(); } } } } void fetchData() { // ces chaînes de caratères vont nous permettre // d'analyser les données String data; String chunk; // on met les compteurs à 0 love = 0; peace = 0; arduino = 0; try { URL url = new URL(feed); // cet objet contient l'url // on met en place la connection URLConnection conn = url.openConnection(); conn.connect(); // et on l'opère // on met en place les données en ligne // à raison d'une ligne à la fois BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); // on prend chacune des lignes du flux entrant while ((data = in.readLine()) != null) { StringTokenizer st = new StringTokenizer(data,"\"<>,.()[] ");// on le découpe while (st.hasMoreTokens()) { // on s'assure que tous les caratères sont en bas de casse chunk= st.nextToken().toLowerCase() ; if (chunk.indexOf("Anges") >= 0 ) // a-t-on trouvé le premier mot? love++; // increment love by 1 if (chunk.indexOf("ange") >= 0) // a-t-on trouvé le second mot? peace++; // increment peace by 1 if (chunk.indexOf("je") >= 0) // a-t-on trouvé le troisème mot? } } // le maximun est bloqué a 64 références if (peace > 64) peace = 64; if (love > 64) love = 64; if (arduino > 64) arduino = 64; peace = peace * 4; // que l'on multiplie par 4 pour arriver à 255 love = love * 4; // puisque l'on forme des message de couleurs arduino = arduino * 4; // codés sur 4 bytes (ARGB) } catch (Exception ex) { // en cas d'erreur, arret du sketch ex.printStackTrace(); System.out.println("ERROR: "+ex.getMessage()); } }