Usuario:984 M18143

De Wikifab

JOSÉ LUIS SÁNCHEZ

Tarea 1: REPRESENTACIÓN DE ONDAS SENOIDALES

Este programa permite representar ondas senoidales en función del número de ciclos, fase y amplitud seno y amplitud ruido, tambien se puede elegir el color con el que se quiera representar dicha curva.

Imagen:Imagen_1.JPG


Se ha ejecutado este programa de ondas senoidales con ruido se ingresar el número de ciclos, la amplitud y el ruido deseado. A continuación se indicara presenta los botones de control:

Número de ciclos: permite modificar el numero de ciclos de la onda senoidal.

Fase: perite modificar la fase de la onda.

Amplitud del seno: permite modificar la amplitud de la onda.

Amplitud del ruido: permite modificar la amplitud del ruido.

Color: permite selesccionar el color deseado en la grafica.

Graficar: pulsando este botón se representa la gráfica de la función senoidal descrita con los parámetros anteriores.

Borrar: pulsando este botón se eliminan todas las curvas representadas.

Salir: pulsando este botón se sale del programa.


Para que el programa pueda definir estas curvas senoidales con un ruido se fijan en el código las siguientes funciones:

SinePattern (1000, amplitudseno, fase, ciclos, seno);

WhiteNoise (1000, amplitud, -1, ruido);

for (i=0;i<=999;i++)

{

SenoRuidoso[i]=seno[i]+ruido[i];

}


Los valores numéricos que se introducieron para los ciclos, amplitud, la fase y el color.

GetCtrlVal (panelHandle, PANEL_NUMERIC, &ciclos);

GetCtrlVal (panelHandle, PANEL_NUMERIC_2, &amplitud);

GetCtrlVal (panelHandle, PANEL_NUMERIC_3, &fase);

GetCtrlVal (panelHandle, PANEL_NUMERIC_4, &amplitudseno);

GetCtrlVal (panelHandle, PANEL_COLORNUM, &color);


Para graficar la curva deseada se emplea la siguiente función:


PlotY (panelHandle, PANEL_GRAPH, SenoRuidoso, 1000, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, color);


Se ha añadido para que en los tres botones, al dar clcic derecho dé información de lo que hace. Con el siguenite codigo:

case EVENT_RIGHT_CLICK:

MessagePopup ("AYUDA", "este boton genera la grafica señoidal");

break;

Como resultado tenemos lo siguiente:

Imagen:Imagen_2.JPG

Media:Tarea1.rar



TAREA 2 Interfaz del Usuario.

Objetivo: Almacenar una set de datos en un archivo, posteriormente mostrar el set de datos. Para ello se genera de forma aleatoria una serie de datos. Además, al mostrar los datos generados permitirá seleccionar un límite superior y uno inferior, indicando de forma visual cuando ambos son superados.

Imagen:Modelo2_M18143.JPG


En el desarrollo se partió definiendo las variables que se emplearan, para poder definir los componentes a emplearse en la interfaz del usuario.

static int panelHandle;

double valor[3]; double maximo; double freq; double arrayout[10000]; double arrayin[10000];

static char proj_dir[MAX_PATHNAME_LEN]; static char nombre_archivo[MAX_PATHNAME_LEN];

int encendido; int color; int contador; int i=0; int j=0; Para asignar las propiedades de funcionamiento a los botones en las líneas de programación se ha empleado el comando “CALLBACK” y para introducir los valores característicos de la función se empleó el comando “GetCtrlVal”.

La gráfica se la genero empleando un “tiempo” que entra en funcionamiento cuando el switch este en contacto, dicha gráfica estará guiada por los valores límite, que activara la alarma luminosa a través de condicionales.

int CVICALLBACK tiempo (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) {

switch (event) { case EVENT_TIMER_TICK: GetCtrlVal (panelHandle, PANEL_BINARYSWITCH, &encendido); if (encendido==1)

{ GetCtrlVal (panelHandle, PANEL_NUMERICDIAL_2, &freq); SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_INTERVAL, freq);


valor[0]=rand(); valor[0]=valor[0]/32000; valor[0]=valor[0]*48; valor[0]=valor[0]+36;

SetCtrlVal (panelHandle, PANEL_NUMERIC, valor[0]);


GetCtrlVal (panelHandle, PANEL_NUMERICDIAL, &maximo); valor[1]=maximo;

arrayin[i]=valor[0]; i++; GetCtrlVal (panelHandle, PANEL_COLORNUM, &color); SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR, color); SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR, color); PlotStripChart (panelHandle, PANEL_STRIPCHART, valor, 3, 0, 0, VAL_DOUBLE);

if(valor[0]>=valor[1])

{ SetCtrlVal (panelHandle, PANEL_LED, 1); } else { SetCtrlVal (panelHandle, PANEL_LED, 0); } }

break; }

return 0; }


Para la grabación de los datos se ha empleado el comando “FileSelectPopupEx” y “ArrayToFile” para generar el fichero y darle propiedades.

int CVICALLBACK guardar (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) {

switch (event) { case EVENT_COMMIT:

FileSelectPopup ("", "*.dat", "*.dat", "Nombre del fichero que grabar", VAL_OK_BUTTON, 0, 0, 1, 1, nombre_archivo);

ArrayToFile (nombre_archivo, arrayin, VAL_DOUBLE, 1000, 1, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS, VAL_CONST_WIDTH, 10, VAL_ASCII, VAL_TRUNCATE);



break;

} return 0; }

Imagen:Guardar.JPG


Para mostrar el archivo se genera con un contador, el mismo que permite graficar únicamente los datos almacenados.

int CVICALLBACK mostrar (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT:

if(FileSelectPopupEx ("", "*.dat", "*.dat", "Name of File to Read", VAL_OK_BUTTON, 0, 1, nombre_archivo) > 0)

{ contador=0, FileToArray (nombre_archivo, arrayin, VAL_DOUBLE, 1000, 1, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS, VAL_ASCII);

DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);

for(j=0;arrayin[j]!=0;j++) contador++; PlotY (panelHandle, PANEL_GRAPH, arrayin, 1000, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); }


break; } return 0; }

Por último se presenta la interfaz del usuario en funcionamiento, visualizando la grafca instantanea y graficando un archivo del historial Imagen:Modelo_M18143.JPG

Media:Tarea_2.rar

Herramientas personales