FASE 3 (Semana 3): Proyecto Pastillero Inteligente


tarea asignada en laboratorio(link explicación)

https://www.youtube.com/watch?v=1VD-X1Zs6KM

programa

long tiempoMs;
long tiempoBase;
long tiempoActual;
long hora;
long minuto;
long horaActual;
long minActual;
long horaToma=11;
long minToma=30;
long cadaHoraTiempo=0;
long cadaMinTiempo=1;
long segActual;
int tiempoRet = 500;
int inicio=0;
int pinBuzzer = 15;
int pinLed1 = 16;
int pinLed2 = 17;
int  pinBoton= 2;
boolean banderaAlarma = HIGH;
int rep;
int numRep = 2;
int numRepPastilla = 3;

int tiempoEnc = 400;
int tiempoApag = 50;
int tiempoEspera = 1000;



int pinIntLamina = 5;
int pinIN1 = 7;
int pinIN2 = 8;
int pinPWM = 9;
boolean estadoIntLamina;
int valorPWM = 230;
int iempoActual;
long tiempoActivacion[5];
int toma = 0;




// Se incluye el código de la biblioteca del LCD
#include <LiquidCrystal.h>
// Inicializa la biblioteca con el número de los pines
LiquidCrystal lcd(4, 6, 11, 12, 13, 14);
// Función setup



void setup()
{
// Hora de reinicio
 hora = 11;
 minuto = 29;
// Cálculo tiempo base
 ConversionHminMs();
 tiempoBase = tiempoMs;
// Configuración del número de columnas y renglones del LCD
 lcd.begin(16,2);
 pinMode(pinBuzzer, OUTPUT);
 pinMode(pinLed1, OUTPUT);
 pinMode(pinLed2, OUTPUT);
 pinMode(pinBoton, INPUT);
 attachInterrupt(0, Interruptor, RISING);

pinMode(pinIN1, OUTPUT);
 pinMode(pinIN2, OUTPUT);
 pinMode(pinIntLamina, INPUT);
 tiempoActivacion[0] = 30000;
 tiempoActivacion[1] = 60000;
 tiempoActivacion[2] = 120000;
 tiempoActivacion[3] = 240000;
 tiempoActivacion[4] = 24*60*60000;


}
// Función loop
void loop()
{
  
  tiempoActual = millis() + tiempoBase;
// Conversión del tiempoActual a horas:munutos:segundos
 ConversionMsHmin();
if(inicio==0)
{DespliegueSaludo();
inicio=1;
}
// Despliegue de la hora
 Despliegue

 ();
Proximatoma();
// Deja pasar cerca de un segundo
 delay(tiempoRet);
}
// Función 
void DespliegueSaludo()
{
 lcd.setCursor(0,0);
// Limpia el primer renglón
 lcd.print(" ");

 lcd.setCursor(0,0);
 lcd.print("Hola somos");
 lcd.setCursor(0,1);
 lcd.print("Ach. y Ven.");
delay(3000);
}


// Función ConversionHminMs
void ConversionHminMs()
{
 minuto = minuto + hora*60;
 tiempoMs = minuto*60000;
}
// Función ConversionMsHmin
void ConversionMsHmin()
{
 horaActual = tiempoActual/60/60000;
 minActual = tiempoActual/60000 - horaActual*60;
 segActual = tiempoActual/1000 - horaActual*60*60 -
minActual*60;
}
// Función Despliegue
void Despliegue()
{
// Se inicializa el LCD
 lcd.begin(16,2);
// Se coloca el cursor en el origen
 lcd.setCursor(0,0);
// Limpia el primer renglón
 lcd.print(" ");
// Se coloca el cursor en el origen
 lcd.setCursor(0,0);
// Escribe el letrero Hora
 lcd.print("Hora ");
// Escribe horas:minutos:segundos
 lcd.print(horaActual);
 lcd.print(":");
 lcd.print(minActual);
 lcd.print(":");
 lcd.print(segActual); 
 if(horaActual==horaToma && minActual==minToma){

   moverMotor();
  horaToma+=cadaHoraTiempo;
  minToma+=cadaMinTiempo;
  lcd.setCursor(0,0);
  lcd.print("    Tome su     "); 
  lcd.setCursor(0,1);
  lcd.print("   pastilla!!!  "); 
  timbrar();

}

 }
void timbrar(){

 banderaAlarma = HIGH;
 for(int i = 0 ;i< numRepPastilla ;i++)
  Alarma();
}
 void Proximatoma(){
  lcd.setCursor(0,1);
  lcd.print("Prox toma "); 
  lcd.print(horaToma);
  lcd.print(":");
  lcd.print(minToma);
}
void moverMotor(){
digitalWrite(pinIN1, 0);
 digitalWrite(pinIN2, 0);
 analogWrite(pinPWM, valorPWM);
 do
 {
 tiempoActual = millis();
 } while(tiempoActual < tiempoActivacion[toma]);
 activaMotor();
 toma++;
 if(toma==3){
   toma=0;
 }
}


// Función Alarma
void Alarma()
{
 for (rep = 0; rep < numRep; rep++)
 {
 digitalWrite(pinBuzzer, HIGH);
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 delay(tiempoEnc);
 digitalWrite(pinBuzzer, LOW);
 digitalWrite(pinLed1, LOW);
 digitalWrite(pinLed2, LOW);
 delay(tiempoApag);
 }
 delay(tiempoEspera);
}
// Función Interruptor
void Interruptor()
{
 banderaAlarma = LOW;
}
//funcion activa motor
void activaMotor()
{
 do
 {
 digitalWrite(pinIN1, 1);
 estadoIntLamina = digitalRead(pinIntLamina);
 } while(estadoIntLamina == HIGH);
 delay(200);
 do
 {
 digitalWrite(pinIN1, 1);
 estadoIntLamina = digitalRead(pinIntLamina);
 } while(estadoIntLamina == LOW);
 digitalWrite(pinIN1, 0);
}
foto del circuito en protoboard


Comentarios

Entradas populares de este blog

FASE 2 (Semana 2): Proyecto Chaleco para Ciclistas