14.1.- Recollida de dades en format PDF.
Si volem recollir dades en format PDF de la targeta Arduino i alçar-les en format PDF cal llegir la llibreria pdf amb l'ordre «import processing.pdf.*;».
Cal crear en la secció void setup el fitxer on anem a alçar les dades amb l'ordre « size(1000, 1000,PDF,"TempC.pdf");//Mida fitxer pdf».
Cal posar un condicional amb un if per aturar el programa quan es complisca la condició de temps (dia i hora) i llavors s'aturarà el programa amb l'ordre «exit();// el programa acaba d'escriure el PDF i atura el programa».
Opcionalment cal posar un altre condicional amb un if per comptar línies escrites i passar de pàgina amb les ordres
« PGraphicsPDF pdf=(PGraphicsPDF) g;//Escrivim »
«pdf.nextPage();// una pàgina nova»
A continuació tens un programa d'exemple amb la seua eixida en format pdf.
// Copyright (C) 2010 MODAT7
// Modificat el 25-04-2013 per Carles Ferrando
// License: GNU GPL ( http://www.gnu.org/licenses/gpl.html )
// En aquest programa llegirem el valor d'un NTC i estimarem el seu valor en graus centígrads
// amb el mètode de Steinhart–Hart per després mostrar els valors de la TºC i de la data en
// PDF utilitzant Processing
//
//importem les llibreries de comunicació per port serie
//la firmata d'arduino per arduino i la llibreria pdf
import processing.serial.*;
import cc.arduino.*;
import processing.pdf.*;
//Clase arduino que representa la targeta Arduino
Arduino arduino;
//Definició de coeficients i constants
float Ventrada=5.0; // [V] Tensió d'entrada al divisor de tensió
float Rauxiliar=10000; // [ohm] Resistència secundaria al divisor de tensió.
float R0=10000; // [ohm] Valor de NTC nominal a 25ºC
float T0=298.15; // [K] (25ºC) Valor en ºK de 25ºC
float beta=3891; // [K] Paràmetre B
float Rinfinit=0.0214906446; // [ohm] Paràmetre Rinfinit
//Definició de variables
float Veixida=0.0; // [V] Tensió donada pel divisor de tensió
float RNTC=0.0; // [ohm] Resistència del NTC
float TempK=0.0;// [K] Temperatura d'eixida en Kelvin
float TempC=0.0;// [ºC] Temperatura d'eixida en Celsius
int pinNTC = 3; // selecciona el pin d'entrada per al sensor de calor
int LecturaNTC=0 ;// El valor analògic llegit pel sensor al pin NTC
float x=0;//comptador de punts inicials.
int i=0; //variable per baixar al full PDF
// Configuració de paràmetres i ports d'entrada i eixida
void setup() {
size(1000, 1000,PDF,"TempC.pdf");//Mida fitxer pdf
background(255); //fulla blanca
fill(0);//color lletra negre
//escrivim les dades del títol a la capçalera de la pàgina
text ("Temps",10,20);
text (";",170 , 20);
text("Temperatura ºC", 180, 20);
//fila rètols
text("DD", 10, 40);
text("/",30, 40);
text("MM", 35, 40);
text("/",55, 40);
text("YYYY", 60, 40);
text("hh",105, 40);
text(":",120, 40);
text("mm", 125, 40);
text(":",150, 40);
text("ss",155, 40);
text(";",170, 40);
text("TºC", 180, 40);
//L'objecte arduino cal crear-lo en primer lloc abans de llegir altre cap port
arduino = new Arduino(this, Arduino.list()[0], 57600);
//una vegada creat ja puc llegir altres ports (pins)
arduino.pinMode(LecturaNTC, Arduino.INPUT);
}
//Programa principal al bucle
void draw()
{ // Hui és 26 d'abril de 2013 i si és l'hora acordada
if ( day()==26 && month()==04 && hour()==19 && minute()==05){
exit();// el programa acaba d'escriure el PDF i atura el programa
}
int LecturaNTC = arduino.analogRead(pinNTC); //llegeix valors analògics des del sensor posat al port
Veixida=Ventrada*((LecturaNTC)/1024.0); //Càlcul del valor de voltatge del NTC ara
RNTC=(Rauxiliar*Veixida/(Ventrada-Veixida)); //Càlcul del valor la Resistència del NTC ara
TempK=(beta/log(RNTC/Rinfinit)); //Càlcul de la temperatura estimada de SteinHart-Hart en Kelvins
TempC=TempK-273.15; //Càlcul de la temperatura estimada en Centígrads
println ("T (C)=" + TempC ); //Imprimeix al terminal T en C
println ("T (K)=" + TempK ); //Imprimeix al terminal T en K
delay(1000);//aturem el programa 1000 ms i després fem una lectura
x=x+1;//coordenada x relativa
if (i==45){ //Si hem arribat al final de la pàgina
PGraphicsPDF pdf=(PGraphicsPDF) g;//Escrivim
pdf.nextPage();// una pàgina nova
i=0;// posem a cero el comptador de línies
//i escrivim les dades del títol a dalt de la pàgina
text ("Temps",10,20);
text (";",170 , 20);
text("Temperatura ºC", 180, 20);
//fila rètols
text("DD", 10, 40);
text("/",30, 40);
text("MM", 35, 40);
text("/",55, 40);
text("YYYY", 60, 40);
text("hh",105, 40);
text(":",120, 40);
text("mm", 125, 40);
text(":",150, 40);
text("ss",155, 40);
text(";",170, 40);
text("TºC", 180, 40);
} //final de pàgina
// Escriu dades al PDF si no estem en final de pàgina
fill(0);//color negre
if (x>2){//fins que no hi ha dos punts no podem calcular un valor real
//fila dades
text(day(), 10, 60+i*20);
text("/",25, 60+i*20);
text(nf(month(),2), 30, 60+i*20);
text("/",45, 60+i*20);
text(year(), 50, 60+i*20);
text(hour(),90, 60+i*20);
text(":",105, 60+i*20);
text(nf(minute(),2), 110, 60+i*20);
text(":",125, 60+i*20);
text(second(),130, 60+i*20);
text(";",150, 60+i*20);
text(TempC, 155, 60+i*20);
i=i+1;// augmentem una fila
}
}
|
Si executem aquest programa obtindrem a la carpeta de sketchbook del programa ( /home/usuari/sketchbook/TempCpdf ) un fitxer PDF que al qual hem anomenat «TempC.pdf» i que té aquest contingut.
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0