Grafico temperatura
In attesa della costruzione della mia stazione meteo (potete trovare il post nella categoria Arduino) sto creando degli sketch nel linguaggio di programmazione Processing. Mi sto esercitando con il sensore di temperatura già incorporato nello starter kit arduino e stavo smanettando in Processing per creare un diagramma cartesiano che mi rappresentasse la temperatura in ogni istante di tempo.
Questo è lo sketch:
Questo è il codice. Anche per chi non conoscesse Processing diciamo che il codice è stato creato a somiglianza del java. Qui potete trovare la "reference" di Processing : https://processing.org/reference/ .
Il problema del mio codice è che mi arrivano da Arduino temperatura del tipo 18.5 , 23.2 , 17.9 che io devo rappresentare nel diagramma come cordinate x e y. Per quanto riguarda le cordinate y è facile, basta assegnare al tempo un valore y e poi come vedrete nel codice (leggendolo bene) ogni secondo aumenta di 50 pixel, che corrisponderanno alle tacche disegnate nel grafico (posto lo screen del avvio del programma). Per quanto riguarda l'asse x invece non so proprio come poter rappresentare ad esempio una temperatura di 1 C alla cordinata x = 519 (esempio). Ho provato con la funzione map (come potete constatare) ma non ho avuto successo.
Aiuto!
Questo è lo sketch:
- Codice: Seleziona tutto
import processing.serial.*;
//Serial port
Serial port;
//variables read from serial
float val;
//variables to create x and y axes
int x = 150;
int y = 600;
//variables to write line x and y axes
int x1;
int y1;
//variables to write value x axis
int xValue = 147;
int number = 1;
//variable to write value y axis
int yValue = 605;
int number2 = 1;
//variable that rapresent the time
int time = 150;
//Mapped value of temperature
float mapped;
//------------------------------------------------------------------------------------------------------------------------------------------------------
void setup()
{
size(1000, 700);
background(255);
//name of the USB port
String portname = Serial.list()[0];
//object port
port = new Serial(this, portname, 9600);
//Increase in 2 the thickness
strokeWeight(2);
//x axis
line(100, 650, 900, 650);
//y axis
line(100, 650, 100, 50);
//intervals x axis
for(int i = 0; i < 16;i++)
{
line(x, 640, x, 660);
x = x + 50;
}
//intervals y axis
for(int i = 0;i < 12; i++)
{
line(90, y, 110, y);
y = y - 50;
}
//values x axis
fill(0);
for(int i = 0;i < 16;i++)
{
text(str(number), xValue, 675);
number = number + 1;
xValue = xValue + 50;
}
//values y axis
text("1", 65, 605);
for(int i = 0; i < 12; i++)
{
text(str(number2), 65, yValue);
number2 = number2 + 1;
yValue = yValue - 50;
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
void draw()
{
//If port is available
if(port.available() > 0)
{
String strVal = port.readStringUntil(ENTER);
//to avoid null entries
if(strVal != null)
{
val = float(strVal);
mapped = map(val, 50, -30, 650, 0);
println(val);
}
}
//Writing of data in the diagram
strokeWeight(4);
point(time, mapped);
time = time + 50;
}
Questo è il codice. Anche per chi non conoscesse Processing diciamo che il codice è stato creato a somiglianza del java. Qui potete trovare la "reference" di Processing : https://processing.org/reference/ .
Il problema del mio codice è che mi arrivano da Arduino temperatura del tipo 18.5 , 23.2 , 17.9 che io devo rappresentare nel diagramma come cordinate x e y. Per quanto riguarda le cordinate y è facile, basta assegnare al tempo un valore y e poi come vedrete nel codice (leggendolo bene) ogni secondo aumenta di 50 pixel, che corrisponderanno alle tacche disegnate nel grafico (posto lo screen del avvio del programma). Per quanto riguarda l'asse x invece non so proprio come poter rappresentare ad esempio una temperatura di 1 C alla cordinata x = 519 (esempio). Ho provato con la funzione map (come potete constatare) ma non ho avuto successo.
Aiuto!
