Hola buenas tardes o noches, soy nuevo en arduino y tengo un proyecto escolar en el que automatizare un timbre con una alarma que suena varias veces al día (más de 9).
También quiero ver la hora del RTC en una app qué estoy haciendo en APP INVENTOR y se mostrará mediante bluetooth; esta misma app tendrá 2 botones encendido y apagado por si se tiene que encender el timbre manualmente.
Ahora bien, estoy usando un RTC DS1302, un Display TM1637, un módulo Bluetooth HC-06 y un Arduino Uno; Adjunto mi código:
#include <DS1302.h>
#include <TM1637Display.h>
#include <SoftwareSerial.h>
//Define los pines del HC-06
#define RX_PIN 11
#define TX_PIN 10
// Inicialización del DS1302
DS1302 rtc(2, 3, 4);
// Pines para el TM1637
#define CLK 9
#define DIO 8
//Inicializacion del display TM1637
TM1637Display display(CLK, DIO);
boolean colon = true;
//Inicializar puerto serie del modulo Bluetooth HC-06
SoftwareSerial BT(RX_PIN, TX_PIN );
//Declaracion de variables
String dw = "";
String hh = "";
String mm = "";
String ss = "";
float t = 0;
int alrm = 12;
int rele = 7;
int n;
int time1= 1000;
int time3 = 3000;
int time6 = 6000;
int time8 = 8000;
int time_5= 500;
char X;
char B;
boolean pinActivado = false;
boolean pinActivado1 = false;
//Tiempos de alarma autilizar
void alarma1(){
for(n=0;n<3;n++){
digitalWrite(alrm,LOW);
delay(time3);
digitalWrite(alrm,HIGH);
delay(time_5);
}}
void alarma2(){
digitalWrite(alrm,LOW);
delay(time6);
digitalWrite(alrm,HIGH);
delay(time_5);
}
void alarma3(){
digitalWrite(alrm,LOW);
delay(time8);
digitalWrite(alrm,HIGH);
}
//Funciones para el rele por BT
void encendido(){
digitalWrite(rele,LOW);
}
void apagado(){
digitalWrite(rele,HIGH);
}
void setup() {
//Pin para la alarma
pinMode(alrm,OUTPUT);
//Configuracion para evitar encender la alarma al principio
digitalWrite(rele,HIGH);
// Configuración del DS1302
rtc.halt(false);// Desactivar la parada del reloj
rtc.writeProtect(false); // Desactivar protección de escritura
//Inicializacion de la comonicacion serial del BT
BT.begin(9600);
// Configuración del brillo del display LED
display.setBrightness(0xA);
// Ajuste inicial de la hora - Descomentar para configurar la hora inicialmente
//rtc.setDOW(TUESDAY); // Establecer el día de la semana
//rtc.setTime(14, 16, 00); // Establecer la hora (24 horas): 20:16:30
//rtc.setDate(12, 3, 2024); // Establecer la fecha: 19 de marzo de 2017
}
void loop(){
//Configuracion para evitar encendido inecesario
digitalWrite(alrm,HIGH);
// Obtener y mostrar la hora actual
dw = rtc.getTimeStr();
// Serial.println(dw);
// Obtener las partes de la hora
hh = dw.substring(0, 2); // Horas
mm = dw.substring(3, 5); // Minutos
// ss = dw.substring(6, 8); // Segundos
// Preparar el valor de la hora y los minutos para mostrar en el display
int t = hh.toInt() * 100 + mm.toInt();
// Preparar el segmento de la hora para el display
uint8_t segto = 0x80 | display.encodeDigit((t / 100) % 10);
display.setSegments(&segto, 1, 1);
delay(500);
// Mostrar la hora y los minutos en el display
display.showNumberDec(t, true);
delay(500);
//Confuguracion de la hora para la alrma
if(hh.toInt() == 20 && mm.toInt() == 16
&& !pinActivado){
alarma1();
alarma2();
pinActivado = true;
}
if(hh.toInt() == 14 && mm.toInt() == 10
&& !pinActivado1){
alarma2();
alarma1();
pinActivado1 = true;
}
//Recepcion y emision de datos BT
if(BT.available()>0){
X = BT.read();
switch(X){
case 'j':
BT.print(dw);
break;
case 'z':
encendido();
break;
case 'v':
apagado();
break;
}
}
}
Librerías usadas:
DS1302
TM1637
Y adjunto también el diagrama de bloques de la app:
Mi problema es que cuando yo envío el caracter j, en lugar de que me imprima la hora en mi pantalla de la app, me muestra una j y sucede lo mismo con los demás caracteres(z y v), pero cuando aisló esa parte del código funciona correctamente :
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
int led = 12;
char X;
void encendido(){
digitalWrite(led,LOW);
}
void apagado(){
digitalWrite(led,HIGH);
}
void setup() {
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
BT.begin(9600);
}
void loop() {
if(BT.available()>0){
X = BT.read();
switch(X){
case 'j':
BT.print("Hola");
break;
case 'z':
encendido();
break;
case 'v':
apagado();
break;
}
}
}
Si me pudieran explicar porque sucede eso, alguna sugerencia o corrección lo agradecería mucho.
Sin más que decir, saludos.