Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Grafico temperatura

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Grafico temperatura

Messaggioda Foto Utenteskizzo66 » 18 gen 2017, 21:15

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:

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!
Allegati
Schermata del 2017-01-18 20-12-13.png
Come potete vedere il tentativo con map() non è riuscito.
Avatar utente
Foto Utenteskizzo66
123 1 6
Frequentatore
Frequentatore
 
Messaggi: 100
Iscritto il: 18 ott 2016, 22:27

0
voti

[2] Re: Grafico temperatura

Messaggioda Foto Utentebiget » 19 gen 2017, 1:47

questa mapped = map(val, 50, -30, 650, 0);
dovrebbe essere mapped = map(val, -30, 50, 0, 650);
ca. 8 pixels per grado
e poi in caso usi l'aritmetica per invertirti le coordinate

ma tutto il codice andrebbe rivisto O_/
Avatar utente
Foto Utentebiget
1.155 3 7
CRU - Account cancellato su Richiesta utente
 
Messaggi: 464
Iscritto il: 16 dic 2016, 19:47

0
voti

[3] Re: Grafico temperatura

Messaggioda Foto Utenteskizzo66 » 19 gen 2017, 2:20

Allora la funzione map non andava perché avevo fatto male i calcoli, sono riuscito a risolvere, tuttavia ora ho un altro problema. Nei test Arduino mi invia i dati una volta al secondo, mentre ora ho bisogno che lo faccia una volta al minuto. Ovviamente lo sketch non funziona perché stampa istantaneamente i dati, come posso risolvere?


---Aggiornamentoo---
Come spesso capita dopo una breve e intensa spremuta di cervello, sono riuscito ad arrivare alla soluzione, avevo messo la funzione che mi disegnavi i punti corrispondenti alla temperatura fuori dall'if più grande (dove c'è available() ) con la conseguenza che stampava il primo dato che arrivava istantaneamente in tutti gli istanti di tempo. Ho risolto mettendo la funzione all'interno di quell'if.
Avatar utente
Foto Utenteskizzo66
123 1 6
Frequentatore
Frequentatore
 
Messaggi: 100
Iscritto il: 18 ott 2016, 22:27


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti