Пауза в скетче.

Тема в разделе "Arduino & Shields", создана пользователем kraus, 16 дек 2019.

  1. SergeiL

    SergeiL Оракул Модератор

    Ну и у Вас неправильно и в источнике Вашем тоже неправильно.

    Во первых. в варнингах должно было быть предупреждение, о том, что значение после запятой в:
    Код (C++):
        units = + scale.get_units(), 20;  
    не дает эффекта.

    Во вторых. Вы все равно берете только последние значение.
    Все остальные вы получаете, ну и перезаписываете последним. Поэтому, что 3 что 20 разницы нет.

    Это потому, что у Вас, что у горе автора примера, стоит "=+" а для суммирования нужно "+="
    Ну и результат потом не делите на количество раз суммирования.
    У автора там есть деление, но результат никуда не записывается. Все равно, что нет.

    Должно быть так:
    Код (C++):
     for (int i = 0; i < 3; i ++)          // усредняем показания, считав значения датчика 3 раза
      {
         units += scale.get_units();      // суммируем показания 3 замера
      }
      units/=3.0;
    Ну и куда Вы дальше? Может поучите язык, прежде чем писать книги из незнакомых слов?
     
    Последнее редактирование: 18 дек 2019
    Daniil и DIYMan нравится это.
  2. Asper Daffy

    Asper Daffy Иксперд

    А delayMicroseconds, так та просто нормально работает. Только нафига в обработчике прерывания-то? :)
     
    DetSimen нравится это.
  3. Asper Daffy

    Asper Daffy Иксперд

    Добрый совет - в программировании (как насчёт "в жизни" сами решайте, я только про программирование) не стоит слепо верить никаким источникам. Верить можно только в Бога, все остальное нужно осмысливать и проверять самому.
     
    Daniil, ИгорьК и DIYMan нравится это.
  4. a1000

    a1000 Гуру

  5. SergeiL

    SergeiL Оракул Модератор

    Ну вот этот скетч и выложите, раз работает.
    А зуммер надо на время включать, а не на постоянку.
     
  6. kraus

    kraus Нерд

    Его надо наизусть знать? Или все-таки уметь применять? Но насколько я понимаю - применять надо на практике. Вот я и пытаюсь. А описания функций библиотеки для НХ711 я не нашёл.
    Код (C++):
    // HX711 к Arduino pin 4->CLK  5->DAT 5V->VCC GND->GND
    //дИСПЛЕЙ 1602 и oled  VCC — 5V  GND — GND  SDA — A4  SCL — A5
    // The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.

      }
    }
     
    Последнее редактирование: 2 янв 2020
  7. kraus

    kraus Нерд

    Как не даёт эффекта? Это значение регулирует разрядность после запятой (правда почему-то не во всех скетчах. В одних ничего не меняется, в других разрядность показаний после запятой меняет)..Не нашёл описания этих функций..
    Вот как программно остановить ....а потом запустить кнопкой на новый круг...
    Ну, остановить можно попробовать и наличием или отсутствием напряжения на цифровом выходе. а вот как потом запустить кнопкой..
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Да! Не весь, конечно, но основы знать надо.

    a1000,
    ну, в Бога-то можно. В каком-то американском фильме на кассе салуна висела табличка: "In God we trust. Anyone else pay cash". Всегда вспоминаю.
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Компилятор говорит, что не даёт и, по такому поводу, просто выбрасывает его :)
    Вы бредите.
     
    DIYMan и DetSimen нравится это.
  10. kraus

    kraus Нерд

    Конечно брежу...:eek:
    Только вот здесь почему-то он меняет количество цифр после запятой.
    Код (C++):
    #include "HX711.h"

    #define LOADCELL_DOUT_PIN  5
    #define LOADCELL_SCK_PIN  4

    }
     
    Последнее редактирование: 2 янв 2020
  11. SergeiL

    SergeiL Оракул Модератор

    Ну попробуйте так, собрал из двух, по Вашим словам, рабочих примеров.
    Я не компилировал, мог где-то ошибиться.
    И еще, я так и не понял, что у Вас на 7 и 8 пине, но 8-ой Вы в HIGH сбрасываете по else, а 7-ой в LOW нет.
    На всякий случай добавил, если не нужно - уберите.
    Или перенесите за if , чтобы звук отключался при снятии тары с весов, до нажатия кнопки.


    Код (C++):
    // HX711 к Arduino pin 4->CLK  5->DAT 5V->VCC GND->GND
    //дИСПЛЕЙ 1602 и oled  VCC — 5V  GND — GND  SDA — A4  SCL — A5
    // The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.

    #include <LiquidCrystal_I2C.h>
    #include "HX711.h"

    #define calibration_factor -7400.0sketch
    #define LOADCELL_DOUT_PIN  5
    #define LOADCELL_SCK_PIN  4

    HX711 scale;
    LiquidCrystal_I2C lcd(0x27, 16, 2);

    int X = 21;
    float units;
    const byte ledPin = 7;
    const byte ledPin3 = 3;
    volatile boolean flag = 1;

    void Button_press()
    {
      flag = 0;
    }
    void setup()
    {
      lcd.init();                      // Инициализация дисплея
      lcd.backlight();                 // Подключение подсветки
      lcd.setCursor(0, 0);             // Установка курсора в начало первой строки
      Serial.begin(9600);

      scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
      scale.set_scale();
      scale.tare();
      scale.set_scale(calibration_factor);/
      attachInterrupt(1, Button_press, FALLING);
    }
    void loop()
    {
       for (int i = 0; i < 5; i ++)          // усредняем показания, считав значения датчика 3 раза
      {
        units += scale.get_units();      // суммируем показания 3 замера
      }
      units /= 5.0;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(units);

      if ( (units * 10.0) >= X )
      {
        if (flag == 0)
        {
            digitalWrite(7, HIGH);//КОНЕЦ, СТАВИТСЯ НА ПАУЗУ.Прерывание. При нажатии кнопки начать сначала.
            digitalWrite(8, LOW);
            flag=1;
        }
      }
      else
      {
        if (flag == 0)
        {
            digitalWrite(7, LOW); //КОНЕЦ, СТАВИТСЯ НА ПАУЗУ.Прерывание. При нажатии кнопки начать сначала.
            digitalWrite(8, HIGH);
        }
      }
    }
     
  12. SergeiL

    SergeiL Оракул Модератор

    И добавьте в setup() отключение моторов, зуммеров и ламп.
    Чтобы все было проинициализированно, и не дергалось до нажатия кнопки.
     
  13. Asper Daffy

    Asper Daffy Иксперд

    Хорошо, что хоть осознаёшь.
    А это новый приступ бреда, т.к. "вот здесь" ничего похожего на

    Код (C++):
    units =+ scale.get_units(), 20;
    нету :(
     
  14. DetSimen

    DetSimen Guest

    А говорили тебе, на arduino.ru, "Надо учиться!". Не внял. Так и тыкаешься в код, как слепой кутенок.
     
    DIYMan нравится это.
  15. kraus

    kraus Нерд

    Код (C++):


    int X = 21;
    float units;
    const byte ledPin = 7;
    volatile boolean flag = 1;

    void Button_press()
    {
      flag = 0;
    }
    void setup()
    {
     
      attachInterrupt(1, Button_press, FALLING);
     
    Спасибо. А кнопку на какой пин вешать?
     
  16. SergeiL

    SergeiL Оракул Модератор

    На тот, на котором она мигающие светодиоды из страшного примера включала
     
  17. DIYMan

    DIYMan Guest

    Мне кажется - тут клиника. Потому что вместо того, чтобы внять - в ответ "доказательства" вида "сам дурак", и опытные дядьки в изумлении чешут репу - что с этим пациентом делать :)
     
  18. Asper Daffy

    Asper Daffy Иксперд

    На самый длинный, чтобы об пол не билась.
     
  19. kraus

    kraus Нерд

    Спасибо, SergeiL.
    Из всех только один SergeiL что-то пытался сделать.. остальные- гуру.

    Теперь я тоже знаю как гуру быть: на любой вопрос буду отвечать:
    и ещё всякую хрень нести.

    А я и есть кутёнок, только начал колупать эту хрень, которая нужна для 2-3проектов, но её надо всю выучить сначала лет за пару-тройку, а может и больше лет..тогда гуру соблаговолят что-нибудь умное подсказать... что ж за мания величия?
     
  20. SergeiL

    SergeiL Оракул Модератор

    А по делу что? Работает или нет?