Alarma con RTC, un display y monitoreo mediante bluetooth

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.

:arrow_right: SoftwareSerial(11,10);

¿Será que están invertidos?

1 Like

Holaa buenos dias, tardes o noches, esta publicacion la hice ya hace bastante tiempo y de antemano gracias por responder, afortunadamente el problema que tenia con el codigo lo logre resolver y me gustaria poder compartir el codigo que funciono, desafortunadamente mi computadora en la que lo escribi dejo de funcionar y perdi el codigo :crying_cat_face: sin embargo me parece que el codigo puede que aun lo tenga en mi celular intentare buscarlo puede que sea util para otras personas, sin mas que añadir gracias. :smiley_cat:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.