.
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 #define E p6 00004 //#define RW p6 00005 #define RS p5 00006 #define D4 p7 00007 #define D5 p8 00008 #define D6 p9 00009 #define D7 p10 00010 #define sensor p20 00011 #define sensor2 p19 00012 00013 #define muestra 180 00014 DigitalOut led(LED1); 00015 //TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 00016 TextLCD lcd(RS, E, D4, D5, D6, D7); // rs, e, d4-d7 00017 Ticker sample; 00018 AnalogIn Sensor(sensor); 00019 AnalogIn Sensor2(sensor2); 00020 00021 Serial pc(USBTX,USBRX); 00022 uint16_t k=0; 00023 uint16_t DatosSensor[muestra]; 00024 00025 00026 uint16_t datosSensor2[muestra]; 00027 00028 00029 void lectura() 00030 { 00031 if (k<muestra) { 00032 DatosSensor[k] = Sensor.read_u16(); // Leer los datos del Sensor. 00033 datosSensor2[k] = Sensor2.read_u16(); // Leer los datos del Sensor voltaje. 00034 k++; 00035 } 00036 00037 00038 } 00039 00040 int max(uint16_t* arr, int tam, int primero, int ultimo) 00041 { 00042 uint16_t m=(primero+ultimo)/2; 00043 if (arr[m]>=arr[m+1] && arr[m] >= arr[m-1]) { 00044 return m; 00045 } else if (arr[m] < arr[m+1]) { 00046 primero=m+1; 00047 } else if (arr[m]<arr[m-1]) { 00048 ultimo=m-1; 00049 } 00050 return max(arr,tam,primero,ultimo); 00051 } 00052 00053 int min(uint16_t* arr, int tam, int primero, int ultimo) 00054 { 00055 uint16_t m=(primero+ultimo)/2; 00056 if (arr[m]<=arr[m+1] && arr[m] <= arr[m-1]) { 00057 return m; 00058 } else if (arr[m] > arr[m+1]) { 00059 primero=m+1; 00060 } else if (arr[m]>arr[m-1]) { 00061 ultimo=m-1; 00062 } 00063 return min(arr,tam,primero,ultimo); 00064 } 00065 00066 00067 int main() 00068 { 00069 sample.attach(&lectura, 0.00037); 00070 while(1) { 00071 if(k==muestra) { 00072 sample.detach(); 00073 uint16_t Ipi_max= DatosSensor[max(DatosSensor, muestra, 0,muestra-1)]; 00074 uint16_t Ipi_min= DatosSensor[min(DatosSensor, muestra, 0,muestra-1)]; 00075 uint16_t Vpi_max= datosSensor2[max(datosSensor2, muestra, 0,muestra-1)]; 00076 uint16_t Vpi_min= datosSensor2[min(datosSensor2, muestra, 0,muestra-1)]; 00077 uint16_t picoI=max(DatosSensor, muestra, 0,muestra-1); 00078 uint16_t picoV=max(datosSensor2, muestra, 0,muestra-1); 00079 uint16_t picoI2=min(DatosSensor, muestra, 0,muestra-1); 00080 uint16_t picoV2=min(datosSensor2, muestra, 0,muestra-1); 00081 float angulo=abs(cos(7.993*(picoI-picoV))); 00082 float angulo2=abs(cos(7.993*(picoI2-picoV2))); 00083 00084 lcd.cls(); 00085 00086 00087 pc.printf("Ip=%1.2fA Vp=%4.1fV\n",(((Ipi_max-Ipi_min)*0.000272)/2),((Vpi_max-Vpi_min)*0.00577)/2); 00088 lcd.printf("Ip%1.2f Vp%4.1f\n",(((Ipi_max-Ipi_min)*0.000272)/2),((Vpi_max-Vpi_min)*0.00577)/2); 00089 pc.printf("Ir=%1.2fA Vr=%4.1fV\n",((((Ipi_max-Ipi_min)*0.000272)/2)/1.414),(((Vpi_max-Vpi_min)*0.00577)/2)/1.414); 00090 lcd.printf("Ir%1.2f Vr%4.1f\n",((((Ipi_max-Ipi_min)*0.000272)/2)/1.414),(((Vpi_max-Vpi_min)*0.00577)/2)/1.414); 00091 pc.printf("PF %1.3f\n",angulo); 00092 pc.printf("PF %1.3f\n",angulo2); 00093 00094 00095 //pc.printf("Ip: %1.2fA\n",((Ipi_max-Ipi_min)*0.000272)/2); 00096 //lcd.printf("Ip: %1.2fA\n",((Ipi_max-Ipi_min)*0.000272)/2); 00097 //pc.printf("Irms: %1.2fA\n",(((Ipi_max-Ipi_min)*0.000272)/2)/1.414); 00098 //lcd.printf("Irms: %1.2fA\n",(((Ipi_max-Ipi_min)*0.000272)/2)/1.414); 00099 k=0; 00100 sample.attach(&lectura, 0.00037); 00101 } 00102 led= !led; 00103 wait(0.5); 00104 00105 } 00106 }
Generated on Sat Jul 30 2022 10:16:40 by
1.7.2