Para más detalles puede consultar: https://www.dropbox.com/s/hjyeaymroexqjgf/Proyecto%20de%20Microcontroladores.zip?dl=0
- Código:
#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
int i,flag, cont,dato[8],leds[8],tt=0,lola=1;
int music[8]={00,0b01111,0b01001,0b01001,0b11011,0b11011,00};
float valor,valorn;
#include <lcd.c>
#define nDO 0 // DO
#define nDO_ 1 // DO#
#define nRE 2 // RE
#define nRE_ 3 // RE#
#define nMI 4 // MI
#define nFA 5 // FA
#define nFA_ 6 // FA#
#define nSOL 7 // SOL
#define nSOL_ 8 // SOL#
#define nLA 9 // LA
#define nLA_ 10 // LA#
#define nSI 11 // SI
#define Speaker PIN_B2 // Altavoz conectado a RB2
#define valvula PIN_C0 //activo bomba
int16 FreqNota[12]={// retardos entre estado alto y bajo para generar las notas
15289, // DO
14430, // DO#
13620, // RE
12856, // RE#
12134, // MI
11453, // FA
10810, // FA#
10204, // SOL
9631, // SOL#
9090, // LA
8580, // LA#
8099 // SI
};
//-------------------------------------------------Función de audio
void Play(int nota, int octava, int16 duracion){
int16 fn;
int16 mS_Transcurridos=0; // Contadores necesarios
// para controlar la duración
int16 CiclosL=0; // Contandor de uS
fn=FreqNota[nota]; // Define los retardos para generar
// la frecuencia de cada nota
fn>>=(octava); // Adapta la frecuencia a la octava actual
// haciendo una rotación
// a la derecha por octava
do{
output_high(Speaker); // Genera la frecuencia
delay_us(fn); // con los retardos mientras
CiclosL+=(fn); // aumenta el contador de
// ciclos transcurridos
output_low(Speaker); // en dos partes para repartir el
delay_us(fn); // trabajo entre estado alto y bajo.
CiclosL+=(fn); //
CiclosL+=25; // Compensador.
while(CiclosL>999){ // Se queda en el bucle mientras CiclosL
// sea menor a 1000 (1 mS)
CiclosL-=1000; // Le resta 1000 a CiclosL
mS_Transcurridos++; // y le suma 1 a mS_Transcurridos.
CiclosL+=25; // Compensador.
}
}while (duracion>mS_Transcurridos); // Repite el bucle hasta que haya
// pasado el tiempo indicado.
}
void playcancion(){ //city of stars
for(i=0;i<2;i++){
play (nSOL ,4,250);
play (nLA ,4,250);
play (nSI ,4,250);
play (nRE ,5,1250);
delay_ms(125);
play (nRE ,5,125);
play (nMI ,5,250);
play (nFA ,5,250);
play (nRE ,5,250);
play (nMI ,5,250);
play (nDO ,5,250);
play (nRE ,5,250);
play (nLA ,4,1300);
delay_ms(250);}
delay_ms(250);
play (nLA ,4,500);
play (nSI ,4,1000);
delay_ms(250);
play (nRE ,5,125);
play (nDO ,5,250);
play (nRE ,5,250);
play (nDO ,5,250);
play (nRE ,5,250);
play (nDO ,5,250);
play (nRE ,5,250);
play (nLA ,4,750);
play (nLA ,4,125);
play (nLA ,4,125);
play (nLA ,4,500);
play (nLA ,4,750);
delay_ms(250);
play (nSOL ,5,500);
play (nSOL ,5,1000);
play (nRE ,5,1000);
play (nMI ,5,1300);
delay_ms(250);
play (nDO ,5,125);
play (nRE ,5,250);
play (nSOL ,5,250);
play (nFA ,5,500);
play (nMI ,5,500);
play (nRE ,5,1000);}
void playcancion2(){ //yesterday
play (nSOL ,4,250);
play (nFA ,4,250);
play (nFA ,4,1200);
delay_ms(250);
play (nLA ,4,250);
play (nSI ,4,250);
play (nDO_ ,4,250);
play (nRE ,5,250);
play (nMI ,5,250);
play (nFA ,5,250);
play (nMI ,5,500);
play (nRE ,5,250);
play (nRE ,5,1200);
delay_ms(250);
for(i=1;i<2;i++){
play (nRE ,5,250);
play (nRE ,5,250);
play (nDO ,5,250);
play (nSI ,4,250);
play (nLA ,4,250);
play (nSOL ,4,250);
play (nLA ,4,500);
play (nLA ,4,250);
play (nLA ,4,250);
play (nLA ,4,750);
play (nSOL ,4,500);
play (nFA ,4,500);
play (nLA ,4,250);
play (nSOL ,4,750);
delay_ms(250);
play (nRE ,4,125);
play (nFA ,4,500);
play (nLA ,4,250);
play (nLA ,4,250);
play (nLA ,4,750);
delay_ms(250);
play (nSOL ,4,250);
play (nFA ,4,1400);
delay_ms(250);
play (nLA ,4,250);
play (nSI ,4,250);
play (nDO_ ,5,250);
play (nRE ,5,250);
play (nMI ,5,250);
play (nFA ,5,250);
play (nMI ,5,500);
play (nRE ,5,250);
play (nRE ,5,1250);
delay_ms(250);}
play (nLA ,4,1000);
play (nLA ,4,1000);
play (nRE ,5,1000);
play (nMI ,5,1000);
play (nFA ,5,1000);
play (nMI ,5,250);
play (nRE ,5,250);
play (nMI ,5,1400);
play (nRE ,5,125);
play (nDO ,5,500);
play (nRE ,5,1000);
play (nLA ,4,1400);
delay_ms(250);
play (nLA ,4,1000);
play (nLA ,4,1000);
play (nRE ,5,500);
play (nMI ,5,500);
play (nFA ,5,500);
play (nMI ,5,250);
play (nRE ,5,250);
play (nMI ,5,750);
play (nRE ,5,125);
play (nDO ,5,500);
play (nRE ,5,500);
play (nLA ,4,1400);
play (nLA ,4,250);
play (nSI ,4,250);
play (nDO ,5,250);
play (nRE ,5,250);
play (nMI ,5,250);
play (nFA ,5,250);
play (nMI ,5,200);
play (nRE ,5,250);
play (nRE ,5,750);
play (nRE ,5,750);
delay_ms(250);
play (nRE ,5,250);
play (nRE ,5,250);
play (nDO ,5,250);
play (nSI ,4,250);
play (nLA ,4,250);
play (nSOL ,4,250);
play (nSI ,4,500);
play (nLA ,4,250);
play (nLA ,4,700);
play (nSOL ,4,500);
play (nFA ,4,500);
play (nLA ,4,250);
play (nSOL ,4,800);
play (nRE ,4,500);
play (nFA ,4,500);
play (nLA ,4,250);
play (nLA ,4,700);
delay_ms(250);
play (nFA ,4,500);
play (nLA ,4,500);
play (nSOL ,4,500);
play (nRE ,4,500);
play (nFA ,4,500);
play (nLA ,4,500);
play (nLA ,4,1400);}
void playcancion3(){ //Himno de la alegria
play (nSI ,5,500);
play (nDO_ ,6,250);
play (nRE_ ,6,250);
play (nRE_ ,6,250);
play (nDO_ ,6,250);
play (nSI ,5,250);
play (nLA_ ,5,250);
play (nSOL_ ,5,250);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nSI ,5,250);
play (nSI ,5,400);
play (nLA_ ,5,125);
play (nLA_ ,5,500);
play (nSI ,5,500);
play (nDO_ ,6,250);
play (nRE_ ,6,250);
play (nRE_ ,6,250);
play (nDO_ ,6,250);
play (nSI ,5,250);
play (nLA_ ,5,250);
play (nSOL_ ,5,250);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nSI ,5,250);
play (nLA_ ,5,400);
play (nSOL_ ,5,125);
play (nSOL_ ,5,500);
play (nLA_ ,5,500);
play (nSI ,5,250);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nSI ,5,125);
play (nDO_ ,6,125);
play (nSI ,5,125);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nSI ,5,125);
play (nDO_ ,6,125);
play (nSI ,5,125);
play (nLA_ ,5,250);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nRE_ ,5,500);
play (nSI ,5,500);
play (nDO_ ,6,250);
play (nRE_ ,6,250);
play (nRE_ ,6,250);
play (nDO_ ,6,250);
play (nSI ,5,250);
play (nLA_ ,5,250);
play (nSOL_ ,5,250);
play (nSOL_ ,5,250);
play (nLA_ ,5,250);
play (nSI ,5,250);
play (nLA_ ,5,400);
play (nSOL_ ,5,125);
play (nSOL_ ,5,250);
}
//----------------------------------------------FUNCION PRINCIPAL
void main()
{
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
lcd_init();
lcd_set_cgram_char(1,music);
//-----------------------------------------------------------------------------------CONTORL USB
/*usb_init();
usb_wait_for_enumeration();//espera a que la pc enumere al pic (asigna posicion */
lcd_gotoxy(1,1);
lcd_putc("Hola, se activo");
lcd_gotoxy(1,2);
lcd_putc("control nocturno");
delay_ms(3000);
lcd_putc("\f");
flag=1;
cont=10;
//-----------------------CONTROL NOCTURNO verificando si es noche o dia
while(TRUE)
{
//--------------------------------------------PARA USAR USB LABVIEW
/*usb_task();
while(input(PIN_B4) && lola==1){
lcd_putc("\f");
lcd_gotoxy(5,1);
lcd_putc("Labview");
lcd_gotoxy(5,2);
lcd_putc("activado");
if (usb_kbhit(1))//siempre va a ser 1 por que es un solo pic el end point verifica el canal
{
usb_get_packet(1, dato,8);
dato[0]=dato[0]-0x30;
output_c(dato[0]);
}
leds[0]=read_adc();
leds[1]=pin_C0;
leds[2]=pin_B1;
usb_put_packet(1, leds, 3, USB_DTS_TOGGLE);
delay_ms(20);
if(!input(PIN_B4))
lola=0;
}*/
//-----------------------------------------------------------------PARTE DE PROYECTO NORMAL
do{
valor=read_adc();
valorn=((5*valor)/1023);
if(valorn>3.5)
cont=10;
while(valorn>3.5 && input(PIN_B1) && tt==0){ //PIN_B1 Flotador
lcd_putc("\f");
lcd_gotoxy(7,1);
lcd_putc("Riego");
lcd_gotoxy(5,2);
lcd_putc("activado");
delay_ms(2000);
output_HIGH(valvula); //--------------------Encender bomba
delay_ms(20);
lcd_putc("\f");
lcd_gotoxy(5,1);
lcd_putc("Bomba ON");
delay_ms(16000);
lcd_putc("\f");
lcd_gotoxy(5,1);
output_LOW(valvula);
lcd_putc("Bomba OFF");
delay_ms(5000);
tt=1;
}
while(!input(PIN_B1)){
lcd_putc("\f");
lcd_gotoxy(7,1);
lcd_putc("Agua");
lcd_gotoxy(5,2);
lcd_putc("insuficiente");
delay_ms(3000);
cont==0;
if(input(PIN_B1)){
lcd_putc("\f");
lcd_gotoxy(7,1);
lcd_putc("Agua");
lcd_gotoxy(5,2);
lcd_putc("suficiente");
delay_ms(2000);
break;}
}
if(valorn<3.5){ //---------de dia poner canciones
delay_ms(10);
lcd_putc("\f");
lcd_gotoxy(7,1);
lcd_putc("Riego");
lcd_gotoxy(4,2);
lcd_putc("Desactivado");
delay_ms(3000);
output_LOW(valvula);
flag=0;
lcd_putc("\f");
lcd_gotoxy(1,1);//---------City of stars
lcd_putc("Reproduciendo...");
lcd_gotoxy(1,2); lcd_putc(1);
lcd_gotoxy(3,2);
lcd_putc("City of stars");
lcd_gotoxy(16,2); lcd_putc(1);
playcancion();
delay_ms(3000);
lcd_putc("\f");//---------Yesterday
lcd_gotoxy(1,1);
lcd_putc("Reproduciendo...");
lcd_gotoxy(1,2); lcd_putc(1);
lcd_gotoxy(3,2);
lcd_putc("Yesterday");
lcd_gotoxy(13,2); lcd_putc(1);
playcancion2();
delay_ms(3000);
lcd_putc("\f");//---------Himno de la alegria
lcd_gotoxy(1,1);
lcd_putc("Reproduciendo...");
lcd_gotoxy(1,2); lcd_putc(1);
lcd_gotoxy(2,2);
lcd_putc("Himno alegria");
lcd_gotoxy(16,2); lcd_putc(1);
playcancion3();
delay_ms(3000);}
}while(flag=1);
}
}
- Visualización en Labview:
- Simulación en Proteus:
- Armado en físico:
No hay comentarios:
Publicar un comentario