Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Sketch ds3231, arduino uno, display 20x4 sda-scl

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[21] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto UtenteThEnGi » 25 giu 2023, 17:12

In un mio progetto un componente che fa da RTC fa RTC, se mi serve la temperatura metto un sensore che banalmente potrebbe essere anche un PTN/NTC.

però è facile da implementare
Codice: Seleziona tutto
temp = rtc.getTemperature();
temp = temp - 1,3;


O_/
Avatar utente
Foto UtenteThEnGi
2.230 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[22] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 25 giu 2023, 18:53

//float temp2=-1; // variabile
//int temp2=-1
//temp2=-1
const temp2=-1
lcd.print(temp-temp2);


provato con le tue righe, con costante e float ma non sottrae
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[23] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utentenicsergio » 25 giu 2023, 19:36

Nel codice che ti avevo passato temp è un array di char, per correggere la temperatura basta che modifichi la mia riga

Codice: Seleziona tutto
dtostrf(rtc.getTemperature(),5,1,temp);


in

Codice: Seleziona tutto
dtostrf(rtc.getTemperature() - 1.3,5,1,temp);


Per il led lampeggiante prova da solo, guarda l'esempio dell'IDE di Arduino BlinkWithoutDelay
Avatar utente
Foto Utentenicsergio
4.701 3 9 13
Master
Master
 
Messaggi: 938
Iscritto il: 1 gen 2020, 16:42

0
voti

[24] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utentedjnz » 25 giu 2023, 20:55

apollo17 ha scritto:Uscita 1 Hz su sqw
Wire.write(0x07); // indirizza il registro
Wire.write(B00010000); // scrive il valore


Stando al datasheet pagina 13, l'indirizzo del registro di controllo è 0x0E, e il valore da scriverci dovrebbe essere 0.
Una domanda ben posta è già mezza risposta.
Avatar utente
Foto Utentedjnz
1.590 1 4 7
Master
Master
 
Messaggi: 709
Iscritto il: 26 lug 2020, 14:52

0
voti

[25] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 25 giu 2023, 21:22

dtostrf(rtc.getTemperature() - 1.3,5,1,temp);


perfetto, grazie =D> =D>
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[26] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto UtenteEtemenanki » 25 giu 2023, 22:26

apollo17 ha scritto:sulla temperatura segna sempre +1,3 gradi in più, basterebbe togliere un grado

Considera che l'RTC e' un componente che funzionando si scalda, anche se poco, la temperatura letta dal sensore interno non e' pensata per essere usata come temperatura ambiente ma solo come eventuale sua compensazione.

Molto piu preciso se metti un qualsiasi sensore esterno (lontano da altri componenti e vicino ad un'apertura, se possibile), per misurare meglio la reale temperatura ambiente.

Anche solo una NTC, piu e' piccola come dimensioni, minore sara' la sua inerzia termica e piu velocemente rispondera' alle variazioni della temperatura ambiente.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
9.527 3 6 10
Master
Master
 
Messaggi: 5948
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[27] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 26 giu 2023, 8:28

Non riesco ad inserire tale sketch all 'interno dello sketch che per correttezza allego, ho provato in diversi punti... rigjhe di programma ma nella compilazione da errore.
A proposito per allegare intero sketch come si fa?



Codice: Seleziona tutto
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(100);                       // wait for a second
}



error: expected unqualified-id before 'if'

if (ss < 10) lcd.print("0");

^~

lcd.print(ss);
===============================================
Codice: Seleziona tutto
#include <Wire.h>                   // for I2C communication
#include <LiquidCrystal_I2C.h>      // for LCD
#include <RTClib.h>                 // for RTC

