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());
}
}