intTosha: да, программа выполняется последовательно.
Один пин включили, ожидание, второй пин включили, опять ожидание.
в итоге шестой выключится через 732+1329мкс.
Если несколько пинов.
можно попробовать через if'ы сделать
функцией millis() или micros() получать значение времени
а в цикле проверять их и управлять пинами.
for(........)
{
//если остаток от деления мкс более 500 включить пин, иначе вырубить
if((micros() % 1000) >500) digitalWrite(6,1);
else digitalWrite(6,0);
if((micros() % 700) >350) digitalWrite(9,1);
else digitalWrite(9,0);
}
и в том же духе.
Можно такой блок с ifом запихнуть функцию для удобства.
micros() переполняется примерно через 70 мин, но т.к. мы используем остаток от деления, то вообще пофиг)
intTosha: во первых аналогврайт это ШИМ ардуины, который работает жестко на одной частоте (около 490 Гц, для всех ШИМ выводов, кроме тех, которые на нулевом таймере)
1. попробуй настроить пин на цифровой вывод;
2. переведи пин в высокий уровень;
3. делаешь задержку:
delay() - в миллисек
или
delayMicroseconds() - в микросек;
4. переведи пин в низкий уровень;
5. такая же задержка;
Изменяя задержку, изменишь и частоту, следовательно и звук.
Ну и сделать внутри каждого for дополнительные чтения mySwitch.getReceivedValue(). Если оно вернет значения отличные от состояния "ничего не пришло" и отличное от того, что уже было, то сделать break
примерно:
unsigned long old_code = kod;
if (kod == kod5)
for (i = 1; i < 40; i++) {
...
kod = mySwitch.getReceivedValue();
if(kod > 1 && kod != old_code) break;//принуд. выход
delay(40);
}
Константин: Всё будет зависеть от порогов срабатывания (будете ли держать с точностью до градуса или более широкие допустимые границы) и мощности двигателя. Если постоянно открывать-закрывать, то двигатель быстро сожрёт заряд, если нет, то 2-3 дня при малом потреблении возможны.
Так же можно контроллер в спячку отправлять для еще большей экономии.
Ну и что бы двигателю напряжения хватило надо смотреть. Скорее всего это будет, как минимум 2 последовательно соединенных аккумулятора. (Напряжение складывается в этом случае, либо step-up преобразователи)
Как вариант баловство с солнечными панелями устроить, но это резцо увеличит цену системы. :)
Константин: для мотора нужно будет осуществлять управление. В зависимости от типа двигателя и механизма открытия/закрытия они могут быть разными.
Это может быть драйвер для шаговика;
конденсатор параллельно питания сервопривода (впрочем они всегда не лишние);
реле/транзисторы/диоды, опять же конденсатор для двигателей постоянного тока.
Константин: По двигателю, как вариант, сервопривод или то, что будет в наличии, например двигатель постоянного тока, который можно и нахаляву раздобыть.
Например DHT22 для измерения температуры (можно и влажности) 200-300руб на AliExpress.
Двигатель выбирать в зависимости от того, как придумаете механизм крепления.
Серожа none: Да я не против, но по мне для таких скоростей нужно довольно дорогое оборудование(хотя бы датчики), особенно, если лента светоотражающая, то там же кроме цвета будут и блики от источника света, наверное.
Впрочем, профессионалам виднее, а я просто подпишусь и понаблюдаю. :)
smart_alex: два резистор по 470к образуют делитель, в средней точке которого 2,5В относительно земли (резистор R4). Он будет заряжать конденсатор, а также просто суммироваться с измеряемым напряжением, т.к. измерение через цепь R1->R4->GND. На R4 повторюсь и есть 2.5 В - ваша проблема, как я понял.
Для решения выпилить делитель можно, но сначала надо подумать. :)
smart_alex: я про проверить АЦП пишу.
Отрубите свою схему, остается одна мега.
Ставите вывод значений с АЦП.
Смотрите, что будет выдавать А0, когда он соединен с GND, затем, когда соединен с +5В.
Аналогично для А1 и т.д.
Если АЦП рабочие, то следующий вопрос, что будет выходным сигналом с трансформатора: какое напряжение, частота?
smart_alex: на голом контроллере соедините А0 и GND, сделайте аналогРид(), что выдаст.
Тоже самое при соединенных А0 и +5В
(для меги)
Какие значения вернет ардуина. (без пересчетов в вольты)