не очевидное состояние выхода (NANO)
- Войдите на сайт для отправки комментариев
Втр, 05/06/2018 - 11:39
Оборудование: Ардуинка Нано, GSM модуль SIM800, 3 реле на ключах (кт3102), питание 12V + преобразователь с 12V на 4V (для SIM800). Мощность источника 12V - достаточная.
Реле на выходах 2, 3, 4 . Так вот на D4 в состоянии "1" - напряжение 1,4 V; "0" - 0,1V. (на 2и 3 - 5V и 0,01V соответственно). От состояния на выводах 2 и 3 не зависит (то есть грешить на нехватку мощности преобразователя видимо не стоит).
Вопрос - никто не сталкивался? Что это может быть: кирдык платы, кривые руки или еще что то.
Причем, что интересно - реле отрабатывает, но информация о состоянии выхода (по digitalRead) считывается как "0"
ставлю на то, что D2 и D3 в скетче описаны как OUTPUT, а про D4 забыли
Да, еще забыл. Если загрузить "блинк" на этот вывод (на этой собранной плате) - все отрабатывает нормально (0,01V и 5V)
Да, еще забыл....
Вы забыли не только это. Вы также забыли приложить схему, скетч и фото сборки. А хрустальные шары здесь запрещены :(((
Использован известный (модифицированный под собственные нужды код)
Подключение выходов организовано так:
int pins[3] = {2, 3, 4};
}
Использован известный (модифицированный под собственные нужды код)
Подключение выходов организовано так:
int pins[3] = {2, 3, 4};
}
это круто :) Добавьте вывод в Сериал переменной i и убедитесь, что до третьего по счету пина ваш цикл не доходит :)
Вова, ты до сих пор код вставлять не научилса? Как эту галиматью читать прикажешь?
Схем простая: ключ на n-p-n транзисторе кт3102 (на всез 3-х выходах одинаково), резистор в базе =6,8к, диод на реле кд522
Ну, так и есть, прав был b707- 4-ый пин не сконфигурирован.
Только впредь выкладывайте код по правилам форума.
Схем простая:
Вас никто не спрашивал простая она или сложная. Вас просили её привести. Где?
Впрочем, про 4-ый пин Вам уже писали раньше, сейчас это подтвердилось.
Вова, ты до сих пор код вставлять не научилса? Как эту галиматью читать прикажешь?
Да
Всавлял по кнопке "вставить код"
Prostovova, у вас странная манера отвечать в ветке - как-то невпопад все время...
Ошибку-то свою поняли? Вопрос закрыт?
Ура!
Заработала!
Спасибо!
Ура!
Заработала!
Спасибо!
существует 99 способов, можно и так, а вообще я бы за такой код отправлял на лесоповал, что показываете? умение пользоваться массивами...в языке это называется косноязычие
а вот такая рукожопая запись использует памяти поменьше
Ура!
Заработала!
Самое время подумать, а нахрена там массив int pins[3] = {2, 3, 4}; ? Может, без него?
И всего делов?
Самое время подумать, а нахрена там массив int pins[3] = {2, 3, 4}; ? Может, без него?
И всего делов?
не, если отвлечься от экономии одной строчки в коде, я бы оставил массив. Пины же могут оказаться не подряд... а вдруг какой-то из них нужно будет изменить?
Нет, явное задание пинов мне больше нравится. Более того, для трех штук я бы и цикл выкинул - просто три раза написал бы pinMode(pin, OUTPUT);
Ну, я тоже пины храню в массиве... Можно вразнобой накидывать, местами менять, добавлять, убавлять, потом циклом по (sizeof()/sizeof(pins[0]) инитить.
Мне так больше нравится.
А мне понравился способ. Для меня - не очевидно (я бы то же задал через pinMode). Учитывая дефицит памяти, каждая сэкономленная строчка - это есть хорошо. Наверняка захочется еще что то сюда прикрутить и с моими навыками точно лучше заранее сэкономить.
Если к началу - штука задумана на дачу. Управление 3-мя нагрузками и измерение температуры в 3-х точках (на улице, в доме и отдельно в санузле). Например полив (это про лето) и 2 нагревателя (это чтобы зимой прогреть домик к приезду)
Есть мысль прикрутить датчик BME280 для измерения давления в бочке и пересчета по нему объема воды в бочке. диапазон изменения глубины от 0 до 1,5 метра, объем соответственно от 0 до 4 м.куб. Пока прорабатываю конструктив (все должно быть предельно герметично). Здесь даже код почти готов - и он потребует каких то ресурсов. Но прежде чем прикручивать его сюда надо все отмакетировать и оттестировать - есть много сомнений.
А если массив ещё и константным сделать, то компилятор его и без нас выбросит :)))
Учитывая дефицит памяти, каждая сэкономленная строчка - это есть хорошо. Наверняка захочется еще что то сюда прикрутить и с моими навыками точно лучше заранее сэкономить.
Если к началу - штука задумана на дачу. Управление 3-мя нагрузками и измерение температуры в 3-х точках (на улице, в доме и отдельно в санузле). Например полив (это про лето) и 2 нагревателя (это чтобы зимой прогреть домик к приезду)
все перечисленное примерно требует трети ресурсов Уно :)
А, что подскажут многоуважаемые Гуру?
В коде есть очень неудобочитаемая строка. Как бы ее сделать посимпатичнее и нагляднее?
результат от нее такой:
А, что подскажут многоуважаемые Гуру?
Подскажут идти и читать Кернигана и Ритчи.
А строку разбить на куски переводом строки там, где кажется красивше.
строку переписать на нормальном человеческом языке - как сам код, так и результат вывода...
Ну, я тоже пины храню в массиве... Можно вразнобой накидывать, местами менять, добавлять, убавлять, потом циклом по (sizeof()/sizeof(pins[0]) инитить.
Мне так больше нравится.
Это конечно красиво, когда код сам формирует "программный код", для устройств с "неограниченными ресурсами", но мне кажется для микроконтроллеров программировать надо так, чтобы расходовать ресурсы минимально, к примеру можно задать алгоритм расчета константы и использовать его, а можно просто вычислить константу и пользоваться оной, так вот второе - правильно, первое - нет!
Так я по-всякому делаю - бывает, что давлю из последних сил байты из МК , меняя switch() на if().
Но не думаю, что стоит всегда экономить на спичках и устраивать hardcode party, когда остается еще 50% прогмема и при этом можно сделать легкое увеличение количества обрабатываемых входных каналов (к примеру) добавлением одной цифири в массив с пинами.
Так я по-всякому делаю - бывает, что давлю из последних сил байты из МК , меняя switch() на if().
Но не думаю, что стоит всегда экономить на спичках и устраивать hardcode party, когда остается еще 50% прогмема и при этом можно сделать легкое увеличение количества обрабатываемых входных каналов (к примеру) добавлением одной цифири в массив с пинами.
я заинтересовался микроконтроллерами после устройств с жёсткой логикой, привычка на всём экономить, для меня 1 килобайт ассемлерного кода это просто колоссально много (по функционалу)
а хардкорд - это к Юре Панчулу, он тексты парсит чистой логикой и никаких микропроцессоров, триггера и логика )))
Некоторые африканские племена до сих пор зерна на каменных жерновах перетирают, не строят никакие заводы с мозговыносящей логистикой и двадцатью бухгалтерами в штате ;) Хорошо это или плохо - who knows... Наверное, если на Замлю упадет метеорит, то мы со своими заводами вымрем, а они еще лет пятьсот будут крутить жернова.
Некоторые африканские племена до сих пор зерна на каменных жерновах перетирают, не строят никакие заводы с мозговыносящей логистикой и двадцатью бухгалтерами в штате ;) Хорошо это или плохо - who knows... Наверное, если на Замлю упадет метеорит, то мы со своими заводами вымрем, а они еще лет пятьсот будут крутить жернова.
у нас заводов нет, за исключением пожалуй дервейса
Я прошу прощения, возможно это уже не аппаратный вопрос.
Кде то какой то косяк. Эта вся штука не работает как просили без подключения к компу. То есть, когда плата подключена к компу и отурыт монитор порта - все работает (звоню - отбивает вызов и шлет СМС). Автономно - без подключения к кмпьютеру - вызов проходит, отбоя и ответной смс нет
Код тот же.
Я прошу прощения, возможно это уже не аппаратный вопрос.
Кде то какой то косяк. Эта вся штука не работает как просили без подключения к компу. То есть, когда плата подключена к компу и отурыт монитор порта - все работает (звоню - отбивает вызов и шлет СМС). Автономно - без подключения к кмпьютеру - вызов проходит, отбоя и ответной смс нет
Код тот же.
А как работает, если подключить к компу, но не открывать монитор порта?
Нормально работает - как просили...
Тогда, вероятнее всего, проблема с питанием.
Фиг знает
Закомментировал всё, что связано с выводом в порт, все Serial.print, включая:
128
if
(
Serial
.available()) {
// Ожидаем команды по Serial...
129
SIM800.write(
Serial
.read());
// ...и отправляем полученную команду модему
130
};
Вроде заработала.
Хотя наверно только это то и стоило....
Проверил. Так и есть. Закомметировал только эти строки и всё заработало.
Ещё бы! Если без байта пришедшего из сериала Вы ни хрена не отправляете!:)