阿尔杜伊诺 - 处理以保存和显示数据(Arduino - Processing to save an

2019-09-25 20:37发布

代码为我的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的发送的数据的图表。 我认为,我主要的问题是线路的一部分。 我不知道如何绘制连接之前的点和新点的线。

但总体来说这个问题甚至不工作....在哪里的问题:(?

Answer 1:

这是很难回答一般的“我怎么做这个”式的问题。 堆栈溢出是专为更具体的“我试过X,预计Y,却得到了ž代替”式的问题。 话虽这么说,我会尽力在一般意义上的帮助:

打破你的问题分解成更小的步骤。

忘掉Arduino的一秒钟。 你可以创建一个小例子草图显示了基于一些硬编码数据的图表? 获取该工作第一。

当你得到工作,然后尝试在比硬编码值以外的东西的基础图形。 也许尝试基于鼠标位置随机值,或者价值观等问题是不是你的Arduino连接还没有,但要获得一个动态的图形工作。

从分离,得到另一个基本的例子草图忽略图形,只是连接到Arduino。 打印你从Arduino的获得到控制台的值。

最后,当你把所有这些单独工作的,那么它会更容易将它们连接起来创建基于从Arduino的数据图。

如果你被卡住的步骤之一,你可以发布一个MCVE有具体的问题一起。 祝好运。



Answer 2:

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


文章来源: Arduino - Processing to save and display the data