Pages: [1]   Go Down
Author Topic: Problem with wright the onewire mensurment on sd to .csv file  (Read 1465 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello everyone, this is my first post on this forum so I would like to say sorry for some mistakes and thanks for the help. I`m usin Arduino Mega and Arduino 1.0 with new 1-wire library.
I wrote program which write the mensurment from one wire sensor to the sd card at .csv file. But I have some problem when I verify it
some problem occures,
Quote
m_arduino_ds18b20_10sensors_datalog_rev1.cpp: In function 'void loop()':
m_arduino_ds18b20_10sensors_datalog_rev1:231: error: call of overloaded 'String(uint8_t [8])' is ambiguous
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:70: note: candidates are: String::String(long unsigned int, unsigned char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:69: note:                 String::String(long int, unsigned char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:68: note:                 String::String(unsigned int, unsigned char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:67: note:                 String::String(int, unsigned char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:66: note:                 String::String(unsigned char, unsigned char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:65: note:                 String::String(char) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:60: note:                 String::String(const String&) <near match>
C:\Documents and Settings\f\Pulpit\ARDUINO\arduino-1.0\hardware\arduino\cores\arduino/WString.h:59: note:                 String::String(const char*) <near match>
m_arduino_ds18b20_10sensors_datalog_rev1:234: error: expected ',' or ';' before 'File'
m_arduino_ds18b20_10sensors_datalog_rev1:235: error: 'logFile' was not declared in this scope

I know that the line
Quote
String dataString = String(temp1) //save on sd for example temperatur from first onewire sensor
is wrong. Probably I should convert the temp1 variable to something else but how?
And this is my program listning:
Quote
//***********************************************************************************************
// Read from 10 onewire sensor and write to sd card
//***********************************************************************************************

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SD.h>


//Pn legend for Arduino MEGA
//MOSI = Pin 51<<<<< WAZNE
//MISO = Pin 50<<<<< AHTUNG
//SCLK = PIN 52<<<<< WARNING


int CS_pin = 53;
int pow_pin = 22;  // 53 moze dla mega dla 9 duemilanove



#define ONE_WIRE_BUS 30 //// !!!!!!!!!!!!!!!!!!!!!! TRZEBA ZMIENIC
#define ledZasilanie 40 //// dioda zasilania
#define ledTryb 42 //// dioda trybu jesli ledTryb = 1 to rozpoznawanie 1w jesli
                    //// ledTryb = 0 to pomiar temp z czujnikow




// ustawienie oneWire do komunikacji z jakimkolwiek urządzeniem OW
OneWire oneWire(ONE_WIRE_BUS);

// przekazanie naszej referencji oneWire do czujników
DallasTemperature sensors(&oneWire);

// address onewire sensor
DeviceAddress temp1 = { 0x28, 0x06, 0xE2, 0x86, 0x03, 0x00, 0x00, 0xC1 }; //0
DeviceAddress temp2 = { 0x28, 0x31, 0xE4, 0x86, 0x03, 0x00, 0x00, 0x35 }; //1
DeviceAddress temp3 = { 0x28, 0xE3, 0x84, 0x86, 0x03, 0x00, 0x00, 0x8E }; //2
DeviceAddress temp4 = { 0x28, 0x57, 0xFE, 0x86, 0x03, 0x00, 0x00, 0x85 }; //3
DeviceAddress temp5 = { 0x28, 0x3B, 0x04, 0x87, 0x03, 0x00, 0x00, 0xAF }; //4
DeviceAddress temp6 = { 0x28, 0xFF, 0xFC, 0x86, 0x03, 0x00, 0x00, 0xFB }; //5
DeviceAddress temp7 = { 0x28, 0x77, 0x25, 0x87, 0x03, 0x00, 0x00, 0x92 }; //6
DeviceAddress temp8 = { 0x28, 0xD6, 0x6D, 0x86, 0x03, 0x00, 0x00, 0xA1 }; //7
DeviceAddress temp9 = { 0x28, 0x1C, 0x77, 0x86, 0x03, 0x00, 0x00, 0x30 }; //8
DeviceAddress temp10 = { 0x28, 0x52, 0xF1, 0x86, 0x03, 0x00, 0x00, 0x01 }; //9

int nrPomiaru = 0;

//***********************************************************************************************

void setup(void)
{
  pinMode(22, OUTPUT);
  pinMode(24, INPUT);
  Serial.begin(9600);
  Serial.println("Initializing Card");
  //CS Pin is an output
  pinMode(CS_pin, OUTPUT);
  
  //SD Card will Draw Power from Pin 8, so set it high
  pinMode(pow_pin, OUTPUT);  
  digitalWrite(pow_pin, HIGH);
  
  //Initialize Card
  if (!SD.begin(CS_pin))
  {
      Serial.println("Card Failure");
      return;
  }
  Serial.println("Card Ready");
  
  //Write Log File Header
  File logFile = SD.open("LOG.csv", FILE_WRITE);
  if (logFile)
  {
    logFile.println(", , , ,"); //Just a leading blank line, incase there was previous data
    String header = "Nrpomiaru, Czujnik1, Czujnik2, Czujnik3, Czujnik4, Czujnik5, Czujnik6, Czujnik7, Czujnik8, Czujnik9, Czujnik10";
    logFile.println(header);
    logFile.close();
    Serial.println(header);
  }
  else
  {
    Serial.println("Couldn't open log file");
  }
  
  
  // włączenie biblioteki
  sensors.begin();
  
  
  
  // set resolution to 12bit
  sensors.setResolution(temp1, 12);
  sensors.setResolution(temp2, 12);
  sensors.setResolution(temp3, 12);
  sensors.setResolution(temp4, 12);
  sensors.setResolution(temp5, 12);
  sensors.setResolution(temp6, 12);
  sensors.setResolution(temp7, 12);
  sensors.setResolution(temp8, 12);
  sensors.setResolution(temp9, 12);
  sensors.setResolution(temp10, 12);
 

}

//***********************************************************************************************
//not use (futuer use)
void discoverOneWireDevices(void)
{
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
  
  Serial.print("Looking for 1-Wire devices...\n\r");
  while(oneWire.search(addr))
  {
    Serial.print("\n\rFound \'1-Wire\' device with address:\n\r");
     digitalWrite(22, HIGH);
    for( i = 0; i < 8; i++)
    {
      Serial.print("0x");
      if (addr < 16)
      {
        Serial.print('0');
      }
      Serial.print(addr, HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7])
    {
        Serial.print("CRC is not valid!\n");
        return;
    }
  }
  Serial.print("\n\r\n\rThat's it.\r\n");
  oneWire.reset_search();
  return;
}

//***********************************************************************************************

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00)
  {
    Serial.print("n/a");   // n/a = nie znaleziono czujnika
  }
  else
  {
    //Serial.print("C: ");
    Serial.print(tempC);
    // Konwersja na stopnie farrenhaita
    //Serial.print(" F: ");
    //Serial.print(DallasTemperature::toFahrenheit(tempC));
  }
}

//***********************************************************************************************



void loop(void)
{
  
  
//collect the data from the sensor
  sensors.requestTemperatures();
  
   nrPomiaru++;  //counting how many times data were collected
   Serial.print(";");
 // Serial.print("Czujnik 1: ");
  printTemperature(temp1);
  //Serial.print("\n\r");
  Serial.print(";");

 // Serial.print("Czujnik 2: ");
  printTemperature(temp2);
 // Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 3: ");
  printTemperature(temp3);
 // Serial.print("\n\r");
  Serial.print(";");
  
//  Serial.print("Czujnik 4: ");
  printTemperature(temp4);
//  Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 5: ");
  printTemperature(temp5);
 // Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 6: ");
  printTemperature(temp6);
//  Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 7: ");
  printTemperature(temp7);
 // Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 8: ");
  printTemperature(temp8);
// Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 9: ");
  printTemperature(temp9);
//  Serial.print("\n\r");
  Serial.print(";");
  
 // Serial.print("Czujnik 10: ");
  printTemperature(temp10);
 // Serial.print("\n\r");
  Serial.print(";");
  
  Serial.print("\n\r");
  
  //Create Data string for storing to SD card
  //We will use CSV Format  
  
  String dataString = String(temp1) //save on sd for example temperatur from first onewire sensor
  //Open a file to write to
  //Only one file can be open at a time
  File logFile = SD.open("LOG.csv", FILE_WRITE);
  if (logFile)
  {
    logFile.println(dataString);
    logFile.close();
    Serial.println(dataString);
  }
  else
  {
    Serial.println("Couldn't open log file");
  }
  
  
  
  delay(5000);
  
  
  
}
[/size][/size][/size][/size][/size][/size]
« Last Edit: January 01, 2012, 09:58:42 am by avo3 » Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 650
Posts: 50833
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  String dataString = String(temp1) //save on sd for example temperatur from first onewire sensor
Where is the ;?

Code:
DeviceAddress temp1 = { 0x28, 0x06, 0xE2, 0x86, 0x03, 0x00, 0x00, 0xC1 }; //0
Why are you trying to write the device address the the SD card? Wouldn't the device number be more useful?

DeviceAddress is an alias for an array of type uint8_t, so if you really need to write the device address, you need to do it one element at a time.
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 650
Posts: 50833
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
So the value of temperatur is stored in temp1 variable I think?
No, it isn't. You need to look at the printTemperature() function, to see if the temperature obtained from the device whose address is stored in temp1 is, in fact, stored anywhere.

If so, that is the variable who's value you need to store on the SD card. If not, you need to store the value in a variable so that you can send it to the serial monitor and store it on the SD card.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok I fugured it out. Thanks
The problem is how to convert tempC float type where the temperature is stored to string type to write it
Quote
dataString += String(tempC);
because this line generate the problem
Quote
error: call of overloaded 'String(float&)' is ambiguous
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 650
Posts: 50833
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
because this line generate the problem
That particular message is followed by several more. It is not saying that the call is impossible, but that there is more than one version of the String constructor that might be appropriate, but that none is an exact match, so the compiler can't determine which one to use.

If you look at the WString.h file (where the String class is defined), you'll see that there are no constructors that take a float and make a string out of it.

You'll need to do that yourself. Look at the ftoa() function, or separate the temperature into it's whole and fractional parts, and deal with each part independently.

Code:
float tempC = 12.6;
int intC = tempC; // will be 12
int fracC = (tempC - intC + 0.05) * 10; // will be 6
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok thak You it works, but I have last question how to write for example 12.6 using this intC and fracC
This way?
Quote
String dataString =String(intC1) + ", " + String(fracC1);
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 650
Posts: 50833
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
This way?
That would make the String "12, 6". If you want "12.6", change the ", " to "."
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thank You very much everythnig work`s great.
Logged

Pages: [1]   Go Up
Jump to: