Tengo el siguiente código de Arduino, lo voy a cortar solo pondré lo que me interesa.... Pero no he podido crear el archivo apk en app inventor ya que no manejo mucho la aplicación, necesito ayuda.
Borre unas líneas de código ya que es muy extenso lo que hace el código es timbrar de manera automática dependiendo de los horarios que estén configurados y seleccionar la opción de manera manual, además tiene configurados unos timbres especiales ya monte el circuito con Arduino y funciona todo bien pero quiero una aplicación sencilla en Appinventor para instalarla y manejar el timbre de manera manual por eso tiene T1: Clase, T2: Formación T3: Reunión, Man: Manual, H1, H2, H3 porque configura dependiendo de los minutos de cada clase, muchas gracias a quien me pueda ayudar con mi apk o al menos me pueda guiar como hacer. Gracias
// ------------------ Bluetooth HC-06 ------------------
#define BT_RX 10 // Arduino RX ← HC-06 TX
#define BT_TX 11 // Arduino TX → HC-06 RX (con divisor 1k + 1k)
// ------------------ Estado ------------------
bool horariosHabilitados = true;
volatile bool enToque = false;
// Tipo de sonido
int tipoTimbre = 1; // 1=Clase, 2=Formación, 3=Reunión
// Selección de horario por Bluetooth
int horarioActivo = 1; // 1=55, 2=50, 3=45
// Lectura de selector (solo usado para activar o no fines de semana)
int contacto4;
// ------------------ Relé ------------------
void timbreON() { digitalWrite(timbre, LOW); }
void timbreOFF() { digitalWrite(timbre, HIGH); }
// ------------------ Nombre en LCD ------------------
String nombreTipo(){
switch(tipoTimbre){
case 1: return "Clase";
case 2: return "Formac";
case 3: return "Reunion";
}
return "Clase";
}
// ------------------ Timbres ------------------
void ringNTimes(int n, int onMs, int offMs){
for(int i=0; i<n; i++){
timbreON(); delay(onMs);
timbreOFF(); if(i<n-1) delay(offMs);
}
}
void ringTipo(int tipo){
switch(tipo){
case 1: ringNTimes(1, tiempo_timbre, 400); break; // Clase
case 2: ringNTimes(2, 2000, 800); break; // Formación
case 3: ringNTimes(3, 1000, 500); break; // Reunión
}
}
void ringEmergencia(int n){
if(n<5) n=5;
ringNTimes(n, 700, 300);
}
void activar_timbre(){
ringTipo(tipoTimbre);
}
// ------------------ HORARIO 1 (55 minutos) ------------------
int h1_c1=7; int m1_c1=00; int s1_c1=0;
int h2_c1=7; int m2_c1=55; int s2_c1=0;
int h3_c1=8; int m3_c1=50; int s3_c1=0;
// ------------------ HORARIO 2 (57 minutos)de 7:30 ------------------
int h1_c2=7; int m1_c2=30; int s1_c2=0;
int h2_c2=8; int m2_c2=25; int s2_c2=0;
int h3_c2=9; int m3_c2=20; int s3_c2=0;
// ------------------ HORARIO 3 (45 minutos) ------------------
int h1_c3=7; int m1_c3=30; int s1_c3=0;
int h2_c3=8; int m2_c3=15; int s2_c3=0;
int h3_c3=9; int m3_c3=00; int s3_c3=0;
// ------------------ SETUP ------------------
void setup(){
pinMode(timbre, OUTPUT);
timbreOFF(); // Arrancar apagado
Wire.begin();
RTC.begin();
Serial.begin(9600);
BT.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print("Timbre Escolar");
delay(1000);
lcd.clear();
}
// ------------------ DIA SEMANA ------------------
int dia_de_semana(){
int tablaMes[]={0,3,3,6,1,4,6,2,5,0,3,5};
DateTime now = RTC.now();
int n=(now.day()+tablaMes[now.month()-1]+(now.year()-2000)+((now.year()-2000)/4)+6)%7;
lcd.setCursor(13,1);
const char* d[]={"Dom","Lun","Mar","Mie","Jue","Vie","Sab"};
lcd.print(d[n]);
return n;
}
// ------------------ HORARIOS ------------------
void horario_1(){ if(hora==h1_c1 && minuto==m1_c1 && segundo==s1_c1) activar_timbre();
if(hora==h2_c1 && minuto==m2_c1 && segundo==s2_c1) activar_timbre();
void horario_2(){ if(hora==h1_c2 && minuto==m1_c2 && segundo==s1_c2) activar_timbre();
if(hora==h2_c2 && minuto==m2_c2 && segundo==s2_c2) activar_timbre();
void horario_3(){ if(hora==h1_c3 && minuto==m1_c3 && segundo==s1_c3) activar_timbre();
if(hora==h2_c3 && minuto==m2_c3 && segundo==s2_c3) activar_timbre();
if(hora==h3_c3 && minuto==m3_c3 && segundo==s3_c3) activar_timbre();
if(hora==h4_c3 && minuto==m4_c3 && segundo==s4_c3) activar_timbre();
// ------------------ Bluetooth ------------------
void procesarComando(String cmd){
cmd.trim();
cmd.toUpperCase();
if(cmd=="T1"){ tipoTimbre=1; BT.println("Timbre CLASE"); return; }
if(cmd=="T2"){ tipoTimbre=2; BT.println("Timbre FORMACION"); return; }
if(cmd=="T3"){ tipoTimbre=3; BT.println("Timbre REUNION"); return; }
if(cmd=="MAN"){ enToque=true; ringTipo(tipoTimbre); enToque=false; return; }
if(cmd=="F"){ enToque=true; ringTipo(2); enToque=false; return; }
if(cmd=="R"){ enToque=true; ringTipo(3); enToque=false; return; }
if(cmd.startsWith("E")){
int n = cmd.substring(1).toInt();
ringEmergencia(n);
return;
}
if(cmd=="H1"){ horarioActivo=1; BT.println("Horario 55min desde 7"); return; }
if(cmd=="H2"){ horarioActivo=2; BT.println("Horario 55min desde 7:30"); return; }
if(cmd=="H3"){ horarioActivo=3; BT.println("Horario 45min desde 7:30"); return; }
}
// ------------------ LOOP ------------------
void loop(){
DateTime now = RTC.now();
segundo = now.second();
minuto = now.minute();
hora = now.hour();
contacto4 = analogRead(A3);
lcd.setCursor(0,0);
lcd.print("T:");
if(hora<10) lcd.print('0'); lcd.print(hora); lcd.print(':');
if(minuto<10) lcd.print('0'); lcd.print(minuto); lcd.print(':');
if(segundo<10) lcd.print('0'); lcd.print(segundo);
lcd.setCursor(0,1);
lcd.print("Tipo:");
lcd.print(nombreTipo());
lcd.print(" H");
lcd.print(horarioActivo);
r_diaSemana = dia_de_semana();
static String buffer="";
while(BT.available()){
char c = BT.read();
if(c=='\n'){ procesarComando(buffer); buffer=""; }
else buffer+=c;
}
if(horariosHabilitados){
if(!( (r_diaSemana==6 || r_diaSemana==0) && (contacto4 <= 1000) )){
if(horarioActivo==1) horario_1();
if(horarioActivo==2) horario_2();
if(horarioActivo==3) horario_3();
}
}
timbreOFF();
delay(200);
}




