Buonasera ragazzi, avrei bisogno di aiuto.
Da qualche giorno ho iniziato a provare processing 2 per leggere le temperature mandate tramite arduino di due sonde DS18B20.
Fin qui tutto a posto, visto che la mia idea è quella di utilizzare le sonde e applicarle a mò di termostato, sto provando ad inviare da processing ad arduino un setpoint da mantenere.
Tramite controlP5 ho creato una textbox e un button con il quale inviare il valore nuovo di setpoint (poi lo rileggo sempre in processing e faccio un print per ricontrollarlo). I problemi che ho sono due, il primo è che se io scrivo per esempio 20, mi ritorna 50, scrivo 60 mi torna 54.
Il secondo problema è che non riesco a fare in modo che il setpoint che invio resti memorizzato in arduino, se scrivo un valore dopo poco torna a zero.
Aggiungo i codici lasciando anche quelli per la lettura dalla sonde se può tornare comodo a qualcuno, grazie in anticipo.
LATO ARDUINO
#include <OneWire.h>
#include <DallasTemperature.h>
#include <string.h>
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Assign the addresses of your 1-Wire temp sensors.
DeviceAddress sensore1 = { 0x28, 0x4A, 0x25, 0x4C, 0x05, 0x00, 0x00, 0x49 };
DeviceAddress sensore2 = { 0x28, 0x52, 0x3A, 0x3D, 0x05, 0x00, 0x00, 0x87 };
void setup(void) {
// start serial port
Serial.begin(115200);
// Start up the library
sensors.begin();
// set the resolution to 12 bit
sensors.setResolution(sensore1, 12);
sensors.setResolution(sensore2, 12);
}
void loop(void) {
int isteresi = 1;
float letturaSeriale;
sensors.requestTemperatures();
float t_1 = sensors.getTempC(sensore1);
float t_2 = sensors.getTempC(sensore2);
if(Serial.available()>0) {
letturaSeriale = Serial.read();
}
Serial.print(letturaSeriale);
Serial.print(" ");
Serial.print("\n\r");
delay(500);
}
LATO PROCESSING
import processing.serial.*;
import cc.arduino.*;
import controlP5.*;
Serial myPort;
PFont font;
ControlP5 cp5;
String nuovoSP;
void setup() {
myPort = new Serial(this, "COM5", 115200); //setto la porta COM
myPort.bufferUntil('\n');
cp5 = new ControlP5(this);
size(700,400);
font = createFont(PFont.list()[2],32);
textFont(font);
//INSERIMENTO LABEL SETPOINT SONDA 1
cp5.addTextlabel("lbl_SP_sonda1")
.setText("Setpoint sonda 1: ")
.setPosition(160,125)
.setColorValue(0xffffff00)
.setFont(createFont("Georgia",20))
;
//INSERIMENTO TEXTBOX
cp5.addTextfield("newSP")
.setPosition(330,120)
.setSize(100,40)
.setFont(font)
.setFocus(true)
.setColor(color(255,0,0))
;
//INSERIMENTO COMMANDBUTTON INVIO NUOVO SETPOINT
cp5.addBang("INVIA_SP")
.setPosition(450,120)
.setSize(80, 40)
.getCaptionLabel().align(ControlP5.CENTER, ControlP5.CENTER)
;
}
//LEGGO I VALORI DALLA SERIALE
void serialEvent (Serial myPort){
String setpoint = myPort.readStringUntil(' ');
println(setpoint);
}
void draw() {
background(100, 100, 100);
fill(255, 255, 255);
}
public void INVIA_SP () {
nuovoSP = cp5.get(Textfield.class, "newSP").getText();
myPort.write(nuovoSP);
}