"BreweryArduino" контроллер для пивоварни

Тема в разделе "Глядите, что я сделал", создана пользователем fixedip, 10 янв 2017.

  1. fixedip

    fixedip Гик

    Если Вы внимательно смотрели код, то увидели бы, что эти коэффициенты изменяются на целое число 1 и после запятой ВСЕГДА ноль, но для расчетов в формуле берется как целы так дробные составляющие числа.
    Проблем со считывание из памяти этих коэффициентов и работы ПИ регулятора не было не у меня не у тех кто пользуется программой.
     
  2. fixedip

    fixedip Гик

    Вы вообще запускали код на "железе", что-бы говорить, что он опасен и не рабочий.....или так чисто теоретически?
     
  3. fixedip

    fixedip Гик

    И если Вы смотрели мои ролики, то бы видели, что я всегда проверяю код на "железе" и делаю тестовые прогоны работы программы....
     
  4. fixedip

    fixedip Гик

    кто, сказал, что он (float) там не нужен и не используется?
     
  5. ИгорьК

    ИгорьК Гуру

    Пауза, пожалуйста!
     
  6. fixedip

    fixedip Гик

    Правильно, при сохранении в память, а при расчете она изменятся и может быть отличная от нуля.
     
  7. b707

    b707 Гуру

    Вы такими ответами только доказываете мою правоту. Прежде чем отвечать. вы бы провели эксперимент. что же сохраняется в ЕЕПРОМ, если от флоата взять первый байт. Если вы думаете. что для чисел, где "после запятой ВСЕГДА ноль" - в ЕЕПРОМ сохраняется целая часть - то вы жестоко ошибаетесь. Напишите тестовую программку (если в силах, конечно) - и посмотрите.
    Более того, даже в самом формате флоат в принципе не существует чисел, с точно нулевой дробной частью...
    Все это говорит о уровне ваших знаний и косвенно - о уровне проектов. Судя по всему, вы так и не научились лучше программировать с 2017 года, когда писали код, выложенный в этой ветке, вероятно поэтому ваш новый код и закрыт.

    Так что я совсем не голословен,
    А проекты я ваши не запускал и видео не смотрел. Чтобы найти грубейшие ошибки в коде - это совершенно необязательно.
     
    DetSimen и parovoZZ нравится это.
  8. b707

    b707 Гуру

    fixedip - у меня нет желания вас топить. Я бы давно закончил, если б не ваши агрессивные попытки доказать. что все ошибки - фигня и все пользователи в восторге.
    В принципе, того, что я написал в сообщении #86 - достаточно.
     
  9. fixedip

    fixedip Гик

    У меня то же нет желания "разговаривать на повышенных тонах" и я не претендую на лавры всезнайки и прожженого программиста, я уменю признавать свои ошибки, но и напрасли на себя наводить не дам.
    Вот сохранил в ячейку памяти переменную типа флоат, результат тот, что мне был нужен.
     

    Вложения:

    • float.jpg
      float.jpg
      Размер файла:
      188,1 КБ
      Просмотров:
      603
    Последнее редактирование: 23 май 2019
  10. b707

    b707 Гуру

    О как интересно.
    А если строчки 15. 16 и 17 переписать как
    Код (C++):
    float f = EEPROM.read(1);
    Serial.print(" f = ");
    Serial.println(f);
    то есть читать данные из ЕЕПРОМ не в тут переменную, откуда писали?
     
  11. fixedip

    fixedip Гик

    Пожалуйста
     

    Вложения:

    • float1.jpg
      float1.jpg
      Размер файла:
      177,8 КБ
      Просмотров:
      470
    b707 нравится это.
  12. parovoZZ

    parovoZZ Гуру

    это просто совпадение, а не закономерность.
     
  13. parovoZZ

    parovoZZ Гуру

    А почему нет паузы между записью и чтением ячейки? Там на запись только 3 мс уходит + записать 2-х байтный регистр + вызвать функцию, запретить/разрешить прерывания.
     
  14. fixedip

    fixedip Гик

    Вывод в компорт в место задержек.
     
  15. parovoZZ

    parovoZZ Гуру

    Скинька лучше дамп еепрома. Файлом.
     
  16. b707

    b707 Гуру

    ОК, я еще раз попробую и отпишусь.
    Что-то в моих тестах при чтении младшего байта возвращался ноль, а старшего 63 - но никакх 100 не было. И, главное, не должно быть :)
    но если вы правы - я тоже умею признавать ошибки
     
  17. parovoZZ

    parovoZZ Гуру

    Это аппаратная задержка. Мы не имеем права обращаться к EEPROM, пока она занята. Я же на картинке вижу:
    .348 write
    .348 read
     
  18. b707

    b707 Гуру

    Вы были правы.
    Поставил несколько экспериментов с записью и считыванием в разном порядке - все время читается верно.
    Был немало удивлен - но потом подумал и понял, в чем моя ошибка.
    Я ошибно считал, что в таком коде
    Код (C++):
    float f = 100.0;
    EEPROM.write(1,f);
    в ЕЕПРОМ будет записан первый байт из 4х, из которых состоит тип float.
    Но так было бы, если б переменная передавалась по ссылке.
    тут же передача происходит по значению, так что 100.0 из float преобразцется в байт и получается целое 100, которое абсолютно без проблем сохраняется в одной ячейке ЕЕПРОМ. При обратном считывании преобразование происходит в обратном порядке.
    Эта схема будет работать, пока значение переменной f не превысит 255 - размер типа байт.

    Еще раз должен повторить, что оказался не прав.
    Мое знание языка меня подвело.
     
    alp69, fixedip и DetSimen нравится это.
  19. b707

    b707 Гуру

    fixedip - удалил часть своих комментариев про "опасность" вашего кода. Они были необоснованы.

    Но я надеюсь, вы не станете спорить, что трюк с записью флоат как байтов - это не сознательный прием с вашей стороны, а обычный программисткий ляп?
    Поэтому свои замечания о глюках в вашем коде удалять не стал
     
    alp69, fixedip и DetSimen нравится это.
  20. DetSimen

    DetSimen Guest

    аптамуш, у вас у всех Си нечесный. :) С его тихими преобразованиями данных