SD карта

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

SD карта

Сообщение Goldz » 18 июн 2011, 09:43

Появилась задача писать на SD файлы с определенной периодичностью
Имена совпадать не должны
Решил реализовать так

String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";

Но проблема
Стандартная функция записи библиотеки SD
просит имя файла в структуре CHAR*

Дайте совет как преобразовать String в Char*
Goldz
 
Сообщения: 3
Зарегистрирован: 18 июн 2011, 09:41

Re: SD карта

Сообщение HarryStar » 18 июн 2011, 11:34

Вы бы хоть упомянули в каком компиляторе работаете.
Как правило, если стринг и чар не синонимы, то должна быть функция, которая представляет строку стринг в виде чара. Обычно это что то типа c_str()

И кстати метод формирования неповторяющегося имени у вас не очень. Как минимум надо ставить проверку, нет ли такого же и перегенерить, если есть. Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут. Последний счетчик хранить в памяти например или там же на карте в отдельном файле типа index.txt
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: SD карта

Сообщение dccharacter » 18 июн 2011, 11:55

Строка - это нультерминированный массив байт. Т.е. имя переменной типа "строка" - это указатель на массив.

Если же это у тебя какое-нить QT, то надо позвать метод toByteArray()

Добавлено спустя 1 минуту 6 секунд:
const QChar * QString::constData () const
Returns a pointer to the data stored in the QString. The pointer can be used to access the characters that compose the string. For convenience, the data is '\0'-terminated.
Note that the pointer remains valid only as long as the string is not modified.
See also data() and operator[]().
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: SD карта

Сообщение Goldz » 18 июн 2011, 14:39

Пишу в Arduino-022

Добавлено спустя 35 минут 9 секунд:
Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут

1,2,3 и тд это int или long. Как их превратить в char*

Добавлено спустя 1 час 1 минуту 9 секунд:
Получилось вот так

//Создание имя файла
String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";
char buf[13];
dataString.toCharArray(buf,13);
CardWrite(buf);//вызов функции записи
Serial.println(buf);

void CardWrite(char* filename)//Создание и запись в файл
и т.д.
Goldz
 
Сообщения: 3
Зарегистрирован: 18 июн 2011, 09:41

Re: SD карта

Сообщение HarryStar » 18 июн 2011, 21:55

Ваш хх - это тоже лонг и в чар их надо превращать так же.
Отличие в том, что мой вариант дает гарантированно не повторяющиеся имена, а ваш - нет.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: SD карта

Сообщение Strijar » 20 июн 2011, 10:59

Насколько я понял это на с++. На С было бы так:

char name[32];
int num = 0;

sprintf(name, "%i.txt", num++);
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: SD карта

Сообщение HarryStar » 20 июн 2011, 13:00

в этом плане С++ ничем не отличается. Там все также. Хотя я предложил ТС просто заменить 2-ю строку
с
Код: Выделить всё
xx=random(99999999);

на
Код: Выделить всё
xx++;
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: SD карта

Сообщение Strijar » 20 июн 2011, 13:54

HarryStar писал(а):в этом плане С++ ничем не отличается


Да я знаю, что не отличается - за скобками осталось "Нафига?" ;) Писать для AVR на ООП?
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11