Buongiorno,
da poco ho riesumato un mio vecchio progetto di un semplice orologio con display 7 segmenti pilotato dall'Atmega328p. Questo orologio utilizzava la libreria SevenSeg.
Lo sketch è il seguente:
#include <SPI.h>
/* Orologio con Display a 7 Segmenti, Anodo comune, libreria SevenSeg
*/
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} //Per resettare da codice
#include <SevenSeg.h>
SevenSeg afficheur(Anode,Direct,10,6,3,1,0,9,12,2,11,8,7,5); //(Anode or Cathode, Direct or Transistor,a,b,c,d,e,f,g,dp,com1,com2,com3,com4)
int ore = A1; //<---- pulsante aggiungi ore
int minuti = A0; //<---- pulsante aggiungi minuti
int valore_ore = 0; //sempre 0 per ricominciare dopo reset automatico delle 24:00
int valore_minuti = 0;
unsigned long previousmillis = 0;
unsigned long intervallo = 60000; //<--- ogni minuto aggiorna l'ora. Sono 45.000 millisecondi con quarzo da 12Mhz, 60.000 con 16Mhz
unsigned long previousmillis2 = 0; //antirimbalzo pulsanti ora e minuti
unsigned long intervallo2 = 200;
int switch1;
int switch2;
void setup(){
}
void loop(){
tempo();
multiplexing();
set_time();
}
void tempo(){ //Calcolo del tempo
if(millis() - previousmillis > intervallo){ //<--- se il tempo attuale meno il tempo precedente è maggiore dell'intervallo
previousmillis = millis();
valore_minuti = valore_minuti + 1; //<--- aggiungi un minuto
if(valore_minuti == 60){ //<--- aggiungi un ora e azzera i minuti quando è a 60
valore_minuti = 0;
valore_ore = valore_ore + 1;
}
if(valore_ore == 24){
Reset_AVR(); //<------ resetta ATMega328 alle 24:00; evita lo spegnimento ogni 50 giorni
}
}
}
void multiplexing(){ //controllo 4 display 7 segmenti
afficheur.multiplex();
afficheur.cursor();
afficheur.clear();
if(valore_minuti < 10){
afficheur.setCursor(3);
afficheur.print("0");
afficheur.setCursor(4);
afficheur.print(valore_minuti);
}
else{
afficheur.setCursor(3);
afficheur.print(valore_minuti);
}
if(valore_ore < 10){
afficheur.setCursor(1);
afficheur.print("0");
afficheur.setCursor(2);
afficheur.print(valore_ore);
}
else{
afficheur.setCursor(1);
afficheur.print(valore_ore);
}
afficheur.setCursor(3);
afficheur.print(".");
afficheur.noCursor();
}
void set_time(){ //controllo pulsanti settaggio ore e minuti
switch1 = analogRead(ore);
switch2 = analogRead(minuti);
if(switch1 >= 900 && switch2 < 900){
if(millis() - previousmillis2 > intervallo2){
valore_ore = valore_ore + 1;
if(valore_ore > 24){
valore_ore = 0;
}
previousmillis2 = millis();
}
}
else if(switch1 < 900 && switch2 >= 900){
if(millis() - previousmillis2 > intervallo2){
valore_minuti = valore_minuti + 1;
if(valore_minuti > 60){
valore_minuti = 0;
}
previousmillis2 = millis();
}
}
else{
}
}
Qualche mese fai aggiornai l'IDLE di Arduino alla 1.6.1. Ora, quando aggiungo la libreria SevenSeg ed apro il vecchio progetto dell'orologio, quando cerco di compilare e caricare mi da i seguenti errori:
orologio_DIsplay_F5461BH.ino:11:20: error: 'Anode' was not declared in this scope
orologio_DIsplay_F5461BH.ino:11:26: error: 'Direct' was not declared in this scope
orologio_DIsplay_F5461BH.ino: In function 'void multiplexing()':
orologio_DIsplay_F5461BH.ino:54:13: error: 'class SevenSeg' has no member named 'multiplex'
orologio_DIsplay_F5461BH.ino:55:13: error: 'class SevenSeg' has no member named 'cursor'
orologio_DIsplay_F5461BH.ino:56:13: error: 'class SevenSeg' has no member named 'clear'
orologio_DIsplay_F5461BH.ino:58:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:59:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:60:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:61:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:64:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:65:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:68:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:69:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:70:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:71:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:74:15: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:75:15: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:77:13: error: 'class SevenSeg' has no member named 'setCursor'
orologio_DIsplay_F5461BH.ino:78:13: error: 'class SevenSeg' has no member named 'print'
orologio_DIsplay_F5461BH.ino:79:13: error: 'class SevenSeg' has no member named 'noCursor'
Errore durante la compilazione
La libreria caricata è la stessa utilizzata per il precedente progetto, in quanto avevo tenuto una copia della stessa.
Qualche soluzione?