Elettronica‎ > ‎

Arduino orologio interno


In questo esempio vengono scritte sulla seriale l'ora (variabile "hours") i minuti (variabile "minutes") ed i secondi (variabile "seconds") trascorsi dall'accensione della scheda Arduino. Le variabili possono essere inizializzate a piacimento (via software o hardware ad es. con display e pulsanti).
Il codice di questo semplice esempio può essere implementato in progetti che richiedano l'orario (es. cronotermostato) senza aggiungere componenti esterni.

Codice:

#define MAX_MILLIS_VALUE 34359738 
 
unsigned long current_millis_value = 0; 
unsigned long previous_millis_value = 0; 
unsigned long m = 0; 
unsigned int seconds = 0; 
unsigned int minutes = 0; 
unsigned int hours = 0; 

void setup() {
  Serial.begin(9600);
  }

void loop() { 
   
  cli();  // disable interrupts 
  current_millis_value = millis(); 
  sei();  // enable interrupts 
   
  // overflow millis() 
  if (current_millis_value < previous_millis_value) 
     m += MAX_MILLIS_VALUE - previous_millis_value + current_millis_value; 
  else m += current_millis_value - previous_millis_value; 
   
  seconds += m / 1000; 
  m = m % 1000; 
  minutes += seconds / 60; 
  seconds = seconds % 60; 
  hours += minutes / 60; 
  minutes = minutes % 60; 
  hours = hours % 24; 
  previous_millis_value = current_millis_value; 
  
  //visualizzo sulla seriale
  Serial.print("Ore: ");
  Serial.print(hours);
  Serial.print(" Minuti: ");
  Serial.print(minutes);
  Serial.print(" Secondi: ");
  Serial.println(seconds);
  delay(150); 
   
Comments