Замок с ключами-таблетками

Тема в разделе "Arduino & Shields", создана пользователем ЕвгенийБ, 21 сен 2020.

  1. Решил сделать электронный замок в гараж. Всю голову переломал, что не так? когда был один ключ-таблетка, всё работало как часы!!! Когда решил расширить способности, сделав четыре ключа, то первых три ключа считывают первый бит как 1, а у четвёртого ключа - всё как положено. на скриншоте один и тот-же ключ, записанный 4 раза. Кто ни будь знает в чём прикол?
     

    Вложения:

    • 000.txt.ino
      Размер файла:
      8 КБ
      Просмотров:
      47
    • 000.png
      000.png
      Размер файла:
      36,3 КБ
      Просмотров:
      43
  2. b707

    b707 Гуру

    кто-то плохо учился в школе. Если один ключ - это 8 байт. то 4 ключа сколько?
    А у вас массив под ключи длиной 31 байт

    мож и иеще ошибки есть, но это первое бросилось в глаза
     
    NikitOS нравится это.
  3. Здесь всё верно: 1 это 8, а 4х8=32 - от 0 до 31 включительно...
     
  4. asam

    asam Гик

    byte cluc1[31]; // Обозначаем массив для ключа

    Это массив из 31 элемента с номерами от 0 до 30.
     
  5. Ок! Почему тогда биты 0, 8, и 16, сохраняются как 1(еденица), а 24й - как положено? и почему когда изначально я было "byte cluch[8];" (изначально предполагался один ключ) сохранялось 8 бит ключа... это основной вопрос, ведь сохраняется полностью только ключ, с ячейками 31-24, а ключи с ячейками 23-16, 15-08, 07-00 при записи считываются с "1" в ячейках 16, 08, 00. А при считывании уже для сравнения, считываются полностью, хотя библиотека используется одна и таже...
     
    Последнее редактирование: 22 сен 2020
  6. Чет, хрень какая-то...
    сделал "byte cluc1[32];", и у меня у всех 4х ключей в начальных ячейках стали только единицы...
    Такое впечатление, что в таблетках передаётся только 7 байт, а не 8...
    Ну да и хрен с ними, не буду просто заморачиваться, оставлю так.
    Но всё-же интересно, куда девается последний байт, являющийся первым? и почему 1, а не 0?
    Или всё же их должно быть 7?
     
  7. b707

    b707 Гуру

    проверьте все ваши циклы for - не путаете ли вы еще где-нить индексы
    Вот, например, в строке 56 я вижу явную ошибку:
    Код (C++):
     for(int i=7; i<=0; i--)  
    сколько раз выполнится этот цикл, как вы думаете?

    Ну и в принципе, код написан откровенно плохо.
    Чтобы из кода для одного ключа сделать код на четыре - вы просто взяли и тупо (другого слова не подберу) скопировали все операторы 4 раза, вручную исправив индексы. Такой метод провоцирует ошибки, так программы не пишут. Изучайте массивы и процедуры

    Кстати. еще вопрос по логике работы. Зачем вам хранить в базе номера 4х ключей. если они все одинаковые?
     
  8. parovoZZ

    parovoZZ Гуру

    задача решается на раз через, мать их, указатели.
     
    b707 нравится это.
  9. b707

    b707 Гуру

    да много через что решается.
    Но ТС выбрал метод дублирования кода - имхо, один из худших вариантов

    главное - я не пойму, зачем хранить в памяти 4 кода? Обычно таблетки просто копируют и у всех один и тот же код...
     
  10. У меня много неперезаписываемых ключей, и ни одного RW, а мне надо чтоб подходили 4. Да и стереть я всегда смогу любой из них, если что...
    А вот по поводу кода, да, согласен, код безобразный, но это моё хобби, и я им редко занимаюсь, да и при компилировании ошибок и предупреждений нету, следовательно компилятор меня понимает. А ему всё равно, он по своему перепишет. Это его обязанность.
     
  11. parovoZZ

    parovoZZ Гуру

    код синтаксически написан без ошибок. Но компилятору до фонаря, что делает этот код. Поэтому если нет ошибок и предупреждений (а они ЕСТЬ, просто ВЫКЛЮЧЕНЫ!), это не значит, что код логически верен.
     
  12. b707

    b707 Гуру

    это поэтому у всех ключей в первом байте теперь единицы? :)
    То что код компилируется - еще совершенно не значит. что он будет работать правильно.
    Ошибку-то в строке 56 исправили?
     
  13. Да, исправил. Всё начало работать совсем по другому. Вместо единицы в конце, появилась восьмёрка в начале, я так думаю ей там место (правда почему-то во всех ключах, хотя они у меня собирались несколько лет...)и в конце концов я просто запутался в собственном коде. Удалил его и сижу пишу всё заново...