Proyecto: marcador cotización del bitcoin

Hola amigos,
me gustaría presentaros el proyecto que estoy llevando a cabo. Es una marcador de sobremesa para vigilar la cotización del bitcoin.

Lo he llevado a cabo con una pantalla de nokia para arduino y un arduino pro mini. Los componentes están soldados en una placa de topos y tiene una carcasa hecha con un boligrafo que imprime plástico abs, tipo impresora 3D pero a mano alzada (como se puede apreciar por el acabado :cold_sweat:)
Os enseño una foto:

El dato se lo manda un programilla hecho con processing que a su vez lo toma de internet. Tiene un pulsador con el que controlo la luz de la pantalla. Y de momento eso es todo lo que hace, mostrar el precio que actualiza cada 10 minutos, aunque me gustaría ir añadiéndole alguna otra función, como mostrar una gráfica con la evolución y similar.

Os dejo el código para que os sintais libres de utilizarlo o de hacerme alguna corrección, que seguro que se pueden hacer muchas.

Codigo Arduino:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

#define LUZ 9
#define BOTON 2

int precio=0; //precio del bitcoin
int cociente=0; // cociente de la division con 254 para poder enviarlo por los 8bits del usb
int resto=0; // idem
int lectura=0;//lectura que llega del usb

// Software SPI (slower updates, more flexible pin options):
// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CE)
// pin 6 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

void setup(){
Serial.begin(9600);

pinMode(LUZ,OUTPUT);
pinMode(BOTON, INPUT_PULLUP);

display.begin();
display.setContrast(128);
}

void loop() {
static int sincro=-1;

//luz encendida mientras el botón esté pulsado, lógica invertida por la resistencia de pullup
if (digitalRead(BOTON)==LOW) analogWrite(LUZ,70); // no pasar de 100 pues está conectado directamente a 5v y el nivel lógico son 3,3v, no vaya a ser que se queme algo
else analogWrite(LUZ,0);

// reconstrucción del dato
if (sincro==0 && lectura!=255){
resto=lectura;
sincro=1;
}
if (sincro==1 && lectura!=resto && lectura!=255){
cociente=lectura;
sincro=2;
}
if (lectura==255) sincro=0;

precio= 254*cociente + resto ;
// fin reconstrucción del dato

//impresión por pantalla
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(BLACK);
display.setCursor(0,10);
display.println(precio);

display.setTextSize(1);
display.setCursor(54,24);
display.println("$/BTC");
display.display();
//delay(100);

}

void serialEvent() {
// función que se ejecuta solo cuando hay un dato en el usb
lectura=Serial.read();
}

Código Processing:

import processing.serial.*;
Serial arduino;

int precio=0;
long tiempo=0;
int trigered=0;

void setup () {
// abre el puerto
String portName = Serial.list()[0];
arduino = new Serial(this, portName, 9600);
}

void draw () {
float price=0;
int resto=0,cociente=0;

//solo entra en el bucle cada 10 minutos o cuando el programa está recien arrancado
if ( (millis() - tiempo) > 600000 || trigered<=2){
String lines[] = loadStrings("http://blockchain.info/es/q/24hrprice"); //coge el dato de la API de blockchain.info
// https://www.bitstamp.net/api/ticker/ //otra posible fuente de datos
price = Float.parseFloat(lines[0]);
precio = int(price); //transforma el dato de cadena a float y luego a int
tiempo=millis();

trigered++;
if (trigered>1000) trigered=100;// para evitar desbordamientos

//preparar el dato para enviarlo, ya que solo se puede enviar 8bits, es decir, hasta 254;
resto= precio % 254;
cociente= precio / 254;
//el precio se descodicfica: precio = 254*cociente + resto

arduino.write(0xff); //sincronización
delay(10);//retraso de seguridad
arduino.write(resto);
delay(10);
arduino.write(cociente);
//delay(10);
}
/*
println("*********");
println(precio);
println(resto);
println(cociente);
*/

}

Y si alguno ve que esto le es útil puede sentrise libre también de hacer una donación en bitcoin para el proyecto: 1Df7eWyXC645xwR7DhuL9Bg4tQz1ZGhWUe

Me gustaría subir un esquema con fritzing pero aun me estoy peleando con él.