DS1990A
-
- Рядовой
- Сообщения: 16
- Зарегистрирован: 22 мар 2017, 09:01
DS1990A
очень интересно, вместо кнопочки для добавления ключей мастер ключ? у меня опыта программирования совсем нету, вот по понемножку осваиваю flprog, вот из проекта sser взял блок считывания ключа и блоки сравнения, вбил железно свой ключ (думаю что можно так же железно ещё ключей добавить) обвязал элементами и получилась сигнализацияAnydy писал(а):Если интересно, то могу состряпать блок пользователя из проекта (кодил не я)....
DS1990A
Anydy, молодец только пара вопросов.
не лучше было бы сделать вход для считывателя и выходы для замка и светика чтобы программа могла эти пины зарезервировать за блоком. И "delay(5000);" предпоследняя строчка остановит выполнение программы на пять секунд, может просто импульс на выходе.
не лучше было бы сделать вход для считывателя и выходы для замка и светика чтобы программа могла эти пины зарезервировать за блоком. И "delay(5000);" предпоследняя строчка остановит выполнение программы на пять секунд, может просто импульс на выходе.
DS1990A
а исходники дадите?
DS1990A
Anydy, оки спс.
DS1990A
Пол дня провозился, как только добавляю вход или выход - все скетч перестает работать. Видимо ФЛпрог не умеет корректно создавать скетчи из блоков пользователя.
Может конечно я тупой....если есть программисты - покажите как сделать входы и выходы (исходник по ссылке есть)
По мне проще и быстрее написать код чем тыкать эти кнопки в программе, которая через раз то закроется то IDE не открывается....сорри просто задолбался ...
Так работает:
byte saveKey = 3; // вход для кнопки обнуления
А так нет:
bool saveKey = 3; // вход для кнопки обнуления
Почему если в параметрах пользователя задать параметр, то все нормально, а если сделать вход для блока то нифига не работает?
Может конечно я тупой....если есть программисты - покажите как сделать входы и выходы (исходник по ссылке есть)
По мне проще и быстрее написать код чем тыкать эти кнопки в программе, которая через раз то закроется то IDE не открывается....сорри просто задолбался ...
Так работает:
byte saveKey = 3; // вход для кнопки обнуления
А так нет:
bool saveKey = 3; // вход для кнопки обнуления
Почему если в параметрах пользователя задать параметр, то все нормально, а если сделать вход для блока то нифига не работает?
Последний раз редактировалось Anydy 25 мар 2017, 14:50, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
DS1990A
Ну смотря какой параметр. Если In, doorPin, statusLed, saveKey, то не будет работать, потому как pinMode выполняется только в секции Setup, а OneWire ds(In) в Declare. А если Time вытащите, то должно заработать.Anydy писал(а):Почему если в параметрах пользователя задать параметр, то все нормально, а если сделать вход для блока то нифига не работает?
Последний раз редактировалось Boroda 25 мар 2017, 15:21, всего редактировалось 1 раз.
DS1990A
Как раз Time и не надо вытаскивать, его вообще убрать надо...Boroda писал(а):А если Time вытащите, то должно заработать.
Надо именно все остальные параметры вытащить на вход/выходы.
Почему в скетче применен тип Byte а не Bool для входа/выхода? Есть мысли?
Делаю вход saveKey(bool), соответственно в Loop меняю на:
if (saveKey) save(); // если нажали кнопку
// сканируем шину, если нет устройств выходим из loop
Срабатывает, но перекидывает в функцию (error)....с какого перепуга?))
В функции Setup:
// если при включении нажата кнопка, сбрасываем ключи на 0
if (saveKey) EEPROM.write(511, 0);
Это вообще не срабатывает....
Подскажите что я делаю не так?
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
DS1990A
Доработал Ваш блок. Светодиод статуса не удалось выкинуть наружу.
Добавлено (25.03.2017, 18:37)
---------------------------------------------
Теперь блок не зависает программу в error(), нет delay(), ожидание ключей при программировании 20 секунд, потом выход в обычный режим.
Добавлено (25.03.2017, 18:37)
---------------------------------------------
Стирание можно производить в любое время.
Добавлено (25.03.2017, 18:39)
---------------------------------------------
Добавлено (25.03.2017, 18:50)
---------------------------------------------
Добавлено (25.03.2017, 18:55)
---------------------------------------------
Вообще исходный скетч, из которого Вы делали блок, написан ужасно. Зависания, задержки... черти что.
Добавлено (25.03.2017, 18:37)
---------------------------------------------
Теперь блок не зависает программу в error(), нет delay(), ожидание ключей при программировании 20 секунд, потом выход в обычный режим.
Добавлено (25.03.2017, 18:37)
---------------------------------------------
Стирание можно производить в любое время.
Добавлено (25.03.2017, 18:39)
---------------------------------------------
Это не работает потому как это Setup и до цикла Loop(), где читается внешняя кнопка, мы еще не дошли.Anydy писал(а):if (saveKey) EEPROM.write(511, 0);
Добавлено (25.03.2017, 18:50)
---------------------------------------------
потому как это номер пина в командах pinMode(), digitalWrite(), digitalRead().Anydy писал(а):Почему в скетче применен тип Byte а не Bool для входа/выхода? Есть мысли?
Добавлено (25.03.2017, 18:55)
---------------------------------------------
выход из loop() происходит командой return, куда она приведет - не знаю.Anydy писал(а):Срабатывает, но перекидывает в функцию (error)....с какого перепуга?))
Вообще исходный скетч, из которого Вы делали блок, написан ужасно. Зависания, задержки... черти что.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Boroda 25 мар 2017, 18:44, всего редактировалось 1 раз.
DS1990A
Вот молодец!
Пара вопросов:
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. Еще бы вывести считанный код с ключа!
Пара вопросов:
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. Еще бы вывести считанный код с ключа!
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
DS1990A
Запись начинается при отпускании кнопки. Память стирается при удержании кнопки более 2 секунд и при отпускании начинается запись (это применительно к той плате, что я скинул).
достаточно затереть количество ключей EEPROM.write(511, 0), при новой записи ключей эти данные заменятся.Anydy писал(а):память не очищается
это 4 первых байта ключа №1. Забыл убрать пока отлаживал.Anydy писал(а):EEPROM.write(0, 255);EEPROM.write(1, 255);
EEPROM.write(2, 255);
EEPROM.write(3, 255);
DS1990A
Спасибо, все работает!
Добавил блок для загрузки в блоки пользователей в той же теме.
Добавил блок для загрузки в блоки пользователей в той же теме.
-
- Сержант
- Сообщения: 194
- Зарегистрирован: 29 авг 2016, 22:44
- Откуда: Серпухов
- Имя: Александр
DS1990A
Спасибо за блоки, это то, чего давно не хватало. А еще подскажите???
Используется память EEPROM с 0 по 511 ячейку. Это значит что больше в проекте я не смогу использовать запись в EEPROM каких-либо переменных? У меня так было с RFID считывателем, но я не смог правильно сформулировать вопрос и мне так и не ответили. Я так понимаю, если я в одном проекте буду использовать Ваш блок и одновременно блок записи переменной в EEPROM, значения будут затирать друг друга. Как бы так сделать чтобы номера ячеек EEPROM в которые производится запись не пересекались?
Используется память EEPROM с 0 по 511 ячейку. Это значит что больше в проекте я не смогу использовать запись в EEPROM каких-либо переменных? У меня так было с RFID считывателем, но я не смог правильно сформулировать вопрос и мне так и не ответили. Я так понимаю, если я в одном проекте буду использовать Ваш блок и одновременно блок записи переменной в EEPROM, значения будут затирать друг друга. Как бы так сделать чтобы номера ячеек EEPROM в которые производится запись не пересекались?
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
DS1990A
Ну типа того. Сейчас посмотрю, что там с памятью EEPROM у других Ардуин, может быть есть возможность перенести память с 512 по 1023 ячейкиzhulen820 писал(а):Это значит что больше в проекте я не смогу использовать запись в EEPROM каких-либо переменных?
Добавлено (26.03.2017, 16:23)
---------------------------------------------
У ATmega168 всего 512 байт EEPROM, можно оставить 31 ключ и использовать ячейки с 262 по 511. И у Вас в распоряжении 261 байт EEPROM. Делать?
Последний раз редактировалось Boroda 26 мар 2017, 16:33, всего редактировалось 1 раз.
-
- Сержант
- Сообщения: 194
- Зарегистрирован: 29 авг 2016, 22:44
- Откуда: Серпухов
- Имя: Александр
DS1990A
Ага делать? Проблема в том, что в штатном блоке записи переменной в EEPROM нет выбора ячейки куда писать. Куда автор сделал запись надо смотреть в коде, я я не соображаю там. Мне бы хватило и 10-ти ключей для всех проектов, но главное чтобы не было проблем с дальнейшей записью переменных. А то приходится задействовать еще одну ардуину. Внешнюю EEPROM пока не приобрел, чего-то не могу найти таких микросхем в китае
Добавлено (26.03.2017, 16:33)
---------------------------------------------
Ага, делать..... (вопросительный знак не нужен)
Добавлено (26.03.2017, 16:33)
---------------------------------------------
Ага, делать..... (вопросительный знак не нужен)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость