Так задай этот самый другой вопрос, может и узнаешь ответ. Если имеешь в виду массив из функций - так запросто. Можно даже в те же структуры, что я описал добавить еще поле - указатель на функцию.
Так задай этот самый другой вопрос, может и узнаешь ответ. Если имеешь в виду массив из функций - так запросто. Можно даже в те же структуры, что я описал добавить еще поле - указатель на функцию.
Что в моем вопросе в #49 не понятно? Я там ничего про массивы не писал, а писал о «подстановке», если так понятнее. Но на сколько я знаю, в Си такое невозможно. Или возможно?
Принципы проектирования классов SOLID в PHP. Принцип подстановки Барбары Лисков. (Liskov Substitution Principle, LSP). Это третий из пяти принципов SOLID и ...
Вот смотри, вполне используемая в PHP конструкция:
$name = "classname";
$obj = new $name;
Вполне законная и по моему вопросу выше конструкция (так же в PHP):
$("LED" . $i . "_PIN")
Где $i - переменная в цикле от, к примеру, 0 до N. (Могу синтаксис написания немного путать, давно не говнокодил на PHP, но вроде бы все так). Результат будет перечень переменных вида: LED0_PIN, LED1_PIN .. LEDN_PIN, которым даже значения можно присваивать и считывать их.
В Си я ничего подобного не встречал. Поэтому и задал вопрос...
Первый кусок кода на рефлексию смахивает, если не ошибаюсь. И шо ты хочешь от $("LED". $i . "_PIN")? Обращение к пину или переменная с номером пина? Если обращение к пину - то никак. Не в си дело, в виринге. В вирингн только один способ к пину digitalWrite/digitalRead. Можно конечно из чистого си извернутся, но это уже не совсем ардуино, платформенно-зависимый код. Если переменная с номером пина - нет проблем led[i].pin из объявлений в #51. Записывать и считывать можно. Это массив структур. Можно и LED[i].Set(HIGH) - вызов функции Set(HIGH) с параметром HIGH, для i-го пина она может быть индивидуальной, может общей для всех или некоторых.
Варианты с строковыми именами ("LED" и т.д) - не плохо, а очень плохо. Строки сильно медленно обрабатываются. Потому в си только идентификаторы - константы, числа но ничто не мешает их именовать
Варианты с строковыми именами ("LED" и т.д) - не плохо, а очень плохо. Строки сильно медленно обрабатываются. Потому в си только идентификаторы - константы, числа но ничто не мешает их именовать
taskData led3 = (taskData){false, 200, 0}; // задача неактивна, т.е. не начинает выполняться в момент старта МК, интервал срабатывания - 200 милисекунд
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, zzziii@mail.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.23 (FreeBSD) mod_fcgid/2.3.6 PHP/5.2.17 with Suhosin-Patch DAV/2 Server at arduino.ru Port 80
-----------------------------------------------
Вчера сообщил на этот адрес: zzziii@mail.ru
taskData led3 = (taskData){false, 200, 0}; // задача неактивна, т.е. не начинает выполняться в момент старта МК, интервал срабатывания - 200 милисекунд
1
// ==== список задач ============================
2
taskData led1 = (taskData){true, 500, 0}; // задача активна, интервал срабатывания - 500 милисекунд
3
taskData led2 = (taskData){true, 20, 0}; // задача активна, интервал срабатывания - 20 милисекунд
4
taskData led3 = (taskData){false, 200, 0}; // задача неактивна, т.е. не начинает выполняться в момент старта МК, интервал срабатывания - 200 милисекунд
5
taskData led4 = (taskData){true, 300, 0}; // задача активна, интервал срабатывания - 300 милисекунд
Каждая задача должна выполнять какое-то действие. А значит должна быть функция, которая будет вызываться
как видете - без проблем.
Только неясно, нафига вы тут номера строк, их надо удалять. Наверно вы этот код прямо из сообщения копировали - а надо сначала нажать кнопку "копировать код". При прямом копировани в код попадают лишние символы, которые потом могли привести к ошибке при вставке
// ==== первый светодиод ========================
void setLed1()
{
static bool led_state = false; // флаг состояния светодиода
led_state = !led_state; // меняем флаг состояния светодиода на противоположный
digitalWrite(LED1_PIN, led_state); // выполняем работу - включаем или выключаем светодиод
}
Стандартная отсылка к скетчу BlinkWithoutDelay очевидно не всегда помогает новичку понять суть вопроса. Здесь мы попробуем разжевать вопрос более подробно и попытаемся создать некое подобие диспетчера задач.
Когда то еще в прошлом веке с друганом изучали программирование, так сказать, пописывая небольшие игрушки на бейсике/асме бк и спектрума. Оба быстро нарвались на необходимость множества параллельных действий. Интернетов тогда не было, да и с книжками не очень, что такое КА удалось узнать через годы и хотя мозговой штурм был не долгим, но основной затык я помню - это именно переход от линейного выполнения команд друг за другом к алгоритму КА, а собственно написание кода после этого осознания настолько плевое дело, что не особо нуждается в разборе, ну вот разве что как это все красивше оформить. Ну т.е. imho именно отличие алгоритма КА от мигалки с delay нуждается в объяснении и именно поэтому BlinkWithoutDelay не помогает новичку - новичок просто не понимает сходу принципиальную разницу.
Когда то еще в прошлом веке с друганом изучали программирование, так сказать, пописывая небольшие игрушки на бейсике/асме бк и спектрума. Оба быстро нарвались на необходимость множества параллельных действий. Интернетов тогда не было, да и с книжками не очень, что такое КА удалось узнать через годы и хотя мозговой штурм был не долгим, но основной затык я помню - это именно переход от линейного выполнения команд друг за другом к алгоритму КА, а собственно написание кода после этого осознания настолько плевое дело, что не особо нуждается в разборе, ну вот разве что как это все красивше оформить.
Верно. Даже предложенный здесь диспетчер задач требует пересмотра подхода к программированию. Но таки кто хочет - сможет. А кто не хочет - ему ничего не поможет ))
Чисто тебе, как бывшему ПэХэПэшнику. Делай как то так
Ну так то и слону понятно. Меня другой вопрос интересовал.
Так задай этот самый другой вопрос, может и узнаешь ответ. Если имеешь в виду массив из функций - так запросто. Можно даже в те же структуры, что я описал добавить еще поле - указатель на функцию.
Эта функция должна вызываться как можно чаще, чтобы не иметь проблем с пропусками выполнения задач, а потому поместим ее вызов в loop().
Ну и итоговый скетч:
Светодиоды подключаются к цифровым выводам 4, 5, 6 и 7 ардуино.
--------------------------------------------------------------------------------
Я так понимаю это ответ на мой вопрос !
Мне нравится!!
А скетчи от Green 24/01/2022 - 08:10 & BOOM 25/01/2022 - 07:57
у меня как-то не работают.
Я так понимаю это ответ на мой вопрос !
В общем-то нет. Таких вопросов здесь вагон и маленькая тележка ))
Так задай этот самый другой вопрос, может и узнаешь ответ. Если имеешь в виду массив из функций - так запросто. Можно даже в те же структуры, что я описал добавить еще поле - указатель на функцию.
Что в моем вопросе в #49 не понятно? Я там ничего про массивы не писал, а писал о «подстановке», если так понятнее. Но на сколько я знаю, в Си такое невозможно. Или возможно?
Не. Не понятно. Не понятно что ты хочешь получить. Даже гугл не помогает.
на "подстановка php"
Как в PHP работает подстановка переменной в строку?
Подстановка в строку значений из массива | PHPClub
SOLID - Принцип подстановки Барбары Лисков - simple ...
???
если про СОЛИД - то я за! )))
Logik
Вот смотри, вполне используемая в PHP конструкция:
Вполне законная и по моему вопросу выше конструкция (так же в PHP):
Где $i - переменная в цикле от, к примеру, 0 до N. (Могу синтаксис написания немного путать, давно не говнокодил на PHP, но вроде бы все так). Результат будет перечень переменных вида: LED0_PIN, LED1_PIN .. LEDN_PIN, которым даже значения можно присваивать и считывать их.
В Си я ничего подобного не встречал. Поэтому и задал вопрос...
Первый кусок кода на рефлексию смахивает, если не ошибаюсь. И шо ты хочешь от
$(
"LED"
. $i .
"_PIN"
)
? Обращение к пину или переменная с номером пина? Если обращение к пину - то никак. Не в си дело, в виринге. В вирингн только один способ к пину digitalWrite/digitalRead. Можно конечно из чистого си извернутся, но это уже не совсем ардуино, платформенно-зависимый код. Если переменная с номером пина - нет проблем led[i].pin из объявлений в #51. Записывать и считывать можно. Это массив структур. Можно и LED[i].Set(HIGH) - вызов функции Set(HIGH) с параметром HIGH, для i-го пина она может быть индивидуальной, может общей для всех или некоторых.Варианты с строковыми именами ("LED" и т.д) - не плохо, а очень плохо. Строки сильно медленно обрабатываются. Потому в си только идентификаторы - константы, числа но ничто не мешает их именовать
Варианты с строковыми именами ("LED" и т.д) - не плохо, а очень плохо. Строки сильно медленно обрабатываются. Потому в си только идентификаторы - константы, числа но ничто не мешает их именовать
Спасибо.
Добавил ссылку в #3 Песочницы.
Я так понимаю, что обращение к задаче выполняется только один раз! Как бы изменить эту ситуёвину?
При попытке вставить правильно код, выдаёт такое:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, zzziii@mail.ru and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.23 (FreeBSD) mod_fcgid/2.3.6 PHP/5.2.17 with Suhosin-Patch DAV/2 Server at arduino.ru Port 80 ----------------------------------------------- Вчера сообщил на этот адрес: zzziii@mail.ru
и написал об этом на форуме.
При попытке вставить правильно код, выдаёт такое:
а у меня без проблем
Может у вас код на 10 тыс строк?
Может у вас код на 10 тыс строк?
Или в тексте кода содержатся какие-либо спецсимволы, которые нельзя добавлять.
Я так понимаю, что обращение к задаче выполняется только один раз! Как бы изменить эту ситуёвину?
Cпасибо!
получилось!!
Может у вас код на 10 тыс строк?
Или в тексте кода содержатся какие-либо спецсимволы, которые нельзя добавлять.
как видете - без проблем.
Только неясно, нафига вы тут номера строк, их надо удалять. Наверно вы этот код прямо из сообщения копировали - а надо сначала нажать кнопку "копировать код". При прямом копировани в код попадают лишние символы, которые потом могли привести к ошибке при вставке
Да, работает!
Но пусть СисАдмин вместо того сообщения вставит примерно такой текст:
Ну Ты и лох! Научись правильно вставлять код!!
Да, работает!
Но пусть СисАдмин вместо того сообщения вставит примерно такой текст:
Ну Ты и лох! Научись правильно вставлять код!!
Самокритично )))
Стандартная отсылка к скетчу BlinkWithoutDelay очевидно не всегда помогает новичку понять суть вопроса. Здесь мы попробуем разжевать вопрос более подробно и попытаемся создать некое подобие диспетчера задач.
Когда то еще в прошлом веке с друганом изучали программирование, так сказать, пописывая небольшие игрушки на бейсике/асме бк и спектрума. Оба быстро нарвались на необходимость множества параллельных действий. Интернетов тогда не было, да и с книжками не очень, что такое КА удалось узнать через годы и хотя мозговой штурм был не долгим, но основной затык я помню - это именно переход от линейного выполнения команд друг за другом к алгоритму КА, а собственно написание кода после этого осознания настолько плевое дело, что не особо нуждается в разборе, ну вот разве что как это все красивше оформить. Ну т.е. imho именно отличие алгоритма КА от мигалки с delay нуждается в объяснении и именно поэтому BlinkWithoutDelay не помогает новичку - новичок просто не понимает сходу принципиальную разницу.
Когда то еще в прошлом веке с друганом изучали программирование, так сказать, пописывая небольшие игрушки на бейсике/асме бк и спектрума. Оба быстро нарвались на необходимость множества параллельных действий. Интернетов тогда не было, да и с книжками не очень, что такое КА удалось узнать через годы и хотя мозговой штурм был не долгим, но основной затык я помню - это именно переход от линейного выполнения команд друг за другом к алгоритму КА, а собственно написание кода после этого осознания настолько плевое дело, что не особо нуждается в разборе, ну вот разве что как это все красивше оформить.
Верно. Даже предложенный здесь диспетчер задач требует пересмотра подхода к программированию. Но таки кто хочет - сможет. А кто не хочет - ему ничего не поможет ))