В соответствии с 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();
}
}
Возможно, вам следует вызвать функцию ... –