Programa para llenar un tanque de una cisterna por medio de un control de cámara sony. el sistema puede emitir sonidos por medio de un módulo de voz de Parallax EMIC.
Fork of irda_Sony by
main.cpp
00001 #include "mbed.h" 00002 #include <Pulse1.h> 00003 #include "stdio.h" 00004 //control remoto sony disparo camara 00005 //puede convertir la trama en un entero 00006 //para cualquier tecla 00007 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo 00008 Serial pc(USBTX, USBRX); 00009 DigitalOut led(LED1); 00010 DigitalOut dir(PTA1); 00011 DigitalOut breake(PTA2); 00012 DigitalOut led2(LED2); 00013 int header =0; //tiempo de cabecera pulso abajo 00014 const int head_H = 2976; //+10% medida con osciloscopio en microsegundos 00015 const int head_L = 1984;//-10% medida con osciloscopio 00016 int i=0, bin, potencia; 00017 const int T_alto=1200;//ponga su tiempo de la prueba 00018 const int T_bajo=639;//ponga su tiempo de la prueba 00019 const int num_bits = 20;//ponga su numero de bits 00020 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos 00021 int dato; // tiempo de cada dato que se lee 00022 int numero; 00023 int binM[20]; 00024 int bin_max[20]; 00025 Serial GSM(PTE0,PTE1); //puertos del FRDM para el modem 00026 //GSM.printf("AT+CMGL=0\n\r"); 00027 00028 int main(){ 00029 GSM.baud(9600); 00030 GSM.format(8,Serial::None,1); 00031 breake=0; 00032 dir=0; 00033 wait(4); 00034 breake=1; 00035 while(1){ 00036 ini1: fflush( stdin ); 00037 header=0; 00038 led2=1; 00039 led=1; 00040 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo en header 00041 if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% 00042 else goto ini1; 00043 00044 seguir: 00045 //leo los datos de la trama y se meten a un arreglo 00046 wait_us(40);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO 00047 led2=1; 00048 for(i=0;i<(num_bits-1);++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits),datos 00049 dato = irda.read_low_us(); //leer un bit de datos que es pulso arriba en este control 00050 num[i]=dato; 00051 wait_us(400); 00052 } 00053 wait(0.5); //espero un poquito luego de leer todo el arreglo y ponerlo en pantalla 00054 //pc.printf(",%d",header); 00055 for(i=0;i<(num_bits-1);++i){ 00056 //pc.printf(",%d",num[i]); 00057 } 00058 wait(0.1); //espero e imprimo en binario 00059 //pc.printf("\n\n"); 00060 for(i=0;i<(num_bits-1);++i){ 00061 if(num[i] > ((T_alto+T_bajo)/2)){ 00062 bin_max[i]=1; 00063 } 00064 else{ 00065 bin_max[i]=0; 00066 } 00067 00068 } 00069 binM[0]=1; 00070 for(i=1;i<(num_bits-1);++i){ 00071 binM[i]=binM[i-1]*2; 00072 00073 } 00074 numero=0; 00075 for(i=0;i<(num_bits-1);++i){ 00076 00077 numero=numero+(binM[i]*bin_max[i]); 00078 00079 } 00080 pc.printf("numero=%d",numero); 00081 if (numero==466221){ 00082 led2=0; 00083 wait(1); 00084 led2=1; 00085 GSM.printf("N1\r\n"); 00086 wait(1); 00087 GSM.printf("W230\r\n"); 00088 wait(1); 00089 GSM.printf("L2\r\n"); 00090 wait(1); 00091 breake=0; 00092 dir=1;//abrir 00093 wait(4);//esperar que abra 00094 breake=1;//parar 00095 GSM.printf("S se inicia llenado del tanque\r\n"); 00096 wait(70);//espera que llene 00097 dir=0;//CERRAR 00098 breake=0; 00099 wait(4);//esperar que cierre 00100 breake=1;//parar 00101 GSM.printf("Sel tanque esta lleno\r\n"); 00102 wait(3); 00103 GSM.printf("Spuede vaciar el sanitario\r\n"); 00104 wait(3); 00105 GSM.printf("Sno olvide\r\n"); 00106 wait(4); 00107 GSM.printf("Srecuerde que JA JA JA JA JA\r\n"); 00108 wait(2); 00109 wait(2); 00110 goto ini1; 00111 } 00112 if (numero==466231){ 00113 led=0; 00114 wait(2); 00115 led=1; 00116 goto ini1; 00117 } 00118 } 00119 }
Generated on Sun Aug 7 2022 06:25:36 by 1.7.2