Страница 2 из 5

DS1990A

Добавлено: 22.03.2017{, 16:35}
zhulen820
У меня было три места установки. Металлическая стена и две деревянные. Делал в распаечная коробке.

DS1990A

Добавлено: 23.03.2017{, 04:10}
Sibiryak22rus
Anydy писал(а):Если интересно, то могу состряпать блок пользователя из проекта (кодил не я)....
очень интересно, вместо кнопочки для добавления ключей мастер ключ? у меня опыта программирования совсем нету, вот по понемножку осваиваю flprog, вот из проекта sser взял блок считывания ключа и блоки сравнения, вбил железно свой ключ (думаю что можно так же железно ещё ключей добавить) обвязал элементами и получилась сигнализация

DS1990A

Добавлено: 24.03.2017{, 09:45}
Anydy
Сделал! Работает!
Домофон

DS1990A

Добавлено: 24.03.2017{, 10:05}
slavas
Anydy, молодец только пара вопросов.
не лучше было бы сделать вход для считывателя и выходы для замка и светика чтобы программа могла эти пины зарезервировать за блоком. И "delay(5000);" предпоследняя строчка остановит выполнение программы на пять секунд, может просто импульс на выходе.

DS1990A

Добавлено: 24.03.2017{, 10:13}
Anydy
да, верно, завтра сделаю!

DS1990A

Добавлено: 24.03.2017{, 10:21}
slavas
а исходники дадите?

DS1990A

Добавлено: 24.03.2017{, 10:37}
Anydy
пожалуйста смотрите!

DS1990A

Добавлено: 24.03.2017{, 11:29}
slavas
Anydy, оки спс.

DS1990A

Добавлено: 25.03.2017{, 14:44}
Anydy
Пол дня провозился, как только добавляю вход или выход - все скетч перестает работать. Видимо ФЛпрог не умеет корректно создавать скетчи из блоков пользователя.
Может конечно я тупой....если есть программисты - покажите как сделать входы и выходы (исходник по ссылке есть)
По мне проще и быстрее написать код чем тыкать эти кнопки в программе, которая  через раз то закроется то IDE не открывается....сорри просто задолбался ...
Так работает:
byte saveKey = 3; // вход для кнопки обнуления
А так нет:
bool saveKey = 3; // вход для кнопки обнуления
Почему если в параметрах пользователя задать параметр, то все нормально, а если сделать вход для блока то нифига не работает?

DS1990A

Добавлено: 25.03.2017{, 15:16}
Boroda
Anydy писал(а):Почему если в параметрах пользователя задать параметр, то все нормально, а если сделать вход для блока то нифига не работает?
Ну смотря какой параметр. Если In, doorPin, statusLed, saveKey, то не будет работать, потому как pinMode выполняется только в секции Setup, а OneWire ds(In) в Declare. А если Time вытащите, то должно заработать.

DS1990A

Добавлено: 25.03.2017{, 18:32}
Anydy
Boroda писал(а):А если Time вытащите, то должно заработать.
Как раз Time и не надо вытаскивать, его вообще убрать надо...
Надо именно все остальные параметры вытащить на вход/выходы.
Почему в скетче применен тип Byte а не Bool для входа/выхода? Есть мысли?
Делаю вход saveKey(bool), соответственно в Loop меняю на:
if (saveKey) save(); // если нажали кнопку 
// сканируем шину, если нет устройств выходим из loop
Срабатывает, но перекидывает в функцию (error)....с какого перепуга?))
В функции Setup:
// если при включении нажата кнопка, сбрасываем ключи на 0 
if (saveKey) EEPROM.write(511, 0);
Это вообще не срабатывает....
Подскажите что я делаю не так?

DS1990A

Добавлено: 25.03.2017{, 18:55}
Boroda
Доработал Ваш блок. Светодиод статуса не удалось выкинуть наружу.

Добавлено (25.03.2017, 18:37)
---------------------------------------------
Теперь блок не зависает программу в error(), нет delay(), ожидание ключей при программировании 20 секунд, потом выход в обычный режим.

Добавлено (25.03.2017, 18:37)
---------------------------------------------
Стирание можно производить в любое время.

Добавлено (25.03.2017, 18:39)
---------------------------------------------
Anydy писал(а):if (saveKey) EEPROM.write(511, 0);
Это не работает потому как это Setup и до цикла Loop(), где читается внешняя кнопка, мы еще не дошли.

