-Por el puerto serie pasa al ordenador una letra seguida del valor de cada sensor multiplicado por 100 y la suma de todos, y tambien guarda en la tarjeta de memoria los valores de los sensores.
-La variable luxes es la que utiliza para guardar ese valor en la tarjeta SD. La variable luz es esa varible pero multiplicada por 100 para enviar por puerto serie sin decimales. Aqui esta el fallo, cuando ese valor pasa de 300 y poco la variable luxes guarda en la tarjeta sd el valor correcto pero la variable luz se vuelve loca y pasa a ser negativa.
-Por lo que descarto que el sensor y la transformacion con la formula mediante el If esta mal por lo que el fallo solo puede estar en la zona roja.
Si alguien sabe por que puede pasar le agradeceria que me ayudase. (si no colorea en rojo lo que os quiero enseñar decir que es desde el inicio del voi_loop hasta el delay de 1000)
#include <SD.h>
#include <Time.h>
int analogPin0=0;
int analogPin1=1;
int analogPin2=2;
int t1;
int t2;
int luz;
int suma;
float luxes;
float pin0;
float pin1;
float pin2;
void setup()
{
// Abrir comunicaciones serie y dejar a la espera:
Serial.begin(9600);
Serial.print("Initializing SD card...");
// estar completamente seguro de que el pin esta seleccionado como
// salida, sino no funcionára:
pinMode(4, OUTPUT);
// Buscando la tarjeta SD:
if (!SD.begin(4)) {
Serial.println("Card failed, or not present");
// no hace nada más:
return;
}
Serial.println("card initialized.");
}
void loop()
{
pin0=(analogRead(0)*5.0*100.0)/1023.0;
pin1=((analogRead(1)-502)*5.0*100.0)/1023.0;
[color=red] pin2= analogRead(2);
if( pin2 < 83 )
{
luxes=(pin2*4.6678)+2.1104;
}
else
if(pin2 > 83)
{
luxes=(pin2*28.283)-2062.6;
}
//como daba problemas en labview metemos el dato en esta variable
//para q se refresque cada 1s.
t1=pin0*100;
t2=pin1*100;
luz=luxes*100;
suma=t1+t2+luz;
// imprimir por puerto serie del PC:
Serial.print ("A");
Serial.print (t1,DEC);
Serial.print ("B");
Serial.print (t2,DEC);
Serial.print ("C");
Serial.print (luz,DEC);
Serial.print ("D");
Serial.println (suma,DEC);
delay(1000);[/color]
String dataString = "Posiciones sobre 1024 Bits: T1, ";
// Lectura de los tres sensores para su introduccion en el String:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin <1) {
dataString += " ;T2, ";
}
else
if (analogPin <2) {
dataString += " ;LUZ, ";
}
}
// Abrir el archivo de texto, solo se puede abrir un archivo a la vez:
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// si el archivo se ha abierto correctamente escribe lo siguiente:
if (dataFile) {
dataFile.print("Tiempo transcurrido desde el inicio de la medicion");
dataFile.print(hour());
dataFile.print(":");
dataFile.print(minute());
dataFile.print(":");
dataFile.print(second());
dataFile.println(" ");
dataFile.println(dataString);
dataFile.print ("T1");
dataFile.print (" ");
dataFile.print (pin0);
dataFile.print (" ");
dataFile.print ("Grados Celsius");
dataFile.println("");
dataFile.print ("T2");
dataFile.print (" ");
dataFile.print (pin1);
dataFile.print (" ");
dataFile.print ("Grados Celsius");
dataFile.println("");
dataFile.print (luxes);
dataFile.print (" ");
dataFile.print ("W/m^2");
dataFile.println("");
dataFile.println("");
dataFile.close();
}
// si el archivo no se ha abierto correctamente muestra el error:
else {
Serial.println("error opening datalog.txt");
}
//Dato para cambiar el tiempo de envio al puerto serie.
delay(30000);
}