DS18B20

Salve,
Ho perfezionato il mio codice (che prima manco compilava), ma ho comunque un piccolo problema: tutto funziona ad eccezione del sensore DS18B20. Potreste aiutarmi a capire perchè non funziona? Grazie tante!

//INIZIALIZZAZIONE DS18B20
#include <OneWire.h>
OneWire  ds(10);
//INIZIALIZZAZIONE BMP180
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
//INIZIALIZZAZIONE MICRO SD
#include <SPI.h>
#include <SD.h>
File myFile;
//INIZIALIZZAZIONE TIMER
int timerSec = 0;
//INIZIALIZZAZIONE BOTTONE
int switchState = 0;
int numUno = 0;

void setup() {
  Serial.begin(9600);
  //SETUP MICRO SD
  SD.remove("datalog.txt");
  SD.begin(4);
  myFile = SD.open("datalog.txt", FILE_WRITE);
    myFile.println("Micro SD Initialization Done!");
    myFile.close();
  //SETUP BOTTONE
  pinMode(5, INPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  //SETUP BMP180
  bmp.begin();
  sensor_t sensor;
  bmp.getSensor(&sensor);
}

void loop() {
switchState = digitalRead(5);
if (switchState == HIGH){
  numUno = numUno + 1;
}else{
}
if(numUno > 0 && numUno < 2){
    timerSec = timerSec + 6;
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);

  delay(1000);

  digitalWrite(6, LOW);
  digitalWrite(7, LOW);

  delay(1000);

  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);

  delay(1000);

  digitalWrite(6, LOW);
  digitalWrite(7, LOW);

  delay(1000);

  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);

  delay(1000);

  digitalWrite(6, LOW);
  digitalWrite(7, LOW);

  //LOOP BMP180
  sensors_event_t event;
  bmp.getEvent(&event);
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    float temperature;
    bmp.getTemperature(&temperature);
  //LOOP DS18B20
byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  ds.search(addr);
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  OneWire::crc8(data, 8), HEX;
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
//LOOP MICRO SD
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
  //LOOP MICRO SD
  myFile = SD.open("datalog.txt", FILE_WRITE);
  myFile.print("Tempo: ");
  myFile.print(timerSec);
  myFile.print(" s      ");
  myFile.print("Altezza: ");
  myFile.print(bmp.pressureToAltitude(seaLevelPressure,event.pressure));
  myFile.print(" m      ");
  myFile.print("Pressione: ");
  myFile.print(event.pressure);
  myFile.print(" hPa      ");
  myFile.print("Temperatura Esterna: ");
  myFile.print(celsius);
  myFile.print(" °C      ");
  myFile.print("Temperatura Interna: ");
  myFile.print(temperature);
  myFile.println(" °C      ");
  myFile.close();

  delay(1000);
}
else{
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
}
}

NON puoi usare il pin 10 per il DS18B20 ... quel pin è usato come pin di SS dalla libreria SD ...

Additionally, another pin must be used to select the SD card. This can be the hardware SS pin - pin 10 (on most Arduino boards) or pin 53 (on the Mega) - or another pin specified in the call to SD.begin(). Note that even if you don't use the hardware SS pin, it must be left as an output or the SD library won't work.

Guglielmo

Giusto! Non ci avevo pensato u.u Ora funziona tutto alla perfezione!

Andrea2000: Giusto! Non ci avevo pensato u.u Ora funziona tutto alla perfezione!

Capita :D :D :D

Guglielmo