Помогите с кодом.
- Войдите на сайт для отправки комментариев
Доброго всем времени суток.
Нужна помощь с кодом:
Есть dataFile в котором хнанится значение raw в формате Char (точнее значение храниться в документе на флешке и считываеться в dataFile)
это значение Char нужно перевести в unsigned int для вставки значения.
unsigned int irSignal[67] ={тут значение Char};
в оригинале значения raw равны (4550,4450, 600,1650, 550,1700, 600,1650, 550,550, 600,550, 550,550, 550,550, 600,550, 550,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 550,550, 600,500, 600,550, 550,1700, 550,1650, 600,1650, 550,600, 550,550, 550,550, 600,550, 550,1700, 550,550, 550,550, 600,550, 550,1700, 550,1650, 600,1650, 550,1700, 600)
Занимаюсь Arduino не так давно поэтому возникают проблемы в программировании.
Заранее спасибо.
Проблема, как прочитать из файла данные? См. методы класса File.
Проблема именно перевести значение в unsigned int. Я далек от програмирования, Недавно только начал изучать ардуино.
вот кусок моего кода
File dataFile = SD.open(String(val,DEC)); // Открываем файл
if (dataFile) {
while (dataFile.available()) { // Проверяем что файл не пустой
Serial.write(dataFile.read()); // выводим содержимое в сериал
unsigned int irSignal[67] = {тут нужно вставить значение из dataFile} ; // Тут вставляем raw код из datafile
irsend.sendRaw(irSignal, 67, 38);
SD.open открывает текстовый файл на флешке в котором записано значение raw
в каждом файле содержится одинаковое содержимое вида
4550,4450, 600,1650, 550,1700, 600,1650, 550,550, 600,550, 550,550, 550,550, 600,550, 550,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 550,550, 600,500, 600,550, 550,1700, 550,1650, 600,1650, 550,600, 550,550, 550,550, 600,550, 550,1700, 550,550, 550,550, 600,550, 550,1700, 550,1650, 600,1650, 550,1700, 600
код кнопки.
тоесть при отправке определенной команды, на флешке открывается определенный файл, его содержимое считывается и это содержимое нужно вставить в
unsigned int irSignal[67] = {тут нужно вставить значение} ;
для отправки этого содержимого.
беда в том что dataFile считываеться как значение char в терминале все супер.
проблема именнов вставить значение в unsigned int arduino выдает ошибку что необходимо перевести char в unsigned int, к несчастью я не знаю как это сделать. пробовал разные варианты конвертации но тогда значение на выходе меняется или запятые или сами числа.
У вас в файле данные в текстовом виде, как вы указали, т.е. 4550,4450, и т.д.? Или в бинарном?
обычный текст
таких файлов около 50 пока.
в дальнейшем будут добавлены еще пара сотен.
Суть проекта универсальный пульт от всего, что только возможно! В файлах на шлешке хранятся raw кнопок. Принцип 1 устройством управлять всем Tv / Копдиционер / чайник / и тд. С возможностью добавить новые устройства путем простого копирования файла со считаным raw. По большей части я уже сделал то что хотел но код не влезает на arduino (Рабочий код получился на 90 000 байт и глобальные переменные на 6 000 примерно). поэтому было принято скинуть часть с raw на карту sd. Все получилось на ура за исключением того что я немогу теперь вставить значение из dataFile если написать unsigned int irSignal[67] = {dataFile}; то приходит не код со структурой как в файле Типа
4550,4450, 600,1650, 550,1700, 600,1650, 550,550, 600,550, 550,550, 550,550, 600,550, 550,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 550,550, 600,500, 600,550, 550,1700, 550,1650, 600,1650, 550,600, 550,550, 550,550, 600,550, 550,1700, 550,550, 550,550, 600,550, 550,1700, 550,1650, 600,1650, 550,1700, 600
а каша по принципу
26546546545454654654543214356344556421572245574155447524455674234456542465546254356253454
24562544565642654546725645245652445546652445564254546542456524455462545467254478455645435
5475442543546245546265445652434556424541264345654245564625464566524456546246556465
которую мне и нужно победить.
если raw прописан принудительно то все работает.
Вот смотрите, какой алгоритм работы вам нужен:
1. Открываем файл.
2. Заводим локальный буфер под строковое представление числа (пусть это будет String buff;)
3. Посимвольно читаем из файла.
4. Смотрим - это символ ',' ?
5. Не запятая? Складываем прочитанный символ в буфер.
6. Запятая? Смотрим - если в буфере чего-то есть - переводим его в число. Очищаем буфер. Получившееся число сохраняем по текущему индексу записи в массив. Инкрементируем индекс записи в массив.
7. Достигнут конец файла? Вываливаемся из цикла.
8. Если в буфере чего-то есть - переводим его в число. Получившееся число сохраняем по текущему индексу записи в массив.
Всё, на выходе вы получите массив из чисел. Поймите правильно - код несложный, и написать его я могу быстрее, чем писал этот пост. Но - так неинтересно, ибо задача стоит не передо мной, а перед вами, значит, будет больше кайфа, если вы сами сможете её решить. Алгоритм я вам дал. Могу накидать и псевдокод, он не скомпилируется, естественно, т.к. создан на несуществующем языке программирования, отдалённо напоминающем смесь паскакаля и LUA:
Спасибо просто проблема, что я новичек в программировании
в raw именно запятые идут с чередованием числа, с буффером пока работать ненаучился.
За код спасибо попробую разобраться.
перерыл кучу сайтов. В упор немогу понять как работать с буфером. Уже мозги кипят...
помогите плииз
Ок, вот ПРИМЕРНЫЙ код:
Компилировать не стал, проверять не стал - разберётесь, если что не так, думаю. Я даже комментарии добавил, на всякий. Писал навскидку, так что as is.
Ок, вот ПРИМЕРНЫЙ код:
Компилировать не стал, проверять не стал - разберётесь, если что не так, думаю. Я даже комментарии добавил, на всякий. Писал навскидку, так что as is.
Спасибо за головоломку. Буду завтра разбираться... голова уже кипит. Чувство, что я опять в школе которую закончил давным давно ((( но кажись идея гиблая... не програмист я, да и код опять побходит к пределам возможностей ардуино уже материться (Недостаточно памяти, программа может работать нестабильно.), а еще нужно прицепить bluetooth wifi да и батарейку еще с отслеживанием заряда. Задумываюсь попытаться вообще прикрутить pgmspace.h
Посмотри в сторону конечных автоматов. (конечные автоматы) На их принципе работают компиляторы/интерпретатор, у тебя задача, что-то в духе интерпретации.
Посмотри в сторону конечных автоматов. (конечные автоматы) На их принципе работают компиляторы/интерпретатор, у тебя задача, что-то в духе интерпретации.
И чего там компилировать/интерпретировать, что мы сравниваем с компиляторами/интерпретаторами? Вычитать из текстового файла числа? Да, задача как раз для конечного автомата. Для конечного автомата, Карл!
По ходу, кто-то увидел красивое словосочетание в книжке (ну или только вчера прочитал главу и пропёрся). Поверьте, задача ТС не то, что тривиальная - она архитривиальная, и никакими конечными автоматами там и не пахнет. И пахнуть не должно.
Хорошо, вот псевдокод:
Это нестрогий парсер. Всё нормально подходит. Если снизу после ифов поставить проверку на неизвестные символы, будет строгий парсер. В чем я не прав?
Всем спасибо!проблема решена все работает...
В чем я не прав?
Во всём ты прав, только вот дрочерство ради дрочерства - это диагноз. Задача решается гоооораздо проще и эффективнее, без онанизма вприсядку. А так да, ты прав - можно конечный автомат куда хочешь припиздячить.