Stò provando uno sketch di un orologio con Arduino NANO, un DS3231 e un display 4x7 segmenti.
Mi succede una cosa strana usando le medesime librerie sia un pc con Windows 10 che un mac OS Catalina.
Sul MAC lo compilo regolarmente e lo carico funziona regolarmente.
Se invece lo compilo con Windows10 mi da tutta una serie di errori:
Arduino:1.8.19 (Windows 10), Scheda:"Arduino Nano, ATmega328P"
DS3231_orologio_7digit:23:3: error: 'RTCDateTime' does not name a type; did you mean 'DateTime'?
RTCDateTime dt;
^~~~~~~~~~~
DateTime
DS3231_orologio_7digit:24:10: error: 'DS3231 clock' redeclared as different kind of symbol
DS3231 clock;
^~~~~
In file included from C:\Users\egimi\Documents\Arduino\libraries\DS3231-1.1.2/DS3231.h:28:0,
from C:\Users\egimi\Desktop\DS3231_orologio_7digit\DS3231_orologio_7digit.ino:13:
c:\users\egimi\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\time.h:164:20: note: previous declaration 'clock_t clock()'
extern clock_t clock(void);
^~~~~
C:\Users\egimi\Desktop\DS3231_orologio_7digit\DS3231_orologio_7digit.ino: In function 'void setup()':
DS3231_orologio_7digit:33:11: error: request for member 'begin' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
clock.begin();
^~~~~
DS3231_orologio_7digit:34:11: error: request for member 'enable32kHz' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
clock.enable32kHz(false);
^~~~~~~~~~~
DS3231_orologio_7digit:35:11: error: request for member 'setOutput' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
clock.setOutput(DS3231_1HZ);
^~~~~~~~~
DS3231_orologio_7digit:35:21: error: 'DS3231_1HZ' was not declared in this scope
clock.setOutput(DS3231_1HZ);
^~~~~~~~~~
C:\Users\egimi\Desktop\DS3231_orologio_7digit\DS3231_orologio_7digit.ino:35:21: note: suggested alternative: 'DS3231_h'
clock.setOutput(DS3231_1HZ);
^~~~~~~~~~
DS3231_h
DS3231_orologio_7digit:36:11: error: request for member 'enableOutput' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
clock.enableOutput(true);
^~~~~~~~~~~~
C:\Users\egimi\Desktop\DS3231_orologio_7digit\DS3231_orologio_7digit.ino: In function 'void loop()':
DS3231_orologio_7digit:43:11: error: request for member 'enable32kHz' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
clock.enable32kHz(state);
^~~~~~~~~~~
C:\Users\egimi\Desktop\DS3231_orologio_7digit\DS3231_orologio_7digit.ino: In function 'void Temperatura()':
DS3231_orologio_7digit:66:22: error: request for member 'readTemperature' in 'clock', which is of non-class type 'clock_t() {aka long unsigned int()}'
int temp = clock.readTemperature();
^~~~~~~~~~~~~~~
exit status 1
'RTCDateTime' does not name a type; did you mean 'DateTime'?
Il sorgente è questo:
/************** Funziona! ******************
* 4 x 7digit
* 2 febbraio 2024
* Scheda: "Arduino NANO"
* Processore:"ATMega328P"
* Porta: "/dev/cu.chusbserial1410" su Windows
* Arduino NANO: SDA(A4) pin 27, SCL(A5) pin 28
* Visualizza ore e minuti
* Visualizza la temperatura
* Aggiunto led 1Hz
********************************************/
#include <Wire.h>
#include <DS3231.h>
#include "LedControl.h"
#define DS3231_I2C_ID 0x68
boolean state;
int Secondi = 0;
int Minuti =0;
int Ora = 0;
RTCDateTime dt;
DS3231 clock;
LedControl lc=LedControl(12,11,10,1);
void setup() {
Serial.begin(9600);
Wire.begin();
lc.shutdown(0,false);
lc.setIntensity(0,8); // intensità digit
lc.clearDisplay(0); // spegne i display
clock.begin();
clock.enable32kHz(false);
clock.setOutput(DS3231_1HZ);
clock.enableOutput(true);
}
void loop() {
Orario();
Visualizza(Ora, Minuti);
delay(5000);
clock.enable32kHz(state);
state = !state;
Temperatura();
delay(2000);
}
void Orario() {
Wire.beginTransmission(DS3231_I2C_ID);
Wire.write(0x0);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ID, 3); // legge 3 bytes
Secondi = bcd2dec(Wire.read() & 0b1111111);
Minuti = bcd2dec(Wire.read() & 0b1111111);
Ora = bcd2dec(Wire.read() & 0b00111111);
//Serial.print(" ");
//Serial.print(Ora);
//Serial.print(":");
//Serial.println(Minuti);
}
void Temperatura(){
int temp = clock.readTemperature();
//Serial.print(" ");
//Serial.print(temp);
//Serial.println("°C");
lc.clearDisplay(0);
int resultTd = temp/10; // ottengo la decina
int resultTu = temp - (resultTd*10); // ottengo l'unità
lc.setDigit(0,3,resultTu,true); // mimuti unità
lc.setDigit(0,2,resultTd,true); // minuti decina
}
void Visualizza(int Ora, int Minuti){
int resultMd = Minuti/10; // ottengo la decina
int resultMu = Minuti - (resultMd*10); // ottengo la sola unità
lc.setDigit(0,3,resultMu,true); // mimuti unità
lc.setDigit(0,2,resultMd,true); // minuti decina
int resultHd = Ora/10; // ottengo la decina
int resultHu = Ora - (resultHd*10); // ottengo la sola unità
lc.setDigit(0,1,resultHu,false); // ore unità
lc.setDigit(0,0,resultHd,false); // ore decina
}
// Converte da (BCD) a numero decimale
byte bcd2dec(byte val) {
return ((val/16*10) + (val%16));
}
Ho bisogno di un aiuto
EzioGi