Está en la página 1de 16

POR: HOLMAN TRUJILLO ESPINOSA

Informe Actividad 1
COMUNICACIÓN I2C
Descripción de la actividad
La presente actividad pretende que el estudiante interactúe y aplique la
comunicación I2C por medio de una LCD 16*2 la cual está diseñada para este
fin, por medio de 2 pines SDA Y SCL, y sus pines para energizar el dispositivo,
se evidencia claramente la facilidad de conexión y el mejoramiento del enlace
de comunicación al ser este más eficaz y rápido.
Se programa la captura de la hora para ser mostrada en la LCD 16*2 y se
parte de allí para realizar una serie de acciones a modificar de acuerdo con
las instrucciones asignadas por el instructor.
La programación permite modificar, La hora, minutos y segundos; a través de
3 Pulsadores en configuración Pull Up, donde cada uno cumple así una
función:
PULSADORES:
1. Modo
2. Ascender
3. Descender
Estos pulsadores, modifican parámetros del reloj, como la hora, minutos y
segundos, siendo el pulsador Modo, la función principal, es decir aquel con la
capacidad de Ingresar a un tipo de menú, y alterar las variables que se han
programado.
Código fuente
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

RTC_DS1307 rtc;

int modo = 0;

int hora;
int minutos;
int segundos;

int horaOn = 0;
int minutosOn = 0;

int horaOff = 0;
int minutosOff = 0;

long previousMillis = 0;
long interval = 1000;

int fb1 = 0;
int fb2 = 0;
int fb3 = 0;

void setup () {
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (4, INPUT);
pinMode (13, OUTPUT);

Wire.begin();
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
lcd.begin();
lcd.backlight();
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("Horas ");
}

void loop () {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (modo < 2)
MostrarHora();
}
ModificarHora();
Temp();
}

void Temp(){
if(hora==horaOn&&minutos==minutosOn){
digitalWrite(13,HIGH);
}

if(hora==horaOff&&minutos==minutosOff){
digitalWrite(13,LOW);
}
}

void MostrarHora() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
}
void ModificarHora() {
DateTime now = rtc.now();
//modo 0-HH 1-mm 2-HHmmOn 3 HHmmOff
if (digitalRead(2) && fb1 == 0) {
fb1 = 1;
modo++;
if (modo == 4)
modo = 0;
if (modo == 0) {
lcd.setCursor(0, 1);
lcd.print("Horas ");
}
if (modo == 1) {
lcd.setCursor(0, 1);
lcd.print("minutos ");
}
if (modo == 2) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(horaOn);
lcd.print(':');
lcd.print(minutosOn);
lcd.setCursor(0, 1);
lcd.print("Hora ON ");
}
if (modo == 3) {
lcd.setCursor(0, 0);
lcd.print(horaOn);
lcd.print(':');
lcd.print(minutosOn);
lcd.setCursor(0, 1);
lcd.print("Minutos ON ");
}
}
if (!digitalRead(2) && fb1 == 1) {
fb1 = 0;
}

//Up
if (digitalRead(3) && fb2 == 0) {
fb2 = 1;
hora = now.hour();
minutos = now.minute();
segundos = now.second();

if (modo == 0) {
hora++;
if (hora == 24)
hora = 0;
}

if (modo == 1) {
minutos++;
if (minutos == 60)
minutos = 0;
}

if (modo == 2) {
horaOn++;
if (horaOn == 24)
horaOn = 0;
}

if (modo == 3) {
minutosOn++;
if (minutosOn == 60)
minutosOn = 0;
}

if (modo == 0 || modo == 1)
rtc.adjust(DateTime(2020, 3, 6, hora, minutos, segundos));
if (modo == 2 || modo == 3) {
lcd.setCursor(0, 0);
lcd.print(horaOn);
lcd.print(':');
lcd.print(minutosOn);
}

if (!digitalRead(3) && fb2 == 1) {


fb2 = 0;
}

//Down
if (digitalRead(4) && fb3 == 0) {
fb3 = 1;
hora = now.hour();
minutos = now.minute();
segundos = now.second();

if (modo == 0) {
hora--;
if (hora == -1)
hora = 23;
}

if (modo == 1) {
minutos--;
if (minutos == -1)
minutos = 59;
}

if (modo == 2) {
horaOn--;
if (horaOn == -1)
horaOn = 23;
}

if (modo == 3) {
minutosOn--;
if (minutosOn == -1)
minutosOn = 59;
}

if (modo == 0 || modo == 1)
rtc.adjust(DateTime(2020, 3, 6, hora, minutos, segundos));
if (modo == 2 || modo == 3) {
lcd.setCursor(0, 0);
lcd.print(horaOn);
lcd.print(':');
lcd.print(minutosOn);
}

}
if (!digitalRead(4) && fb3 == 1) {
fb3 = 0;
}}
Diagrama esquemático
RELOJ Configuración Inicial
Modo 1: Horas

Modo 2: Minutos
Modo 3: Hora On

Modo 4: Minutos On
EVIDENCIA MONTAJE
Conclusiones

 El estudiante comprende y se lleva una idea desde otra


perspectiva, de cómo se realiza la comunicación de una
forma rápida y eficiente, con pocas conexiones de
terminales, solo haciendo uso de 2 componentes: SDA y
SCL, claves en lograr una función tan importante en este
tipo de protocolo.

 Se logra el objetivo de comunicar y visualizar en pantalla,


la captura de la hora, y posteriormente se lleva a cabo
con éxito el comunicar por medio de I2C, de una forma
interactiva y muy asertiva.
Cibergrafía

http://www.hubor-proteus.com/proteus-pcb/prospice/54-
analizador-de-protocolo-i2c.html

https://www.luisllamas.es/arduino-i2c/

https://aprendiendoarduino.wordpress.com/category/i2c/

https://www.digilogic.es/protocolo-i2c-arduino-hmc5883l/

También podría gustarte