浅缘 发表于 2013-4-8 23:54:18

做《爱上arduino》书中互动云一章中互动灯遇到问题,求大神指点

附上错误提示,这联网的模块有问题吗?、、、、

弘毅 发表于 2013-4-9 00:07:58

{:soso_e103:}贴完整代码出来看看

浅缘 发表于 2013-4-9 00:12:55

// Example 08A: Arduino networked lamp
// parts of the code are inspired
// by a blog post by Tod E. Kurt (todbot.com)
//
// Copy and paste this example into an empty Processing sketch

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

}

浅缘 发表于 2013-4-9 00:17:31

是processing和arduino互动的,看不明白、、、还有arduino的代码:
// Example 08B: Arduino Networked Lamp
//
// Copy and paste this example into an empty Arduino sketch

#define SENSOR 0   
#define R_LED 9
#define G_LED 10
#define B_LED 11
#define BUTTON 12

int val = 0; // variable to store the value coming from the sensor

int btn = LOW;
int old_btn = LOW;
int state = 0;
char buffer ;
int pointer = 0;
byte inByte = 0;

byte r = 0;
byte g = 0;
byte b = 0;

void setup() {
Serial.begin(9600);// open the serial port
pinMode(BUTTON, INPUT);
}

void loop() {
val = analogRead(SENSOR); // read the value from the sensor
Serial.println(val);      // print the value to
                            // the serial port

if (Serial.available() >0) {

    // read the incoming byte:
    inByte = Serial.read();

    // If the marker's found, next 6 characters are the colour
    if (inByte == '#') {

      while (pointer < 6) { // accumulate 6 chars
      buffer = Serial.read(); // store in the buffer
      pointer++; // move the pointer forward by 1
      }

      // now we have the 3 numbers stored as hex numbers
      // we need to decode them into 3 bytes r, g and b
      r = hex2dec(buffer) + hex2dec(buffer) * 16;
      g = hex2dec(buffer) + hex2dec(buffer) * 16;
      b = hex2dec(buffer) + hex2dec(buffer) * 16;
      
      pointer = 0; // reset the pointer so we can reuse the buffer
   
    }
}   

btn = digitalRead(BUTTON); // read input value and store it

// Check if there was a transition
if ((btn == HIGH) && (old_btn == LOW)){
    state = 1 - state;
}

old_btn = btn; // val is now old, let's store it

if (state == 1) { // if the lamp is on

    analogWrite(R_LED, r);// turn the leds on
    analogWrite(G_LED, g);// at the colour
    analogWrite(B_LED, b);// sent by the computer
} else {

    analogWrite(R_LED, 0);// otherwise turn off
    analogWrite(G_LED, 0);
    analogWrite(B_LED, 0);
   }

delay(100);                // wait 100ms between each send
}

int hex2dec(byte c) { // converts one HEX character into a number
    if (c >= '0' && c <= '9') {
      return c - '0';
    } else if (c >= 'A' && c <= 'F') {
      return c - 'A' + 10;
    }
}

弘毅 发表于 2013-4-9 10:55:28

试了一下。。。arduino的代码可以编译。。没问题,processing的代码也没问题可以编译。。只是需要在目录中放入那个字体。。

浅缘 发表于 2013-4-10 11:53:29

那个字体我从网上下了,也在Tool里设置好就行了吗?

empc 发表于 2013-4-10 16:02:38

本帖最后由 empc 于 2013-4-10 16:03 编辑

processing 中要显示汉字,就需要添加中文字体文件,在tools菜单中的相关创建字体的命令选项,一般就创建自己电脑里有的宋体或黑体就可以了。 而且所生成的字体文件会自动放到 源文件下的 data目录中,再源码中所用的字体改为自己创建的字体VLW文件名就可以了。

前面第一张图的错误提示,可能是需要 导入所需的URL库

浅缘 发表于 2013-4-10 18:08:34

URL库怎么导入?还有怎么下载到arduino啊?

empc 发表于 2013-4-10 19:50:05

processing 可以用java的类库

import java.net.URL;

import java.net.*;

浅缘 发表于 2013-4-10 22:41:53

、、、怎么用?

盛蕾 发表于 2013-4-23 20:54:42

嘿嘿嘿。。{:soso_e112:}

vrdesign 发表于 2014-3-30 20:28:26

同问;

代码与上面一致

出现了         BufferedReader(new InputStreamReader(conn.getInputStream()));

cannotfind a class or type named "InputSteamReader"
页: [1]
查看完整版本: 做《爱上arduino》书中互动云一章中互动灯遇到问题,求大神指点