sd card. csv
- Войдите на сайт для отправки комментариев
Вс, 12/10/2014 - 15:23
не могу понять в чем дело- необходимо данные с нескольких датчиков сохранить на карте памяти, а arduino вместо этого записывает все в один столец:
//Program by Jeremy Blum //www.jeremyblum.com #include <SD.h> //SD Card Library #include <Wire.h> //I2C Library //SPI SD Card Pins //MOSI = Pin 11 //MISO = Pin 12 //SCLK = PIN 13 int CS_pin = 10; int pow_pin = 8; //I2C Temperature Pins //SDA = Analog Pin 4 //SCL = Analog Pin 5 //Light Sensor Pins int light_pin = 1; float refresh_rate = 0.0; //Dataloger Refresh Rate int temp_address = 73; //Address of the I2C Temp Sensor long id = 1; //Use this to store the id # of our reading. void setup() { Wire.begin(); 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"); //Read the Configuration information (COMMANDS.txt) File commandFile = SD.open("COMMANDS.txt"); if (commandFile) { Serial.println("Reading Command File"); float decade = pow(10, (commandFile.available() - 1)); while(commandFile.available()) { float temp = (commandFile.read() - '0'); refresh_rate = temp*decade+refresh_rate; decade = decade/10; } Serial.print("Refresh Rate = "); Serial.print(refresh_rate); Serial.println("ms"); commandFile.close(); } else { Serial.println("Could not read command file."); return; } //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 = "ID, Light, Temp"; logFile.println(header); logFile.close(); Serial.println(header); } else { Serial.println("Couldn't open log file"); } } void loop() { //Check Light Level int light_level = analogRead(light_pin); //Read Temperature Wire.beginTransmission(temp_address); //Start talking Wire.send(0); //Ask for Register zero Wire.endTransmission(); //Complete Transmission Wire.requestFrom(temp_address, 1); //Request 1 Byte while(Wire.available() == 0); //wait for response int temp_c = Wire.receive(); // Get the temp int temp_f = round(temp_c*9.0/5.0 +32.0); //Convert to stupid American units //Create Data string for storing to SD card //We will use CSV Format String dataString = String(id) + ", " + String(light_level) + ", " + String(temp_f) ); //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"); } //Increment ID number id++; delay(refresh_rate); }
получается примерно так:
ID, LIght, Temp
1,253,26
2,256,26
3,260,26
Мутишь строку: String dataString = String(id) + ", " + String(light_level) + ", " + String(temp_f) );
Пишешь в файл: logFile.println(dataString);
Получаешь три значения через запятую. Что тебя не устраивает?
хотелось бы, чтобы они были в разных столбцах. дабы потом можно было составлять диаграмы
CSV - Comma-separated values - значения, разделенные запятыми. Или тебе курсы Экселя бесплатные провести надо? ;)
точно. только сейчас понял свою ошибку)
хотелось бы, чтобы они были в разных столбцах. дабы потом можно было составлять диаграмы
А они что, в одинаковых? Согласно формату csv именно так и должно быть
вы не поняли, загвостка в том как разделись данные
Не нравится csv - пишите в другом формате
Можно вообще структуру объявить, заполнять её и писать в файл как есть, потом всё это парсить и строить графики.
Я бы еще RTC подвесил, чтобы временные отметки писать, а хранить время можно числом как unixtime.
anton71, если ваша следующая цель открывать файл в microsoft excel, то начните с него же (с экселя). По-моему, в нём csv совсем не тот. Создайте в экселе простую табличку: три столбика, пять строчек. Сохраните как "csv". Откройте в notepad ++. Русский эксель выдаёт типа, если правильно помню:
"Имя датчика";"Текущее значение";"МинЗначение24ч"
"Термометр1";"23.1";"22.4"
Ни одной 'comma' (то есть запятой).
А в один пост оформить никак?