Динамическое (автоматическое, программное) создание имени объекта класса в ардуино. Как?
- Войдите на сайт для отправки комментариев
Чт, 17/09/2015 - 14:54
Возможно я неправильно сформулировал вопрос, поэтому опишу УСЛОВНУЮ задачу для решения которой надо знать ответ на вопрос.
1)Точно известно, что "черный ящик" - это ардуино УНО.
2)К этому черному ящику подключены неизвестно сколько и неизвестно какие датчики, но есть основание полагать, что это датчики температуры из серии DS, например DS18S20, и датчики влажности из серии DHT
3)Прикасаться руками к чему-либо нельзя. Есть только компьютер, подключенный к ардуино.
Задача.
1) Определить к каким выводам ардуино подключены датчики
2)В качестве доказательства предъявить данные от этих датчиков
Алгоритм решение в "классическом" виде выглядит так
(обязательные действия, типа подключить библиотеку, пропущены)
создаем объекты, например для OneWire и используем методы, предоставляемые библиотекой
for (byte i=2; i<количества_выводов; i++){ OneWire (ds+i)(i); .... (ds+i)(i).reset; .... Serial.print("на выводе N="); Serial.print("i"); Serial.println("датчик. ROM="); }//конец цикла
Надеюсь понятно, что это только грубая концепция. "Гвоздь" этого кода невозможная строка 2. Тогда как без С++?
Здесь есть какой-то намек "Классы и объекты в Arduino" http://robotday.ru/2015/04/12/классы-и-объекты-в-arduino/ , но я не могу его расширить для решения представленного вопроса.
Ой, первый пост редактировать нельзя. Прошу прощения за допущенные грамматические и синтаксические ошибки.
Боюсь, что не до конца понял вопрос, но рискну предложить решение - если бред, то поясните почему и тогда я, возможно, лучше пойму вопрос.
Чета както плохо. Переменная i это таки индекс в массиве или номер пина? Еще наверно освобождать обекты может быть нужно, если на пине не датчик. А воще я может шо не понял. Мутный ответ на мутный вопрос.
Чета както плохо. Переменная i это таки индекс в массиве или номер пина? Еще наверно освобождать обекты может быть нужно, если на пине не датчик. А воще я может шо не понял. Мутный ответ на мутный вопрос.
И то и другое. Освобождать память конечно стоит, но это, как я понимаю - чисто тестовая программа, которая в итоге покажет, есть-ли где-нибудь W1-устройства или нет. Наверное это можно сделать и покрасивее, но и такое должно прокатить (если памяти хватит).
Кстати вот, немного улучшенная, на мой взгляд, версия:
В силу того, что нам на потом это все запоминать нет необходимости - в итоге можно обойтись только одним указателем, в итоге потратится меньше памяти и прочее.
Боюсь, что не до конца понял вопрос, но рискну предложить решение - если бред, то поясните почему и тогда я, возможно, лучше пойму вопрос.
1)Огромное спасибо за конструктивный подход и предложеное решение. Думаю Вы все поняли правильно.
Чета както плохо. Переменная i это таки индекс в массиве или номер пина? Еще наверно освобождать обекты может быть нужно, если на пине не датчик. А воще я может шо не понял. Мутный ответ на мутный вопрос.
И то и другое. Освобождать память конечно стоит, но это, как я понимаю - чисто тестовая программа, которая в итоге покажет, есть-ли где-нибудь W1-устройства или нет. Наверное это можно сделать и покрасивее, но и такое должно прокатить (если памяти хватит).
SunX, и Вам огромное спасибо. Если можно, напишите еще код освобождения памяти. И дайте пояснение к фразе "если памяти хватит". Я понял, что Ваш краивый код использует много памяти, но какой? И сколько?
SunX, и Вам огромное спасибо. Если можно, напишите еще код освобождения памяти.
Только имейте в виду, решение SunХ применимо только если эти объекты больше ни для чего не нужны. А если они нужны ещё после этого цикла - то надо моё использовать.
Оперативной памяти, в которой создаются динамические объекты. В C++ для удаления объекта используется
delete ...
например
delete ds[i];
С П А С И Б О ! ! ! Вечером буду творчески осваивать.