// Programa hecho por JUAN GALAZ //29/12/2012 //con ideas de David Alvarez Medina para tallerarduino.wordpress.com //y manejo de 18s20 de http://bildr.org/2011/07/ds18b20-arduino/ // Pagina sobre OneWire http://owfs.org/index.php?page=ds18s20 #include <SD.h> #include <OneWire.h> File dataFile; String temperatura; static char valor[10]; int contador=0; int espera=1; OneWire ds(2); // pin utilizado para el bus Onewire void setup() { Serial.begin(9600); // Establecemos comunicacion serie Serial.println("Lectura de sensores cada 10seg. y almacenar en SD"); Serial.println("Iniciando tarjeta SD"); // Texto informativo pinMode(3, OUTPUT); //piloto para sacar la SD pinMode(4, OUTPUT); // Declaramos el pin ChipSelect como salida if(!SD.begin(4)){ // Si no hay tarjeta o esta mal... Serial.println("Tarjeta erronea o no insertada"); // Texto informativo return; } Serial.println("Tarjeta OK"); // Texto informativo } void loop() { digitalWrite(3, LOW); dataFile=SD.open("tempe.txt", FILE_WRITE); // Creamos archivo de texto if(dataFile) { if(contador==0) { dataFile.println("Inicio lecturas"); contador++; } if(0==getTemp()) { dataFile.print(contador); Serial.print(contador); dataFile.println(","); Serial.println(" , Fin de sensores"); espera=8000; contador++; } else { dataFile.print(temperatura); dataFile.print(","); Serial.print(temperatura); Serial.print(", "); espera=1; } dataFile.close(); // Cerramos la escritura dentro del archivo } else { Serial.println("Error write SD "); } digitalWrite(3, HIGH); delay(espera); // Espera entre lecturas } int getTemp() { byte data[12]; byte addr[8]; int i; byte MSB; byte LSB; if ( !ds.search(addr)) { ds.reset_search(); return 0; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end delay(1000); // espera para que carge la tension el IC byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } MSB = data[1]; LSB = data[0]; temperatura=""; i=LSB>>1; if(MSB & 128) { temperatura=temperatura + "-"; i=128-i; } else { temperatura=temperatura + "+"; } sprintf(valor, "%i", i); temperatura=temperatura+valor; if(LSB & 1) temperatura=temperatura + ".5"; else temperatura=temperatura + ".0"; return 1; } |