LiquidCrystal_I2C lcd(0x27, 20, 4); // create LCD with I2C address 0x27, 16 characters per line, 2 lines
RTC_DS3231 rtc;                     // create rtc for the DS3231 RTC module, address is fixed at 0x68
/*
   function to update RTC time using user input
*/
void updateRTC()
{
 
  lcd.clear();  // clear LCD display
  lcd.setCursor(0, 0);
  lcd.print("Edit Mode...");

  // ask user to enter new date and time
  const char txt[6][15] = { "year [4-digit]", "month [1~12]", "day [1~31]",
                            "hours [0~23]", "minutes [0~59]", "seconds [0~59]"};
  String str = "";
  long newDate[6];

  while (Serial.available()) {
    Serial.read();  // clear serial buffer
  }

  for (int i = 0; i < 6; i++) {

    Serial.print("Enter ");
    Serial.print(txt[i]);
    Serial.print(": ");

    while (!Serial.available()) {
      ; // wait for user input
    }

    str = Serial.readString();  // read user input
    newDate[i] = str.toInt();   // convert user input to number and save to array

    Serial.println(newDate[i]); // show user input
  }

  // update RTC
  rtc.adjust(DateTime(newDate[0], newDate[1], newDate[2], newDate[3], newDate[4], newDate[5]));
  Serial.println("RTC Updated!");
}
/*
   function to update LCD text
*/
void updateLCD()
{
pinMode(13, OUTPUT); 
  /*
     create array to convert digit days to words:

     0 = Sunday    |   4 = Thursday
     1 = Monday    |   5 = Friday
     2 = Tuesday   |   6 = Saturday
     3 = Wednesday |
  */
  const char dayInWords[7][9] = {"domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato"};
  /*
     create array to convert digit months to words:

     0 = [no use]  |
     1 = January   |   6 = June
     2 = February  |   7 = July
     3 = March     |   8 = August
     4 = April     |   9 = September
     5 = May       |   10 = October
     6 = June      |   11 = November
     7 = July      |   12 = December
  */
  const char monthInWords[13][4] = {" ", "gen", "Feb", "Mar", "Apr", "Mag", "Giu",
                                         "Lug", "Ago", "Set", "Ott", "Nov", "Dic"};
// LEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(100);                       // wait for a second
}
  // get time and date from RTC and save in variables
  DateTime rtcTime = rtc.now();
  int hh = rtcTime.hour();     // nuova riga per 24 ore
  int ss = rtcTime.second();
  int mm = rtcTime.minute();
 
  int DD = rtcTime.dayOfTheWeek();
  int dd = rtcTime.day();
  int MM = rtcTime.month();
  int yyyy = rtcTime.year();

  // move LCD cursor to upper-left position
  lcd.setCursor(0, 0);  // cursore no
  lcd.print("Data:");
  // print date in dd-MMM-yyyy format and day of week
  lcd.setCursor(7, 0);  // date sette spazi sx riga =0
   
  if (dd < 10) lcd.print("0");  // add preceeding '0' if number is less than 10
  lcd.print(dd);
  lcd.print("-");
  lcd.print(monthInWords[MM]);
  lcd.print("-");
  lcd.print(yyyy);
  lcd.setCursor(8, 1);
  lcd.print("  ");
  lcd.print(dayInWords[DD]);


  // move LCD cursor to lower-left position
  lcd.setCursor(0, 3);
  lcd.print ("Ora :");
  lcd.setCursor(7, 3); // test ok  // print orario :primo valore sposta da sx a dx primo carattere sulla stessa riga /secondo valore sposta intera riga partendo da 0
  //int hh = rtcTime.hour();
  // print time in 12H format
  if (hh < 10) lcd.print("0");
  lcd.print(hh);
  lcd.print(':');

  if (mm < 10) lcd.print("0");
  lcd.print(mm);
  lcd.print(':');

  if (ss < 10) lcd.print("0");
  lcd.print(ss);

  // if (rtcTime.isPM()) lcd.print(" PM"); // print AM/PM indication
// else lcd.print(" AM");
}
void setup()
{
  Serial.begin(9600); // initialize serial

  lcd.init();       // initialize lcd
  lcd.backlight();  // switch-on lcd backlight

  rtc.begin();       // initialize rtc
}
void loop()
{
  updateLCD();  // update LCD text
lcd.setCursor(0,2);     //  TEMPERATURA    TEMPERATURA
lcd.print(F("Temp: "));
char temp[6];
// dtostrf(rtc.getTemperature(),5,1,temp);
dtostrf(rtc.getTemperature() - 1.3,5,1,temp);
lcd.print(temp);
lcd.setCursor(12,2);
lcd.print(F("'C"));
  if (Serial.available()) {
    char input = Serial.read();
    if (input == 'u') updateRTC();  // update RTC time
  }
}
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[28] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 26 giu 2023, 8:38

Considera che l'RTC e' un componente che funzionando si scalda...


Certo sono d'accordo; ma non esigo una precisione assoluta, poi in verità dopo la correzione consigliata da" nicsergio" con sonda termometro semi professionale lo scarto è ridotto a a 0.1- 0,2 gradi. La rtc è al momento senza contenitore...
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[29] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 26 giu 2023, 12:51

non ci riesco, presumo all ìinterno di un loop? Esce fuori errori sui secondi-
Ma non è meglio una subroutine per non andare ad intaccare altri lool? Come si fa?
Idem per uscita sqw della rtc, presumo.
Ho provato anche senza void setup



//void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[30] Re: Sketch ds3231, arduino uno, display 20x4 sda-scl

Messaggioda Foto Utenteapollo17 » 26 giu 2023, 16:23

per simbolo °C il cerchitto in alto sulla sx si fa con :lcd.print((char)223);
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti