Me paso Jesus
Dependencies: mbed
main.cpp
- Committer:
- javicas95
- Date:
- 2019-11-08
- Revision:
- 3:b66649792025
- Parent:
- 2:de5c54621d59
File content as of revision 3:b66649792025:
#include "mbed.h" #define bufferLeng 500 #define constante 5.035400390625e-5 struct eResult { float Vrms; float Vmax; float Vmin; }; AnalogIn adc_in(A0); AnalogOut dac_out(A2); Ticker tMuestr; Ticker tVis; void vis(); void procDat(uint16_t *ent, uint16_t *sal, int longi); int flag=0; int contador=0; struct buffers { uint16_t A[bufferLeng]; uint16_t B[bufferLeng]; }; bool bufferAct=0; void muestr(); buffers bufferEnt; buffers bufferSal; eResult result; int main() { tMuestr.attach_us(&muestr, 100); tVis.attach(&vis, 5); while(1) { if (flag) { flag=0; if(bufferAct) { procDat(bufferSal.B, bufferEnt.A,bufferLeng); } else { procDat(bufferSal.A,bufferEnt.B,bufferLeng); } wait_us(1); } } } void muestr() { uint16_t dato=adc_in.read_u16(); if (bufferAct) { bufferEnt.A[contador]=dato; dato=bufferSal.B[contador]; } else { bufferEnt.B[contador]=dato; dato=bufferSal.A[contador]; } dac_out.write_u16(dato); contador++; if (contador==bufferLeng) { bufferAct=!bufferAct; contador=0; flag=1; } } void procDat(uint16_t *sal, uint16_t *ent, int longi) { uint16_t max=0; uint16_t min=65535; uint16_t dato; uint64_t sumatorio=0; for(int i=0; i<longi; i++) { dato=ent[i]; sumatorio= sumatorio + (dato*dato); sal[i]=dato; if(dato>max) { max=dato; } if(dato<min) { min=dato; } } result.Vrms= constante*sqrt(((float)sumatorio)/longi); result.Vmax=max*constante; result.Vmin=min*constante; } void vis() { printf ("El valor maxima es %f\n",result.Vmax); printf ("El valor minimo es %f\n",result.Vmin); printf ("El valor RMS es %f\n\n",result.Vrms); }