Hardware > Bricometeo
Sensor de Radiacion Solar en w/m^2
spyfly:
Si a lo mejor 30 minutos es mucho anticiparse, decís que con 10 minutos es suficiente... 15 y 20 también lo veis en exceso, verdad??
He cambiado el hardware arduino por uno nuevo recien comprado, por si acaso...
Por otro lado puede ser que tuviese un error en el código del arduino, mirad:
int array_length = 90;
float PanelValue [90];
/* Movemos una posicion los valores */
for (int i = 0; i < array_length; i = i + 1)
{
PanelValue[array_length-i]=PanelValue[array_length-i-1];
}
lo que quiero hacer es el valor de la posicion 88 llevarlo a la 89, el de la 87 a la 88, el de la 86 a la 87... y asi hasta mover el 0 a la osicion 1. Creo que ese cod estaba mal y creo que seria asi, no??:
/* Movemos una posicion los valores */
for (int i = 0; i < (array_length-1); i = i + 1)
{
PanelValue[array_length-i-1]=PanelValue[array_length-i-2];
}
jmviper:
--- Cita de: spyfly en 23 de Mayo de 2018, 18:37:17 ---
Si a lo mejor 30 minutos es mucho anticiparse, decís que con 10 minutos es suficiente... 15 y 20 también lo veis en exceso, verdad??
--- Fin de la cita ---
Sí, sigue siendo mucho. En ese intervalo no debería aparecer ninguna radiación solar.
En cuanto al código...
Prueba con for (int i = 1; i < array_length; i++), empieza con 1 en vez de con 0 y con i = i + 1 lo que haces es sumarle ya 1 de principio, de la manera que yo pongo sumará 1 en la próxima iteración del bucle.
spyfly:
Buena solución si!
De todos modos le he metido la mia al menos por hoy,
/* Movemos una posicion los valores */
for (int i = 0; i < (array_length-1); i = i + 1)
{
PanelValue[array_length-i-1]=PanelValue[array_length-i-2];
}
¿También seria correcta, no jmviper?
jmviper:
La expresión PanelValue[array_length-i-2] creo que daría error... en verdad en la última iteración del bucle de esa forma sería 90 - 90 - 2 = -2 … y creo que estará fuera de índice ese PanelValue[-2]
Qué significa float PanelValue [90] ?? Un array de 90 elementos ? Qué valor tiene cada uno? Valores de radiación solar ?
spyfly:
Hola,
No se si me equivoco pero las ultimas iteraciones serian:
i=87 donde copia el valor de la posicion: 90-87-2=1 en la posicion: 90-87-1=2
i=88 donde copia el valor de la posicion: 90-88-2=0 en la posicion: 90-88-1=1
i=89 no cumple la condicion de i<89 (i<90-1)
¿Creo que es asi,no? No se me da muy bien esto de la programacion... :;
La expresion PanelValue[array_length-i-2] al menos en el compilador no da error, otra cosa es que no haga lo que espero... eso ya no lo he podido comprobar.
float PanelValue [90] es un array de 90 elementos (del 0 al 89). Los inicializo a 0 al arrancar el arduino. Y lo que hago es leer un valor y guardarlo en la posición 0, moverlos todos 1 posición, y volver a leer en la 0 y asi sucesivamente hasta que cuando tengo las 90 posiciones guardadas hago la suma de ellas y divido entre 90 y calculo su media.
Así lo que hago no es leer y mostrar el valor instantáneo, sino que estoy unos pocos segundos monitorizando para calcula el valor medio de la medición, por si hubiese picos raros o algo similar... asi al ser una media un pico raro de voltaje por interferencia no se vería reflejado.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa