home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Informatica ed Elettronica
Dedicato all'informatica per l'elettronica. Un posto in cui scambiarsi consigli nell'utilizzo di applicazioni legate al nostro hobby o per condividere del software per applicazioni elettroniche. (PS: E' vietato inserire link a materiale "pirata")


Orologio rtc
     
Autore Messaggio opzioni
papa





postato il:
12.10.2018, alle ore 13:06
Orologio rtc 

Ho preso da internet uno sketch di un orologio con rtc 1306,purtroppo il compilatore alla riga for(i=0;i registro da\' l\'errore expcted \';\' before \'registro\'.So che manca qualcosa nel for,ma nonostante mi sia sforzato,non sono riuscito a completarlo.Potete aiutarmi? Grazie



 qui iCodice: Seleziona tutto
    #include <LCD.h>
    #include <LiquidCrystal.h>

    /* --------------------------------------------------------------------------
    Imposto l\'orario su un modulo RTC (con interfaccia seriale I2C) tramite il
    keypad (# per settare la data e * per settare l\'orario) e poi lo mostro su
    un display LCD 20x4 con interfaccia seriale I2C \"YwRobot Arduino LCM1602
    IIC V1\". Il pin SDA di I2C ÃƒÂ¨ connesso alla pin analogico A4 mentre SCL e\'
    connesso alla pin analogico A5
    -------------------------------------------------------------------------- */
    #include \"Wire.h\"  // E\' richiesta da I2CIO.cpp

    // *************************************************************
    // IMPOSTAZIONE PER L\'OROLOGIO
    // *************************************************************
    #include \"RTClib.h\"
    RTC_DS1307 RTC;

    // *************************************************************
    // IMPOSTAZIONE PER IL KEYPAD
    // *************************************************************
    #include \"Keypad.h\"

    const byte ROWS = 4; //4 righe
    const byte COLS = 3; //3 colonne
    char keys[ROWS][COLS] =
    {
      {\'1\',\'2\',\'3\'},
      {\'4\',\'5\',\'6\'},
      {\'7\',\'8\',\'9\'},
      {\'*\',\'0\',\'#\'}
    };
    byte rowPins[ROWS] = {8, 7, 6, 5}; // Pin di arduino connessi ai pin 1,2,3 e 4 delle righe del keypad
    byte colPins[COLS] = {4, 3, 2};    // Pin di arduino connessi ai pin 5,6,7 delle righe del keypad
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

    // *************************************************************
    // IMPOSTAZIONI PER IL DISPLAY LCD
    // *************************************************************
    #include \"LiquidCrystal_I2C.h\" // Libreria LCD I2C
    // Imposta i pin usati sul chip I2C per le connessioni
    // con il display LCD: addr, en, rw ,rs ,d4 ,d5 ,d6 ,d7 ,bl ,blpol
    // ed inoltre pone l\'indirizzo del display a 0x27
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    // -------------------------------------------------------------
    // PROGRAMMA VERO E PROPRIO
    // -------------------------------------------------------------
    // Variabili globali necessarie al nostro progetto.
    #define StringaVuota \"                    \";
    String cifre=\"\";
    boolean AttivaModificaData;
    boolean AttivaModificaOra;

    void ScriviRiga3e4(String Frase3, String Frase4)
    {
       if (Frase3!=\"\")
       {
          lcd.setCursor(0, 2);  // 1° colonna - 3° riga
          lcd.print(Frase3);
       }
       if (Frase4!=\"\")
       {
          lcd.setCursor(0, 3);  // 1° colonna - 4° riga
          lcd.print(Frase4);
       }
    }

    void Pulisci3e4Riga()
    {
        String Vuota=\"                    \";
        ScriviRiga3e4(Vuota,Vuota);
    }

    void Pulisci4Riga()
    {
        String Vuota=\"                    \";
        ScriviRiga3e4(\"\",Vuota);
    }

    void MessaggioAvviso(String Frase1, String Frase2)
    {
        String Frase3=\"...:: \"+Frase1+\" ::...\";
        String Frase4=\">> \"+Frase2;
        ScriviRiga3e4(Frase3,Frase4);
    }

    void printLCD_DateTime(DateTime now)
    {
      char buffer[25]={\'\\0\'};
      sprintf(buffer, \"DATA: %02u/%02u/%u\",now.day(),now.month(),now.year());
      lcd.setCursor(0, 0);  // 1° colonna - 1° riga
      lcd.print(buffer);
      sprintf(buffer, \"ORA:  %02u:%02u:%02u\",now.hour(), now.minute(), now.second());
      lcd.setCursor(0, 1);  // 1° colonna - 2° riga
      lcd.print(buffer);
    }

    boolean EUnaDataCorretta(uint8_t dd, uint8_t mm, uint16_t yy)
    {
      uint8_t GGMese[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
      if ((mm<1) || (mm>12)) return false; // non e\' un mese!
      if (yy % 4 == 0) GGMese[1]=29; // Bisestile
      if (dd<1 || dd>GGMese[mm-1]) return false;
      return true;
    }

    boolean EUnOraCorretta(uint8_t hh, uint8_t mm, uint8_t ss)
    {
      if ( (hh>23) || (mm>59) || (ss>59) ) return false;
      return true;
    }


    void AnnullaSet()
    {
       AttivaModificaData=false;
       AttivaModificaOra=false;
       cifre=\"\";
    }

    void Registra()
    {
       DateTime DataOraRTC = RTC.now();
       DateTime DataOraNuova;
       uint8_t dd, mm, hh, ss;
       uint16_t yy;
       if (cifre.length()!=6) return; // ignoro # o * prima delle 6 cifre
       if (AttivaModificaOra==true)
       {
           hh=(uint8_t)cifre.substring(0,2).toInt();
           mm=(uint8_t)cifre.substring(2,4).toInt();
           ss=(uint8_t)cifre.substring(4,6).toInt();
           if ( EUnOraCorretta(hh,mm,ss) )
           {
             DataOraNuova=DateTime(DataOraRTC.year(),DataOraRTC.month(),
                                   DataOraRTC.day(),hh,mm,ss);
             RTC.adjust(DataOraNuova);
             MessaggioAvviso(\"SET ORA \",\"Orario settato!\");
           }
           else
             MessaggioAvviso(\"SET ORA \",cifre.substring(0,2)+\":\"
                                       +cifre.substring(2,4)+\":\"
                                       +cifre.substring(4,6)+\" ERRATA!\");
       }
       else if (AttivaModificaData==true)
       {
           dd=(uint8_t)cifre.substring(0,2).toInt();
           mm=(uint8_t)cifre.substring(2,4).toInt();
           yy=(uint16_t)(2000+cifre.substring(4,6).toInt());
           if ( EUnaDataCorretta(dd,mm,yy) )
           {
               DataOraNuova=DateTime(yy,mm,dd,DataOraRTC.hour(),
                                     DataOraRTC.minute(),DataOraRTC.second());
               RTC.adjust(DataOraNuova);
               MessaggioAvviso(\"SET DATA\",\"Data settata!\");
           }
           else
             MessaggioAvviso(\"SET DATA\",cifre.substring(0,2)+\"/\"
                                       +cifre.substring(2,4)+\"/\"
                                       +cifre.substring(4,6)+\" ERRATA!\");
       }
       AnnullaSet();
    }

    void StampaConSeparatore(String cifr)
    {
        int i;
        char sep=(AttivaModificaData) ? \'/\' : \':\';
        Pulisci4Riga();
        lcd.setCursor(0,3);
        lcd.print(\">> IN: \");
        for (i=0; i registro    // Qua e\' l\'errore
               Registra();
             else if (AttivaModificaOra)
             {
               AnnullaSet();  // Azzero l\'impostazione della data
               Pulisci3e4Riga();
             }
             else
             {
               AttivaModificaData=true;
               cifre=\"\";
               MessaggioAvviso(\"SET DATA\",\"IN: GG:MM:AA\");
             }
          }
          else if (key==\'*\') // Imposta orario
          {
             if (AttivaModificaOra) // 2° * => registro
               Registra();
             else if (AttivaModificaData)
             {
               AnnullaSet();  // Azzero l\'impostazione dell\'ora
               Pulisci3e4Riga();
             }
             else
             {
               AttivaModificaOra=true;
               cifre=\"\";
               MessaggioAvviso(\"SET ORA \",\"IN: HH:MM:SS\");
             }
          }
          else if (AttivaModificaOra || AttivaModificaData)
          {
            if (cifre.length()<6) // non vado oltre le 6 cifre
            {
                cifre=cifre+String(key);
                StampaConSeparatore(cifre);
            }
          }
        }
        delay(20);
    }
l codice 

gironico




una ogni 100 livelli


postato il:
12.10.2018, alle ore 14:18
non è solo un problema del ciclo for che parte da zero e che deve fare?
Dal tuo sketch non si capisce...

  for (i=0;i++; i<=registro)    // Qua e\' l\'errore 
               Registra(); 


già cosi è diverso... si capisce che il ciclo incrementa la variabile i fino al valore di registro....

che non è neanche dichiarata e non si capisce che valore deve avere

Poi viene il bello....

una cascata di ELSE .... ma La condizione IF?

Cioè.... fai questo(IF) altrimenti se la condizione non è soddisfatta fai altro (ELSE)

Copia incolla da internet è la pessima soluzione.... si inizia con cose semplici, non si parte con un lcd in i2c, un keypad e un rtc quando non si ha la minima idea di cosa si sta facendo e cosa abbiamo tra le mani....

Spiega cosa vuoi fare fare a questo sketch che è inintuibile... che deve visualizzare l'ora e chiaro... ma cosa deve fare, personalmente non l'ho capito.

Mi sembra uno sketch molto gomitoloso ...




La vita è troppo breve per bere vini mediocri
gironico




una ogni 100 livelli


postato il:
12.10.2018, alle ore 14:40
Cosi a naso potrebbe essere anche corretto ciò che è scritto, ma manca giusto un paio di cosette fondamentali per compilarlo bene....

   // #include <LCD.h> 
    #include <LiquidCrystal.h> 

    /* -------------------------------------------------------------------------- 
    Imposto l\'orario su un modulo RTC (con interfaccia seriale I2C) tramite il 
    keypad (# per settare la data e * per settare l\'orario) e poi lo mostro su 
    un display LCD 20x4 con interfaccia seriale I2C \"YwRobot Arduino LCM1602 
    IIC V1\". Il pin SDA di I2C ÃƒÂ¨ connesso alla pin analogico A4 mentre SCL e\' 
    connesso alla pin analogico A5 
    -------------------------------------------------------------------------- */ 
    #include "Wire.h"  // E\' richiesta da I2CIO.cpp 

    // ************************************************************* 
    // IMPOSTAZIONE PER L\'OROLOGIO 
    // ************************************************************* 
    #include "RTClib.h" 
    RTC_DS1307 RTC; 

    // ************************************************************* 
    // IMPOSTAZIONE PER IL KEYPAD 
    // ************************************************************* 
    #include "Keypad.h" 

    const byte ROWS = 4; //4 righe 
    const byte COLS = 3; //3 colonne 
    char keys[ROWS][COLS] = 
    { 
      {'1','2','3'}, 
      {'4','5','6'}, 
      {'7','8','9'}, 
      {'*','0','#'} 
    }; 
    byte rowPins[ROWS] = {8, 7, 6, 5}; // Pin di arduino connessi ai pin 1,2,3 e 4 delle righe del keypad 
    byte colPins[COLS] = {4, 3, 2};    // Pin di arduino connessi ai pin 5,6,7 delle righe del keypad 
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 

    // ************************************************************* 
    // IMPOSTAZIONI PER IL DISPLAY LCD 
    // ************************************************************* 
   #include "LiquidCrystal_I2C.h" // Libreria LCD I2C 
    // Imposta i pin usati sul chip I2C per le connessioni 
    // con il display LCD: addr, en, rw ,rs ,d4 ,d5 ,d6 ,d7 ,bl ,blpol 
    // ed inoltre pone l\'indirizzo del display a 0x27 
    LiquidCrystal_I2C lcd(0x27,16,2); 

    // ------------------------------------------------------------- 
    // PROGRAMMA VERO E PROPRIO 
    // ------------------------------------------------------------- 
    // Variabili globali necessarie al nostro progetto. 
    #define StringaVuota "                    "; 
    String cifre=""; 
    boolean AttivaModificaData; 
    boolean AttivaModificaOra; 

    void ScriviRiga3e4(String Frase3, String Frase4) 
    { 
       if (Frase3!="") 
       { 
          lcd.setCursor(0, 2);  // 1° colonna - 3° riga 
          lcd.print(Frase3); 
       } 
       if (Frase4!="") 
       { 
          lcd.setCursor(0, 3);  // 1° colonna - 4° riga 
          lcd.print(Frase4); 
       } 
    } 

    void Pulisci3e4Riga() 
    { 
        String Vuota="                    "; 
        ScriviRiga3e4(Vuota,Vuota); 
    } 

    void Pulisci4Riga() 
    { 
        String Vuota="                    "; 
        ScriviRiga3e4(" ",Vuota); 
    } 

    void MessaggioAvviso(String Frase1, String Frase2) 
    { 
        String Frase3="...:: "+Frase1+" ::..."; 
        String Frase4=">> "+Frase2; 
        ScriviRiga3e4(Frase3,Frase4); 
    } 

    void printLCD_DateTime(DateTime now) 
    { 
      char buffer[25]={'0'}; 
      sprintf(buffer, "DATA: %02u%02u%u",now.day(),now.month(),now.year()); 
      lcd.setCursor(0, 0);  // 1° colonna - 1° riga 
      lcd.print(buffer); 
      sprintf(buffer, "ORA:  %02u:%02u:%02u",now.hour(), now.minute(), now.second()); 
      lcd.setCursor(0, 1);  // 1° colonna - 2° riga 
      lcd.print(buffer); 
    } 

    boolean EUnaDataCorretta(uint8_t dd, uint8_t mm, uint16_t yy) 
    { 
      uint8_t GGMese[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; 
      if ((mm<1) || (mm>12)) return false; // non e\' un mese! 
      if (yy % 4 == 0) GGMese[1]=29; // Bisestile 
      if (dd<1 || dd>GGMese[mm-1]) return false; 
      return true; 
    } 

    boolean EUnOraCorretta(uint8_t hh, uint8_t mm, uint8_t ss) 
    { 
      if ( (hh>23) || (mm>59) || (ss>59) ) return false; 
      return true; 
    } 


    void AnnullaSet() 
    { 
       AttivaModificaData=false; 
       AttivaModificaOra=false; 
       cifre=""; 
    } 

    void Registra() 
    { 
       DateTime DataOraRTC = RTC.now(); 
       DateTime DataOraNuova; 
       uint8_t dd, mm, hh, ss; 
       uint16_t yy; 
       if (cifre.length()!=6) return; // ignoro # o * prima delle 6 cifre 
       if (AttivaModificaOra==true) 
       { 
           hh=(uint8_t)cifre.substring(0,2).toInt(); 
           mm=(uint8_t)cifre.substring(2,4).toInt(); 
           ss=(uint8_t)cifre.substring(4,6).toInt(); 
           if ( EUnOraCorretta(hh,mm,ss) ) 
           { 
             DataOraNuova=DateTime(DataOraRTC.year(),DataOraRTC.month(), 
                                   DataOraRTC.day(),hh,mm,ss); 
             RTC.adjust(DataOraNuova); 
             MessaggioAvviso("SET ORA ","Orario settato!"); 
           } 
           else 
             MessaggioAvviso("SET ORA ",cifre.substring(0,2)+":" 
                                       +cifre.substring(2,4)+":" 
                                       +cifre.substring(4,6)+" ERRATA!"); 
       } 
       else if (AttivaModificaData==true) 
       { 
           dd=(uint8_t)cifre.substring(0,2).toInt(); 
           mm=(uint8_t)cifre.substring(2,4).toInt(); 
           yy=(uint16_t)(2000+cifre.substring(4,6).toInt()); 
           if ( EUnaDataCorretta(dd,mm,yy) ) 
           { 
               DataOraNuova=DateTime(yy,mm,dd,DataOraRTC.hour(), 
                                     DataOraRTC.minute(),DataOraRTC.second()); 
               RTC.adjust(DataOraNuova); 
               MessaggioAvviso("SET DATA","Data settata!"); 
           } 
           else 
             MessaggioAvviso("SET DATA",cifre.substring(0,2)+" "
                                       +cifre.substring(2,4)+" " 
                                       +cifre.substring(4,6)+" ERRATA!"); 
       } 
       AnnullaSet(); 
    } 

    void StampaConSeparatore(String cifr) 
    {
       
        int i; 
        int registro;
        char sep=(AttivaModificaData) ; 
        Pulisci4Riga(); 
        lcd.setCursor(0,3); 
        lcd.print(">> IN: "); 
        for (i=0;i++; i<registro)    // Qua e\' l\'errore 
               Registra(); 
             if (AttivaModificaOra) 
             { 
               AnnullaSet();  // Azzero l\'impostazione della data 
               Pulisci3e4Riga(); 
             } 
             else 
             { 
               AttivaModificaData=true; 
               cifre=""; 
               MessaggioAvviso("SET DATA","IN: GG:MM:AA"); 
             } 
           
          if (keys=='*') // Imposta orario 
          { 
             if (AttivaModificaOra) // 2° * => registro 
               Registra(); 
              if (AttivaModificaData) 
             { 
               AnnullaSet();  // Azzero l\'impostazione dell\'ora 
               Pulisci3e4Riga(); 
             } 
             else 
             { 
               AttivaModificaOra=true; 
               cifre=""; 
               MessaggioAvviso("SET ORA ","IN: HH:MM:SS"); 
             } 
          } 
          else if (AttivaModificaOra || AttivaModificaData) 
          { 
            if (cifre.length()<6) // non vado oltre le 6 cifre 
            { 
               // cifre=cifre+String(keys); 
                StampaConSeparatore(cifre); 
            } 
           
          }
        delay(20); 
    } 


Apparte(fondamentale) il void setup soprattutto per le inizializzazioni di lcd e rtc....

ma il void loop?

inutile scrivere sub-routine se puoi non si richiamano nel loop infinito da far girare...

Secondo me, non me ne volere, ma è meglio che ripassi le basi della programmazione di Arduino prima di proseguire....
Per chiarimenti... con il meglio che si può fare.... siamo qui.... ma occorre le basi prima



La vita è troppo breve per bere vini mediocri
papa





postato il:
12.10.2018, alle ore 15:41
non ho molta conoscenza di programmazione,mi sono sforzato non riuscendo e mi sono rivolto a voi,oltretutto mi serve solo per tenermi attivo,considerando che ho una eta'...avanzata.Comunque ti mando il link da dove ho scaricato lo sketch.
http://www.brescianet.com/appunti/Elettronica/Arduino/corso/…
.Ti ringrazio e ti saluto
picmicro675




una ogni 10 livelli


postato il:
12.10.2018, alle ore 20:24
Se vuoi fare le braciole alla griglia, meglio se ne metti una alla volta.
Per questo comincia con un solo componente alla volta. Direi di montare il display e giocherellare a scrivere dei testi. Acquisita esperienza con quello, si potrebbe provare a montare il tastierino, vedere che è collegato bene che i numeri corrispondono e li fai scrivere al display.
Alla fine provi con l' RTC, vedi se legge i dati, se i collegamenti sono corretti.
Poi facci vedere cosa hai messo insieme, magari qualche foto.
Approp. A che punto stai con il montaggio ?



Anno nuovo, forum nuovo.
Mi sa che lascio.
papa





postato il:
12.10.2018, alle ore 23:10
se non risolvo il problema dello sketch a che serve montare il circuito.Lo sketch riveduto e corretto da gironico ,il compilatore mi da' adesso :errore durante la compilazione per la scheda arduino -genuino
picmicro675




una ogni 10 livelli


postato il:
13.10.2018, alle ore 05:10
papa:
il compilatore mi da' adesso :errore durante la compilazione per la scheda arduino -genuino


Eggià, come se lo vedessimo..... Quale ?
Scrivilo qui.
A me dice che senza main() e senza loop() non vai lontano
Arduino:1.8.7 (Linux), Scheda:"Arduino/Genuino Uno"

/tmp/ccbBCjpA.ltrans0.ltrans.o: In function `main':
/home/myself/.arduino15/packages/arduino/hardware/avr/1.6.20/cores/arduino/main.cpp:43: undefined reference to `setup'
/home/myself/.arduino15/packages/arduino/hardware/avr/1.6.20/cores/arduino/main.cpp:46: undefined reference to `loop'
collect2: error: ld returned 1 exit status
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.

Direi che da fare un progetto come questo senza essere passati dal far lampeggiare un semplice LED, direi che sono ambizioni senza risultati. Spero di sbagliarmi.



Anno nuovo, forum nuovo.
Mi sa che lascio.
papa





postato il:
13.10.2018, alle ore 07:51
ecco cosa viene fuori
ATTENZIONE: Cartella spuria .tests nella libreria 'Adafruit IO Arduino'
C:\Users\Federico\AppData\Local\Temp\ccXHIHpU.ltrans0.ltrans.o: In function `main':

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `setup'

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

Più di una libreria trovata per "LiquidCrystal.h"
Usata: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\libraries\LiquidCrystal
Non usata: C:\Users\Federico\Documents\Arduino\libraries\NewliquidCrystal
Più di una libreria trovata per "Wire.h"
Usata: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.15.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\libraries\Wire
Non usata: C:\Users\Federico\Documents\Arduino\libraries\Wire
Più di una libreria trovata per "LiquidCrystal_I2C.h"
Usata: C:\Users\Federico\Documents\Arduino\libraries\LiquidCrystal_I2C
Non usata: C:\Users\Federico\Documents\Arduino\libraries\NewliquidCrystal
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
13.10.2018, alle ore 13:20
papa:
se non risolvo il problema dello sketch a che serve montare il circuito.Lo sketch riveduto e corretto da gironico ,il compilatore mi da' adesso :errore durante la compilazione per la scheda arduino -genuino

Allarga in alto la finestra NERA degli errori per vedere QUALE errore ti da il compilatore

Hai installato tutte le librerie usate : <keypad.h>, <LiquidCrystal_I2C.h> che è DIVERSA da #include <LiquidCrystal.h>, RTC_DS1307.h?

Per la cronaca io ho testato il codice del sito linkato con la libreria dopo aver installato la libreria <LiquidCrystal_I2C.h>, ma il compilatore da errore sulla costante POSITIVE della dichiarazione, quindi non e' la libreria giusta (purtroppo ce ne sono svariate versioni)

Come ti hanno detto compila un pezzo alla volta con un codice ridotto che usa una sola libreia alla volta, altrimenti diventi matto!



"se peso cado, ma se cado non peso"
adamatj.altervista.org
picmicro675




una ogni 10 livelli


postato il:
13.10.2018, alle ore 13:29
La pagina da dove hai preso il codice ha altri sorgenti, che dovrebbero funzionare, che sono scopiazzati da qualcun altro. Quello che hai preso è incompleto e non rende a nulla.
Ci sono i link delle librerie usate, ma forse sono obsolete come anche tutta la pagina si riferisce a cose di una certa età.
Senza contare che un DS1302 ha una deriva di qualche minuto al giorno. Consiglio di prendere un DS3231.



Anno nuovo, forum nuovo.
Mi sa che lascio.
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale