Go Down

Topic: Arduino networked lamp (Read 901 times) previous topic - next topic

elve96

Nov 12, 2012, 04:08 am Last Edit: Nov 12, 2012, 05:12 am by elve96 Reason: 1
Hi I'm not sure if this is the correct forum to be asking this question so apoligies in advance.
                                                                                                             
I have an Adruino Uno which will be used with the "Arduino networked lamp"  from "Getting Started With Arduino" 2nd Edition.  The networked lamp circuit is assembled as I understand it the Arduino sketch takes care of the Uno & circuit while Processing sketch acts as a proxy? . I have the Processing 2.0 beta program which is required, however when i try to run the code - Example 08A: Arduino networked lamp in "Processing" i get the following message/error:-

"serial does not run in 64-bit mode"

If it's any help I'm running both Arduino and Processing on a HP with windows 7 intel i3. I downloaded Processing both 32-bit & 64-bit versions and get the same   "serial does not run in 64-bit mode"    message on both versions 32-bit & 64-bit?

what changes and where do they need to be made to make this project work?

Once again I'm not sure if this is the correct forum to be asking this question so apologies in advance.
any help/advice would be greatly apprieacted as I really would like to see the LED's glow when the works "peace" "love" "arduino" are mentioned in the Makezine.com blog when I finnaly run both sketches, the old learning by doing approach, Thanks  
Code: [Select]
[/code// Example 08A: Arduino networked lamp
// parts of the code are inspired
// by a blog post by Tod E. Kurt (todbot.com)

import processing.serial.*;

String feed = "http://blog.makezine.com/index.xml";

int interval = 10; // retrieve feed every 60 seconds;
int lastTime;      // the last time we fetched the content

int love    = 0;
int peace   = 0;
int arduino = 0;

int light = 0; // light level measured by the lamp

Serial port;
color c;
String cs;

String buffer = ""; // Accumulates characters coming from Arduino

PFont font;

void setup() {
 size(640, 480);
 frameRate(10); // we don't need fast updates

 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()[3];

 port = new Serial(this, arduinoPort, 9600); // connect to Arduino
 lastTime = 0;
 fetchData();
}

void draw() {
 background( c );
 int n = (interval - ((millis()-lastTime)/1000));

 // Build a colour based on the 3 values
 c = color(peace, love, arduino);
 cs = "#" + hex(c, 6); // Prepare a string to be sent to Arduino

 text("Arduino Networked Lamp", 10, 40);
 text("Reading feed:", 10, 100);
 text(feed, 10, 140);

 text("Next update in "+ n + " seconds", 10, 450);
 text("peace", 10, 200);
 text(" " + peace, 130, 200);
 rect(200, 172, peace, 28);

 text("love ", 10, 240);
 text(" " + love, 130, 240);
 rect(200, 212, love, 28);

 text("arduino ", 10, 280);
 text(" " + arduino, 130, 280);
 rect(200, 252, arduino, 28);

 // write the colour string to the screen
 text("sending", 10, 340);
 text(cs, 200, 340);
 text("light level", 10, 380);
 rect(200, 352, light/10.23, 28); // this turns 1023 into 100

 if (n <= 0) {
   fetchData();
   lastTime = millis();
 }

 port.write(cs); // send data to Arduino

 if (port.available() > 0) { // check if there is data waiting
   int inByte = port.read(); // read one byte
   if (inByte != 10) { // if byte is not newline
     buffer = buffer + char(inByte); // just add it to the buffer
   }
   else {

     // newline reached, let's process the data
     if (buffer.length() > 1) { // make sure there is enough data

       // chop off the last character, it's a carriage return
       // (a carriage return is the character at the end of a
       // line of text)
       buffer = buffer.substring(0, buffer.length() -1);

       // turn the buffer from string into an integer number
       light = int(buffer);

       // clean the buffer for the next read cycle
       buffer = "";

       // We're likely falling behind in taking readings
       // from Arduino. So let's clear the backlog of
       // incoming sensor readings so the next reading is
       // up-to-date.
       port.clear();
     }
   }
 }
}

void fetchData() {

 // we use these strings to parse the feed
 String data;
 String chunk;

 // zero the counters
 love = 0;
 peace = 0;
 arduino = 0;
 try {
   URL url = new URL(feed); // An object to represent the URL

   // prepare a connection
   URLConnection conn = url.openConnection();
   conn.connect(); // now connect to the Website

   // this is a bit of virtual plumbing as we connect
   // the data coming from the connection to a buffered
   // reader that reads the data one line at a time.
   BufferedReader in = new
     BufferedReader(new InputStreamReader(conn.getInputStream()));

   // read each line from the feed
   while ( (data = in.readLine ()) != null) {

     StringTokenizer st =
       new StringTokenizer(data, "\"<>,.()[] ");// break it down

     while (st.hasMoreTokens ()) {
       // each chunk of data is made lowercase
       chunk= st.nextToken().toLowerCase() ;

       if (chunk.indexOf("love") >= 0 ) // found "love"?
         love++; // increment love by 1
       if (chunk.indexOf("peace") >= 0) // found "peace"?
         peace++; // increment peace by 1
       if (chunk.indexOf("arduino") >= 0) // found "arduino"?
         arduino++; // increment arduino by 1
     }
   }
   // Set 64 to be the maximum number of references we care about.
   if (peace > 64) peace = 64;
   if (love > 64) love = 64;
   if (arduino > 64) arduino = 64;

   peace = peace * 4;     // multiply by 4 so that the max is 255,
   love = love * 4;       // which comes in handy when building a
   arduino = arduino * 4; // colour that is made of 4 bytes (ARGB)
 }
 catch (Exception ex) { // If there was an error, stop the sketch
   ex.printStackTrace();
   System.out.println("ERROR: "+ex.getMessage());
 }
}
]


guix

Hello and welcome,

I did a quick search for you and it suggested to use Processing 1.5.1. Try and report if it worked :)

elve96

Hi, yes I tried with Processing 1.5.1 and it's up and running on a USB Droid board however I'm really only half way as I'm still working out how to use Processing but Yeah making progress. Thanks for your reply, very helpful 1.5.1 worked with the OS I'm running Thanks again.    :)

Go Up