Добавлено (25.03.2017, 18:50)
---------------------------------------------
Anydy писал(а):Почему в скетче применен тип Byte а не Bool для входа/выхода? Есть мысли?
потому как это номер пина в командах pinMode(), digitalWrite(), digitalRead().

Добавлено (25.03.2017, 18:55)
---------------------------------------------
Anydy писал(а):Срабатывает, но перекидывает в функцию (error)....с какого перепуга?))
выход из loop() происходит командой return, куда она приведет - не знаю.

Вообще исходный скетч, из которого Вы делали блок, написан ужасно. Зависания, задержки... черти что.

DS1990A

Добавлено: 25.03.2017{, 19:10}
Boroda
Удалось вытащить ногу "статус"

DS1990A

Добавлено: 25.03.2017{, 19:30}
Anydy
Вот молодец!
Пара вопросов:
1. включил защиту от дребезга(глючило)
2. память не очищается(при нажатии кнопки и ресет...это очень важно)
3. EEPROM.write(511, 0);
EEPROM.write(0, 255);
EEPROM.write(1, 255);
EEPROM.write(2, 255);
EEPROM.write(3, 255);
Это только 4 ключа или я не верно понимаю?
4. Еще бы вывести считанный код с ключа!

DS1990A

Добавлено: 25.03.2017{, 22:50}
Boroda
Запись начинается при отпускании кнопки. Память стирается при удержании кнопки более 2 секунд и при отпускании начинается запись (это применительно к той плате, что я скинул).
Anydy писал(а):память не очищается
достаточно затереть количество ключей EEPROM.write(511, 0), при новой записи ключей эти данные заменятся.
Anydy писал(а):EEPROM.write(0, 255);EEPROM.write(1, 255);
EEPROM.write(2, 255);
EEPROM.write(3, 255);
это 4 первых байта ключа №1. Забыл убрать пока отлаживал.

DS1990A

Добавлено: 25.03.2017{, 23:13}
Boroda
Вот новая версия.

Добавлено (25.03.2017, 23:13)
---------------------------------------------
Добавил версию только для чтения ключей.

DS1990A

Добавлено: 26.03.2017{, 09:57}
Anydy
Спасибо, все работает!
Добавил блок для загрузки в блоки пользователей в той же теме.

DS1990A

Добавлено: 26.03.2017{, 16:01}
zhulen820
Спасибо за блоки, это то, чего давно не хватало. А еще подскажите???
 Используется память EEPROM с 0 по 511 ячейку. Это значит что больше в проекте я не смогу использовать запись в EEPROM  каких-либо переменных? У меня так было с RFID считывателем, но я не смог правильно сформулировать вопрос и мне так и не ответили. Я так понимаю, если я в одном проекте буду использовать Ваш блок и одновременно блок записи переменной в EEPROM, значения будут затирать друг друга. Как бы так сделать чтобы номера ячеек EEPROM в которые производится запись не пересекались?

DS1990A

Добавлено: 26.03.2017{, 16:23}
Boroda
zhulen820 писал(а):Это значит что больше в проекте я не смогу использовать запись в EEPROM каких-либо переменных?
Ну типа того. Сейчас посмотрю, что там с памятью EEPROM у других Ардуин, может быть есть возможность перенести память с 512 по 1023 ячейки

Добавлено (26.03.2017, 16:23)
---------------------------------------------
У ATmega168 всего 512 байт EEPROM, можно оставить 31 ключ и использовать ячейки с 262 по 511. И у Вас в распоряжении 261 байт EEPROM. Делать?

DS1990A

Добавлено: 26.03.2017{, 16:33}
zhulen820
Ага делать? Проблема в том, что в штатном блоке записи  переменной в  EEPROM нет выбора ячейки куда писать. Куда автор сделал запись надо смотреть в коде, я я не соображаю там. Мне бы хватило и 10-ти ключей для всех проектов, но главное чтобы не было проблем с дальнейшей записью переменных. А то приходится задействовать еще одну ардуину. Внешнюю EEPROM пока не приобрел, чего-то не могу найти таких микросхем в китае

Добавлено (26.03.2017, 16:33)
---------------------------------------------
Ага, делать..... (вопросительный знак не нужен)