Buenas, compre por ebay una matriz de leds de sure electronics de 8x32 pixels de color verde.
He modifcado un codigo para mostrar la temperatura de un lm 35, ire modificandolo para mejorarlo con ayuda de vosotros y lo dejare aqui posteado por si os sirve de ayuda, dejare escrito en el codigo donde se tienen que poner los cables para que no haya perdida al montarlo, fijense que muchas cosas estan en ingles del codigo de la matriz de leds, no tengo suficientes conocimientos para explicar para que son las lineas de codigo esas.
En el codigo sobran cosas pero por ahroa es funcional, ire modificandolo para quitar lo que no se necesite
/*
Conector del Display Pines digitales del Arduino Sure's Connector
CS1 4 3
CS2 5 1
CS3 6 2
CS4 7 4
WR 8 5
DATA 9 7
RD 10 6
GND gnd 11
+5V +5V 12
*/
#include "MatrixDisplay.h"
#include "DisplayToolbox.h"
#include "font.h"
#define DEMOTIME 30000 // 30 seconds max on each demo is enough.
#define DISPDELAY 100 // Each "display" lasts this long
#define LONGDELAY 1000 // This delay BETWEEN demos
#define SCROLLSPEED 50 /// time in Miliseconds to wait between shifts
#define MAXSTRING 50
// Macro to make it the initDisplay function a little easier to understand
#define setMaster(dispNum, CSPin) initDisplay(dispNum,CSPin,true)
#define setSlave(dispNum, CSPin) initDisplay(dispNum,CSPin,false)
const byte nDisp = 2;// Numero de displays si pongo solo 1 no me funciona
const byte pinData = 9;// Data
const byte pinWR = 8;// WR
const byte pinCS1 = 4; //
const byte pinCS2 = 5;
int lm35 = A0;
int temperatura = 0;
int temp2 = 0;
// Init Matrix
MatrixDisplay disp(nDisp,pinWR,pinData, true);
// Pass a copy of the display into the toolbox
DisplayToolbox toolbox(&disp);
// Prepare boundaries
uint8_t X_MAX = 0;
uint8_t Y_MAX = 0;
//setup banner
char banner[MAXSTRING];
void setup() {
// Fetch bounds (dynamically work out how large this display is)
X_MAX = disp.getDisplayCount() * (disp.getDisplayWidth()-1)+1;
Y_MAX = disp.getDisplayHeight();
// Prepare displays
disp.setMaster(0,pinCS1);
disp.setSlave(1,pinCS2);
// disp.setSlave(2,6);
// disp.setSlave(3,7);
pinMode(lm35, INPUT); //Li diem que el pin del LM35 es una entrada
Serial.begin (9600); //inicia comunicacio al monitor serie per a llegir al pc tambe
}
/*
* Copy a character glyph from the myfont data structure to
* display memory, with its upper left at the given coordinate
* This is unoptimized and simply uses setPixel() to draw each dot.
*/
void drawChar(uint8_t x, uint8_t y, char c)
{
uint8_t dots;
if (c >= 'A' && c <= 'Z' ||
(c >= 'a' && c <= 'z') ) {
c &= 0x1F; // A-Z maps to 1-26
}
else if (c >= '0' && c <= '9') {
c = (c - '0') + 27;
}
else if (c == ' ') {
c = 0; // space
}
for (char col=0; col< 5; col++) {
dots = pgm_read_byte_near(&myfont[c][col]);
for (char row=0; row < 7; row++) {
if (dots & (64>>row)) // only 7 rows.
toolbox.setPixel(x+col, y+row, 1);
else
toolbox.setPixel(x+col, y+row, 0);
}
}
}
// Write out an entire string (Null terminated)
void drawString(uint8_t x, uint8_t y, char* c)
{
for(char i=0; i< strlen(c); i++)
{
drawChar(x, y, c[i]);
x+=6; // Width of each glyph
}
}
//-------------- funcio del LM35
void lm()
{
//Calcula la temperatura amb referencia de 5v
temperatura = (5.0 * analogRead(lm35)*100.0)/1024.0; //variable pk doni la temp correcta
temp2 = ((5.0 * analogRead(lm35)*100.0)/1024.0)/10; //variable per a donar els decimals no funcion be encara
Serial.begin (9600);
Serial.println (temperatura); //escriu la temperatura al monitor serie
delay (10);
}
//----------------------------------------------
void scrollText(){
int x = X_MAX;
int charsFinished = 0;
char visible[11]; //create visible array to hold string
int i = 0;
unsigned long lastUpdate = 0; //variable used for scrolling function
for (int n = 0; n < 11; n++){ //fill visible array with first char of string
visible[n] = banner[n];
}
while(charsFinished < strlen(banner)){ //while string still has characters
if(millis() - lastUpdate > SCROLLSPEED){
lastUpdate = millis();
visible[11]='\0';
drawString(x, 0, visible); //draw visible array
disp.syncDisplays();
x--;
if (x <= -6){ //after each character is finished
charsFinished++; //advance one character
x = 0;
i = 0;
while(i < 11 && banner[i + charsFinished] != '\0'){
visible[i] = banner[i + charsFinished];
i++;
}
visible[i] = banner[i + charsFinished];
}
disp.clear();
}
}
}
void loop() {
lm();
sprintf(banner,"Temperatura interior " "%d" " Graus", temperatura);
scrollText();
delay(10);
}