Ciao a tutti, ho appena acquistato una Arduino Duemilanova e sono proprio alle prime armi... stò cercando di utilizzare un semplice display 7 segmenti e per ora sono riuscito a fare uno sketch che stampa i numeri (in hex) da 0 a F in sequenza. Ora il mio intento sarebbe quello di creare una libreria in modo che l'eventuale riutilizzo di questo programma sia immediato.Ho quindi creato i due file *.h e *.cpp e ho compilato il tutto... all'interno della mia libreria ho copiato le due funzioni utilizzate nells sketch precedente tra cui una chiamata test() che non fa altro che accendere e spegnere tutti i segmenti a distanza di mezzo secondo.
Il problema è che utilizzando la libreria e lanciando questa funzione i segmenti si illuminano a caso (alcuni con una luce meno intensa).
L'idea che mi sono fatto è che a causa di qualche errore nella libreria i pin non vengono impostati come OUTPUT, ma è solo un'ipotesi senza fondamento... vi posto i due file della libreria nella speranza che qualcuno possa aiutarmi:
_7Seg.h
#ifndef _7Seg_h
#define _7Seg_h
#include "WProgram.h"
class _7Seg
{
public:
_7Seg();
void print(int n);
void test();
private:
int pins[];
};
#endif
_7Seg.cpp
#include "WProgram.h"
#include "_7Seg.h"
_7Seg::_7Seg()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pins[0] = 2;
pins[1] = 3;
pins[2] = 4;
pins[3] = 5;
pins[4] = 6;
pins[5] = 7;
pins[6] = 8;
}
void _7Seg::print(int n)
{
byte numbers[16][7] = {
{0,0,0,0,0,0,1}, // 1
{1,0,0,1,1,1,1}, // 0
{0,0,1,0,0,1,0}, // 2
{0,0,0,0,1,1,0}, // 3
{1,0,0,1,1,0,0}, // 4
{0,1,0,0,1,0,0}, // 5
{0,1,0,0,0,0,0}, // 6
{0,0,0,1,1,1,1}, // 7
{0,0,0,0,0,0,0}, // 8
{0,0,0,0,1,0,0}, // 9
{0,0,0,1,0,0,0}, // A
{1,1,0,0,0,0,0}, // B
{0,1,1,0,0,0,1}, // C
{1,0,0,0,0,1,0}, // D
{0,1,1,0,0,0,0}, // E
{0,1,1,1,0,0,0}}; // F
for (int i=0 ; i<7 ; i++)
digitalWrite(pins[i], numbers[n][i]);
}
void _7Seg::test()
{
for (int i = 0; i < 7; i++)
digitalWrite(pins[i], 0);
delay (500);
for (int i = 0; i < 7; i++)
digitalWrite(pins[i], 1);
delay (500);
}