代码为我的Arduino:
#include<EngduinoThermistor.h>
void setup()
{
Serial.begin(9600);
EngduinoThermistor.begin();
}void loop()
{
float temp;
temp = EngduinoThermistor.temperature();
Serial.println(temp);
delay(1000);
}
代码为我的处理:
import processing.serial.*;
Serial port;
float x = 0;
void setup() {
size(500, 400);
println(Serial.list());
String portName = Serial.list()[0];
port = new Serial(this, "/dev/tty.usbmodem1411", 9600);
}
void draw() {
}
void serialEvent(Serial port) {
float inByte = port.read();
println(inByte);
stroke(90, 76, 99);
line(x, height, x, height - inByte);
if (x >=width) {
x=0;
background(200);
}
x++;
}
我已经试过真的很难懂处理,但我还是不明白怎么画基于Arduino的发送的数据的图表。 我认为,我主要的问题是线路的一部分。 我不知道如何绘制连接之前的点和新点的线。
但总体来说这个问题甚至不工作....在哪里的问题:(?
这是很难回答一般的“我怎么做这个”式的问题。 堆栈溢出是专为更具体的“我试过X,预计Y,却得到了ž代替”式的问题。 话虽这么说,我会尽力在一般意义上的帮助:
打破你的问题分解成更小的步骤。
忘掉Arduino的一秒钟。 你可以创建一个小例子草图显示了基于一些硬编码数据的图表? 获取该工作第一。
当你得到工作,然后尝试在比硬编码值以外的东西的基础图形。 也许尝试基于鼠标位置随机值,或者价值观等问题是不是你的Arduino连接还没有,但要获得一个动态的图形工作。
从分离,得到另一个基本的例子草图忽略图形,只是连接到Arduino。 打印你从Arduino的获得到控制台的值。
最后,当你把所有这些单独工作的,那么它会更容易将它们连接起来创建基于从Arduino的数据图。
如果你被卡住的步骤之一,你可以发布一个MCVE有具体的问题一起。 祝好运。
根据Engduino热敏电阻文档 (PDF链接),该值是浮点数。
因为你发送使用值println()
有一个新的行字符( '\n'
与浮点值一起发送)。 这其实是可以与处理的序列的一起选择有用bufferUntil()函数。
目前主要缺少的成分实际上解析float
从接收到的字符串。 这是一个基本的转换例如:
String temperatureString = "37.5";
float temperatureFloat = float(temperatureString);
您可以使用串行的readString()来获取字符串,然后修剪(),它删除空格,最后终于将它转换为浮动:
temperature = float(port.readString().trim());
这也是以检查是否转换成功是一个好主意:
if(!Float.isNaN(temperature)){
println("read temperature",temperature);
x++;
}
总的来说这是一个好主意,检查错误,所以这里的,做以上,并检查串行端口,以及和评论的版本:
import processing.serial.*;
//serial port
Serial port;
//x position of current value on graph
float x = 0;
//current temperature reading
float temperature;
void setup() {
size(500, 400);
background(200);
String[] portNames = Serial.list();
println(portNames);
String portName = "not found";
//loop through available serial ports and look for an Arduino (on OSX something like /dev/tty.usbmodem1411)
for(int i = 0 ; i < portNames.length; i++){
if(portNames[i].contains("tty.usbmodem")){
portName = portNames[i];
break;
}
}
//try to open the serial port
try{
port = new Serial(this, portName, 9600);
//buffer until new line character (since values are send via println() from Arduino)
port.bufferUntil('\n');
}catch(Exception e){
System.err.println("Arduino port " + portName);
e.printStackTrace();
}
}
void draw() {
//draw graph
stroke(90, 76, 99);
//you might want to map the temperature to sketch dimensions)
line(x, height, x, height - temperature);
if (x >=width) {
x=0;
background(200);
}
}
void serialEvent(Serial port) {
try{
//read the string, trim it (in case there's a '\n' character), then convert it to a float
temperature = float(port.readString().trim());
//check if the float conversion was successfull (didn't get a NaN value)
if(!Float.isNaN(temperature)){
println("read temperature",temperature);
x++;
}
}catch(Exception e){
System.err.println("error parsing value from serial port");
e.printStackTrace();
}
}