2016-11-09 5 views
1

Код для моего Arduino: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++; 
    } 

Я попытался действительно трудно понять обработку, но я до сих пор не как рисовать график на основе данных, отправленных ардуином. Я думаю, что проблема в том, что у меня в основном есть линейная часть. Я не знаю, как нарисовать линию, соединяющую предыдущую точку и новую точку.

Но в целом проблема даже не работает .... Где проблема :(?

+1

Возможно, вам следует вызвать функцию ... –

ответ

0

Это трудно ответить вообще «как я это делаю» вопросы типа. Переполнение стека предназначена для более конкретных " Я попробовал X, Y ожидал, но получил Z вместо»вопросы типа, что, как говорится, я постараюсь помочь в общем смысле:..

Разбейте вашу проблему на более мелкие шаги

Забудьте о Arduino в течение секунды. Можете ли вы создать небольшой примерный эскиз, который показывает график, основанный на некоторых жестко закодированных данные? Сначала начните работать.

Когда вы получите эту работу, попробуйте использовать свой график на чем-то, кроме жестко заданных значений. Возможно, попробуйте случайные значения или значения на основе положения мыши и т. Д. Дело не в том, чтобы подключить ваш Arduino, а для того, чтобы получить динамический график.

Отделитесь от этого, получите еще один простой пример эскиза, который игнорирует графику и просто соединяется с Arduino. Распечатайте значения, которые вы получаете от Arduino, к консоли.

Наконец, когда у вас есть все те, кто работает отдельно, тогда их будет проще подключить для создания графика на основе данных Arduino.

Если вы застряли на одном из этапов, вы можете отправить MCVE вместе с конкретным вопросом. Удачи.

0

В соответствии с Engduino Thermistor Documentation (pdf-ссылка) значение представляет собой поплавок.

Поскольку вы отправляете значение с помощью println(), появляется новый символ строки ('\n'), отправленный вместе с значением с плавающей запятой. Это может быть полезно в сочетании с функцией обработки Serial's bufferUntil().

Главный недостающий компонент на самом деле разбор float из полученной строки. Вот простой пример преобразования:

String temperatureString = "37.5"; 
float temperatureFloat = float(temperatureString); 

Вы можете использовать серийный-х readString(), чтобы получить строку, а затем trim() его, чтобы удалить пробелы, а затем, наконец, преобразовать его в поплавка:

temperature = float(port.readString().trim()); 

Это также хороший чтобы проверить, была ли конверсия успешной:

if(!Float.isNaN(temperature)){ 
     println("read temperature",temperature); 
     x++; 
    } 

В целом, это хорошая идея, чтобы проверить наличие ошибок, так что это вариант n, который делает это, и проверяет также последовательные порты и комментарии:

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(); 
    } 
} 
Смежные вопросы