Skip to content

Afisare ceas pe LCD

1. Cuvant inainte

Continuare din pagina “Transformarea in Sanguino“. Exemplul urmator este asemanator cu cel din pagina „Ceas cu RTC PCF8583” cu diferenta ca de data asta, afisarea datei si orei se face pe display-ul LCD. Setarea se face in continuare folosind terminalul.

2. Setare placa

Ca in pagina de mai sus dar de data aceasta conectam si display-ul LCD.

Wire  connections
 ATmega pins
LCD pins  Alias
 Digital 22 RS
 –
 Digital 23 E
 –
 Digital 24 (atentie, pinul Digital 24 este dupa Vref)
 A4
 
 Digital 25  A5  
 Digital 26  A6  
 Digital 27  A7  

Conectam cablul USB si lansam Arduino IDE in executie.

3. Schita

#include <Wire.h> // necessary, or the application won't build properly
#include <stdio.h>
#include <PCF8583.h>
#include <LiquidCrystal.h>
/*****************************************************************************
 *  read/write serial interface to PCF8583 RTC via I2C interface
 *
 *  You can set the type by sending it YYMMDDhhmmss;
 *  the semicolon on the end tells it you're done...
 *
 ******************************************************************************/

int correct_address = 0;
PCF8583 p (0xA2);// the device's I2C read address on our board
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

void setup(void){
  Serial.begin(9600);
  Serial.print("booting...");
  Serial.println(" done");
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("booting... done!");
  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("                ");
}

void loop(void){
  if(Serial.available() > 0){
       p.year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48));
       // Use of (byte) type casting and ascii math to achieve result.

       if(Serial.read() == ';'){
         Serial.println("setting date");
	 p.set_time();
       }
  }

  p.get_time();
  char date[9];
  sprintf(date, "%02d/%02d/%02d",
	  p.year, p.month, p.day);
  lcd.setCursor(0, 0);
  lcd.print(date);
  //
  char time[9];
  sprintf(time, "%02d:%02d:%02d",
	  p.hour, p.minute, p.second);
  //Serial.println(time);
  lcd.setCursor(0, 1);
  lcd.print(time);
  delay(990);
}

Dupa compilare fara erori, incarca programul pe placa si seteaza ora folosind terminalul.

4. Rezultate

In filmulet, firele sunt conectate altfel. Asta era inainte sa „standardizez” conexiunile…

Lasă un comentariu

Va rog, nu folositi limbaj de messenger. Multumesc!

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: