Ви не увійшли.
А за что ж их тогда в расход пустили?
Что-то картинки ^^^ не видны.
Классно использовать готовые библиотеки, получается скетч простой: http://arduino.ru/forum/proekty/remote- … ent-120352
Там в датчике крутятся магниты, вызывая 1400 срабатываний геркона на литр проходящей жидкости. Вам надо представить, что геркон - это простая "тактовая" кнопка и собрать схему по описанию для кнопки http://arduino.ru/forum/programmirovani … h-novichku
Т.е. надо победить дребезг контактов, не забыть о подтягивающем резисторе и считать фронты (или спады) импульсов.
Треба google'ити та читати https://www.arduino.cc/en/Reference/GSM та https://www.arduino.cc/en/Main/ArduinoBoardBT
Видно из сообщения, что байт по адресу 7178 записывается неправильно. Значит программа меньшего размера будет записываться без проблем (учитывая, что полкилобайта занимает бутлоадер).
У Arduino были глюки с блоками 0xFF, но это наверное не тот случай.
Может кто ещё знает, что делать (кроме замены чипа), но можно попробовать как-то разместить в прошивке массив фиксированных значений по ожидаемым адресам, которые залипли во Flash:
const uint8_t u8g_hackflashbug[] U8G_PROGMEM = { 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b }
Сделать массив побольше, объявить в программе подальше - а вдруг накроет совпадающими с багом данными и проверка пройдёт успешно.
Только надо ещё что-то сделать, чтобы оптимизатор не вырезал напрочь неиспользуемый блок данных, например вычитать где-то пару байт из него.
Я на выходных хотел поиграться с ИК-приёмником (с Arduino) и пультом от магнитофона, может быть похоже будет.
Да, метод Serial.readStringUntil('\n') читает полностью строку до служебного символа новой строки, а только потом её отдаёт. Зато потеряться ничего не должно.
Сделать массив состояния включённости выходов и массив кодов кнопок. При получении кода искать его в массиве кодов кнопок, таким образом находить соответствующий коду индекс. Для найденного индекса менять состояние включённости на противоположное. Если при нажатии на кнопку отправляется не один код, а серия одинаковых, то надо ещё завести пару переменных типа last_code и last_code_time для такой фильтрации: если свежеполученный код равен last_code и время получения last_code_time ещё свежее, то не считать получение этого кода как новое событие, а всего лишь обновить last_code_time. При этом last_code_time может хранить не время, а счётчик: сначала при получении кода записываем туда константу, а потом каждый новый проход уменьшаем на 1, если значение всё ещё больше, чем 0.
if (Serial.available() > 0) {
String str = Serial.readStringUntil('\n');
if (str.startsWith("+CMT")) ...А если как-то так вычитывать? Да и не помешало бы всё вычитанное отправлять в Serial Monitor для отладки. Бывает логика подсказывает одно, а глазами увидишь - и всё становится ясно.
____________________________
"серийный порт" - для маньяков
Да уж, 10 метров провода могут собирать наводки. А что, если 1 кОм поставить?
у меня 4 канальное реле, включается только 2( Пожалуйста могли бы вы зделать для 4 и подскажите как изменить, что бы я мог включать все 4
Очевидно, что надо удвоить количество проверок и действий. Сделать по аналогии.
подав на arduino uno 7v ситуация со стабильностью не изменилась
Дык, если стабилизатор внутренний на 3.3 Вольта слабый, а запитанный от него модуль Ethernet'а может потреблять больше тока раза в 3..4, чем может выдать Ардуина, то увеличением напряжения питания не сильно поможешь.
Казалось бы, с кнопкой всё просто. Но, как ни странно, с ней есть нюансы. Во-первых, если на "слушающую" ножку микроконтроллера ничего не подавать, то он услышит помехи (наводку от 220 В сети скорее всего), поэтому вместе с простой кнопкой надо использовать резистор-подтяжку на землю или на питание (зависит от логики схемы). Во-вторых, если микроконтроллер (с его-то мегагерцами) успеет опросить состояние кнопки в момент её переключения, то будет заметен эффект "дребезга контактов", т.е. кратковременное замыкание-размыкание из-за особенностей реальной механики. В третьих, если кнопок много (матрица n*m) и мы их считываем (сканируем) общими ножками микроконтроллера, то надо не забывать, что "1" на выходе ножек - это "плюс" питания, а вот "0" - не отключённое состояние, а "минус" питания (условная "земля"). Хотя у микросхем и существует некое третье состояние - высокоимпедансное, когда ножки не выдают ни 1, не 0, а как-бы повисают в воздухе.
Да что уж тут говорить, когда есть Google и тема старая:
* Пример для кнопки и светодиода: http://arduino.ru/tutorials/button
* Обсуждение подключения кнопки: http://arduino.ru/forum/programmirovani … h-novichku
_______________________________________
У кошки 4 ноги: вход, выход, земля и питание.
Исправить ошибку в простейшем скетче, подсказать что-то - это одно дело, а написать за кого-то - совсем другое.
Да и в чём тогда радость самостоятельного изучения Ардуино?
____________________________
http://geektimes.ru/hub/arduino/
Когда двигатель крутится на малых оборотах, он немного вибрирует и работает микрорывками - вращение не плавное.
Всё правильно, это же шаговый двигатель, он шагает)
Отличие вашего исходника в том, что состояние выхода теперь хранится не в одной переменной, а в массиве PinStatus[] из 8 элементов. Вот и надо по аналогии повторить для каждого этапа в цикле все те же действия, что были в моей версии.
Массив статусов можно объявить более наглядно:
boolean pinStatus[8] = {false, false, false, false, false, false, false, false};
Пройтись циклом так:
for (int i = 0; i < 8; i++) {
pinStatus[i] = false; // тут может быть что-то полезное
}А если без цикла, то в C++, как и в большинстве других языков программирования, массив начинается с нулевого индекса, т.е. для 8 элементов будет от pinStatus[0] до pinStatus[7], а pinStatus[8] будет указывать уже на что-то левое в памяти и может даже сломать логику программы.
Вобщем, надо основы языка C учить, даже пока не C++. Знания основ C пригодятся любому айтишнику.
Т.е. достаточно просто плавно поворачивать энкодер? В чём-то тут подвох.
Конденсаторы для убирания помех поставлены, провода не перепутаны, программа не подвисает, в ней переполнения целых типов не происходят? :-)
Значения, получаемые с энкодера, точно увеличиваются плавно?
Значит эта штукенция программируется с обычного компьютера, а потом может управляться с Android'а http://labs.arduino.cc/ADK/index
Плавающие значения на пине - как правильно делать усреднение
Да, фильтр поставить (вариант -- RC-цепочка) или сымитировать его, померяв несколько раз и усреднив.
Или отбросить младшие биты как незначимые, если это реально шум ненужный.
Как правильнее проводить сбор данных - по таймеру (например 1 раз в секунду) или проводить опрос в удобное время
Для систем автоматического управления / цифровых регуляторов важно соблюдать точный период дискретизации, т.е., например, собирать данные по таймеру. Иначе дрожание частоты дискретизации может ухудшить качество регулирования. Даже простой ПИД-регулятор может через Д-составляющую что-то напортить. Но если процесс медленно меняющийся по отношению к частоте опроса датчика, да ещё и регулятор всего лишь первого порядка, то IMHO можно не заморачиваться и делать как проще.
Между иголками будут мегаомы, поэтому я бы для простоты взял такой датчик, который сразу "1" выдаст при наличии воды -- http://arduino-ua.com/prod521-Datchik_vlajnosti_pochvi
Перекрывать воду пусть будет шаровый кран с электроприводом, у них ещё там концевой выключатель должен быть внутри.
Для запуска моторчика клапана от датчика нужен посредник типа такого http://arduino-ua.com/prod984-rele-tver … --3-36-vdc.
Всё, что есть, IMHO тут: https://www.arduino.cc/en/Main/Software
Пожалуйста)
Нагуглил, что для обеспечения большей стабильности модуль enc28j60 необходимо питать от отдельного стабилизатора на 3.3 Вольта, т.к. Arduino обещает только 50 мА.
Ещё один товарищ придумал делать аппаратный сброс enc28j60, если Arduino что-то не понравится.