el problemilla consistia en capturar graficas de un aparato que hace barridos y entrega una señal. todo en analogico puro.
por suerte permitia, en vez de barrido, posicionarse por orden externa,
para ello usamos un portatil, y un arduino uno de intermediario para la conversion ADC DAC.
del lado del arduino, pasando del wiring por ser muy lento, se escribio en c++ puro. tras la configuracion entra en un bucle, en el que solo lee de su ADC, siempre, va sumando las lecturas, y lleva cuenta de las hechas. por interrupcion de final de lectura, calcula la media, para tenerla preparada, y sigue leyendo y sumando. cuando le llega una interrupcion de la UART, porque le habla el PC, guarda en bufer, si llega un CR o LF, interprea el bufer, que debe tener solo numeros, ese es el dato de los voltios que le debe pasar a un DAC comprado, por I2C, y este con elevador de nivel, se lo pasa al cacharro. inmediatamente suelta la media que tenia preparada. defini como estandar que la saturacion, tanto de DAC como del ADC seria 0xFFFF, en decimal.
por el lado del PC, se escribio en C#, me tuve que pasar porque el bueno del c++ de borlan dejo de funcionar en 64bits, de todas formas tienen el mismo padre, y es una bala.
lo 1º que me plantee fue definir un registro estandar, que por conveniencia se hizo como una clase, tiene una cabezera, donde se guardan toditos los campos que interesan, ejemplo masas inicial y final, nombre de la muestra, color, modo de captura, tiempo de capt (que no funciona, tarda mas), ,,, tras cabecera los datos, una matriz de estrucura con masa e intensidad.
una valla a salvar fueron los graficos, deduje que hay tres cosas: el componente PictureBox. el (LOS) bitmaps. y una cosa que le llaman grafic. Se pinta con grafic, sobre el bitmap previamente selecionado. y al final, el pantallazo consiste en mover el bitmap final al picturebox.
use 3 bitmaps, - el vacio, (cuadricula), donde segun las masas dibuje una cuadricula, si hay que pintar espectros baks, (previamente capturados), tambien los dibujo hay. este bit map no suele cambiarse, - el de maniobra, es una copia del cuadricula, sobre el se dibuja el espectro capturando. - un out, copia del maniobra, que es el que se presenta, por tinterrupciones, varias por segundo. todo esto repartido en rutinas, unas convierten la zona util como coordenadas XY, muy util porque en informatica el 00, esta arriba izquierda, otras usan esta para pintar segentos, otra escribe texto, otras de copiar y habilitar bitmaps. fue un poco lio pelearse con los "Pen", y "color", resulta que se dibuja con un pen, que tiene su color, pero hay colores sin pen, (letras), me limite a 10 colores, como en resistencias,
se admiten 3 modos de funcionar, "tiro a tiro", "rafaga refrescaa", y "rafaga promedia", no necesita explicar. al darle al start, captura todos los formuarios, y con elllo rellena la cabezera del registro de maniobra. este es pasado a la maquina de chucurrun chucurrun, (hacer la maquina teniendo que mirar lo puesto en formularios es un lio)
en todos los 3 modos, con sutiles diferencias de final, tras una configuracion entra en bucle, que por interrupciones de un tick (tarda mucho mas, ???),que hace:
-guarda en el campo[n] masa, la masa que esta leyendo, -incrementa esa masa, (no dije que el grafico tendria 800x400pixeles, por tanto la matriz de datos tambien de 800. normalmente se barre de 0 a 200 UMAs, pero se puede estrechar el barrido, en el peor de los casos en la separacion entre Umas, caben 4 medidas, 0,25 UMA, pero puede ser mucho menos) - espera a que llege la respuesta del arduino, si tarda se stopea, (en v1.0 se colgaba) - hace la conversion de lo llegado, y lo guarda en campo[k]intensidad. aquella saturacion del 0xFFFF se paso a 120 (%). - a traves de una rutina de conversion, masa -> voltios al arduino, se manda esta al arduino. Se hizo asi, para que PC y arduino trabajen a la vez, y no uno esperar por el otro. - mira si ya lo hizo 800 veces, y para.
tiene una opcion de ganancia automatica (y manual), por la que sube o baja / estira encoje la grafica para llevarla a la linea base y al 100%, tambien offsets en X e Y , configurables mediande fichero .INI los espectros se pueden guardar como datos, vuelca a un INI el registro de maniobra (o el promedia), y esto se pueden recargar posteriormente para comparar. tambien se guarda como JPG el pantallazo.
Pestaña de puerto, ajustes (offsets), y debug (un log de trace y errores)
y esto es todo, tiene un chechbox para ponerlo en simulacion, imprescidible para depurarlo sin magquina, simula la comunicacion con arduino, y genera un espectro, por lo que el programa se puede probar sin el 4P.
|