На sd карту пишет только один датчик

Allex 78
Offline
Зарегистрирован: 02.03.2016

Прошу помощи у вас.
Не могу решить проблему, не пишутся показания с датчиков ds18b20 на sd карту. Пишется только один датчик, а остальные 5 не знаю как прописать. Уже мозг на этом сломал. Модель Atmega 328 p. Язык си (плюс). Как сделать чтобы все 6 датчиков писали свои показания на sd карту. Один видит а другие нет. Прошу Вас помочь.

bwn
Offline
Зарегистрирован: 25.08.2014

Вам ведь уже написали, листинг сломанных мозгов в студию.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Во первых у датчиков есть адреса - к ним нужно обращаться по адресу. Получив темпиратуру с 6 датчиков нужно сформировать 1 строку и записать ее в файл.

В качестве примера вот код:

void WriteFile(void){
  File myFile;
  char dbuf[20];
  strncpy(dbuf,"DD.MM.YYYY hh:mm:ss\0",20);
  char name[19];
  strncpy(name,"DD-MM-YY.csv\0",19);
  now.format(name);
  if(!SD.exists(name)){
    myFile = SD.open(name, FILE_WRITE);
    if (myFile) {
      myFile.print("\xEF\xBB\xBFДата;");
      for(int i=0;i<COUNT_THEMP;i++){
        myFile.print("Темпиратура ");
        myFile.print(i+1);
        myFile.print(";");
      }
      myFile.println("Номер измерения");
      id = 0;
    }
  }else{
    myFile = SD.open(name, FILE_WRITE);
  }
  if (myFile) {
    digitalWrite(13,HIGH);
    myFile.print(now.format(dbuf));
    myFile.print(";");
    for(int i=0;i<COUNT_THEMP;i++){
        myFile.print(themp[i]);
        myFile.print(";");
    }
    myFile.println(id);
    id++;
  }
  myFile.close();
  if(id >10000){
    id = 0;
  }  
}

void ReadDS(void) {
  // initialize() scans the bus for sensors
  ds.initialize();
  for(int i=0;i<COUNT_THEMP;i++){
    // ask for a temperature conversion from sensor 0
    ds.start_conversion(i);
    // read the scratchpad on the other side
    ds.read_scratchpad(i);
    dtostrf(ds.read_temperature(), 5, 2, themp[i]);
  }
}