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

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

  1. kraus

    kraus Нерд

    По факту не знаю - скетч залил; Кнопку на 3 пин и на землю. И получается: загружаю тару, как вес становится равным - загорается светодиод 7 пина, на пине 8 гаснет. Снимаю тару с грузом - 7 пин гаснет, 8 светится.. как и раньше без флагов и прерывания... моторов пока нет.. проверить будут они крутиться или нет пока не могу. Буду почту ждать...гребаный али...второй месяц уже..
    Это я пока пытаюсь отработать схему, да и подучиться.. поколупаться... а что будет если...любопытно, но во многих библиотеках не пишут какая функция что делает и как правильно её писать..методом тыка..
     
  2. kraus

    kraus Нерд

    А на сайтах :
    Код (C++):
    void loop() {
        for (int i = 0; i < 10; i ++) {                             // усредняем показания, считав значения датчика 10 раз
        units = + scale.get_units(), 10;                          // суммируем показания 10 замеров
      }
    Так где же правильно?
    И за чем нужен цикл "for (int i = 0; i < 10; i ++)", если выражение "scale.get_units(10), 1" уже само по себе выдаёт среднее арифметическое из 10 показаний(ну или из стольки сколько в скобках будет)?
    Код (C++):
     Serial.println("Before setting up the scale:");

     
     
                            // by the SCALE parameter set with set_scale
     
     
    Последнее редактирование: 2 янв 2020
  3. DIYMan

    DIYMan Guest

    Чтобы понять, где правильно - надо знать основы языка. Вы этого - не хотите, вам не нужно. При этом - не верите, когда вам говорят, что это - неправильно.

    Можете пойти на те сайты, которые распространяют эту неправильную дичь - и посоветоваться там, раз не верите, что вам говорят здесь.

    По факту же: то, что написано "на сайтах" - неправильно.
     
    Daniil и DetSimen нравится это.
  4. DetSimen

    DetSimen Guest

    Daniil нравится это.
  5. Asper Daffy

    Asper Daffy Иксперд

    Как что? Троллить!
     
    DetSimen нравится это.
  6. DIYMan

    DIYMan Guest

    Автору поста: давайте представим, что у нас возвращаемое значение с весов - константа, например, значение 10. И нам надо получить среднее с 10 замеров. Ниже - два кода, один - неправильный, второй - правильный. Результаты можно проанализировать в мониторе порта. Итак:

    1. Неправильный:

    Код (C++):
    int get_units()
    {
        return 10; // как будто на весах 10 грамм всегда
    }

    void setup()
    {
        Serial.begin(9600);

        int average = 0;

        for(int i=0;i<10;i++)
        {
            average = + get_units(), 10;
            Serial.println(average);
        }

        Serial.println(average/10);
    }

    void loop()
    {
    }
    2. Правильный:

    Код (C++):
    int get_units()
    {
        return 10; // как будто на весах 10 грамм всегда
    }

    void setup()
    {
        Serial.begin(9600);

        int average = 0;

        for(int i=0;i<10;i++)
        {
            average += get_units();
            Serial.println(average);
        }

        Serial.println(average/10);
    }

    void loop()
    {
    }
    Сделайте над собой усилие - запустите оба скетча и дайте сюда выхлоп с монитора порта - а то вдруг мы все тут заблуждаемся, и "на сайтах" всё правильно, а мы тут дичь порем. Ась?
     
    Daniil, DetSimen и ИгорьК нравится это.
  7. kraus

    kraus Нерд

    Изучаю, изучаю...http://arduino.ru/Reference . но там многого нету.
    Хочу, нужно, но не всё сразу.
    Я тоже могу сказать что неправильно и не объяснить - тогда толку от того что сказал?
     
  8. kraus

    kraus Нерд

    Не хватает b707 на троих трепаться о том какие красавцы будете.:eek::)
     
  9. DIYMan

    DIYMan Guest

    Вам объяснили - учите основы С++. Вам этого не надо, потому что это - для вас сложно и ненужно, гораздо проще делать вид, что все вокруг - говно, а вы в белом.

    Если бы вы открыли учебник по языку С/С++ и прочитали первые несколько глав - то многие вопросы отпали бы сами собой. Но это же сложно, правда?

    Единственно правильное объяснение - вам было дано. Остальное - от лукавого, и вы так и будете тыкаться, как слепой кутёнок.
     
  10. kraus

    kraus Нерд

    Понятна разница.
     
  11. DIYMan

    DIYMan Guest

    То есть то, что есть разница - вы увидели по выхлопу в мониторе порта, так? А теперь ответьте мне на вопрос - почему такая разница, и почему вариант, который "на всех сайтах" - неправильный?
     
  12. kraus

    kraus Нерд

    Так учебник по С/С++ или по Ардуино? Читал по Ардуино учебник и не только начало.. А вот С/С++ слишком заморочен.. очень много всего.
    Этого я не знаю.. Знать все кто писал эти скетчи - чудотворцы...:)
     
  13. DIYMan

    DIYMan Guest

    Именно учебник по С/С++, в среде Arduino IDE идёт программирование именно на этих языках (детали опустим).

    Гуглите "Керниган и Ритчи", "Страуструп", первые ссылки.
     
    Daniil нравится это.
  14. kraus

    kraus Нерд

    Я читаю пока что: Петин В.А.; Блум Джереми ну и на сайтах...
     
  15. DIYMan

    DIYMan Guest

    Самые правильные книги - это Керниган и Ритчи, а таже Страуструп. Первая - по языку С, вторая - по языку С++. Читать попсовых полуграмотных авторов на "всех сайтах" - такое себе.

    Керниган и Ритчи: https://nsu.ru/xmlui/bitstream/handle/nsu/9058/kr.pdf
    Страуструп: http://www.8361.ru/6sem/books/Straustrup-Yazyk_programmirovaniya_c.pdf

    Читайте, они интересные.
     
    Daniil нравится это.
  16. DIYMan

    DIYMan Guest

    Не знаете именно потому, что у вас отсутствуют САМЫЕ БАЗИСНЫЕ знания. Чтобы ответить на мой вопрос - достаточно потратить день, прочитав про операторы и структуру языка. Но делать это надо, читая нормальную литературу, а не полуграмотных блогеров и прочую шушару.

    З.Ы. Например, Asper Daffy - даст фору десятку таких, как Джерему Блум, поверьте на слово. И стоит прислушиваться к тому, что вам говорят противные "гуру" - у вас прям неприятие проскакивает.

    Форум, кстати - это общение по интересам, не более того. И вам, естестенно, никто ничем не обязан. Но, как видите - пытаются помочь, несмотря на ваши отбрыкивания.
     
    DetSimen и Daniil нравится это.
  17. Daniil

    Daniil Гуру

    Голосую за кернигана и ритчи. Тонкая книжка, все основы есть, но только Си (без плюсов).
     
    DIYMan нравится это.
  18. kraus

    kraus Нерд

    Да, правда ваша, но и тыкать пальцами в нового человека что он даун - нехорошо.
     
  19. SergeiL

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

    А Вы уверены, что код новый?
    Попробуйте этот, после снятия тары - нажать кнопку, выложите вывод в монитор порта.
    Код (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.0
    #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 byte 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);
      Serial.println("Code 19:03");

    }
    void loop()
    {
       static byte prev_flag = 0;
       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(flag != prev_flag)
      {
        Serial.print("New flag =");
        Serial.println(flag);
        prev_flag=flag;
      }
      if ( (units * 10.0) >= X )
      {
        if (flag == 0)
        {
            digitalWrite(7, HIGH);//КОНЕЦ, СТАВИТСЯ НА ПАУЗУ.Прерывание. При нажатии кнопки начать сначала.
            digitalWrite(8, LOW);
            Serial.println("Pin 7 = HIGH");
            flag=1;
        }
      }
      else
      {
        if (flag == 0)
        {
            digitalWrite(7, LOW); //КОНЕЦ, СТАВИТСЯ НА ПАУЗУ.Прерывание. При нажатии кнопки начать сначала.
            digitalWrite(8, HIGH);
            Serial.println("Pin 7 = LOW");
        }
      }
    }
     
     
    Последнее редактирование: 18 дек 2019
  20. DIYMan

    DIYMan Guest

    Мне кажется - это ваше личное восприятие ситуации, не более того. Проблема в том, что любая попытка объяснить человеку, как пишется слово, если человек не знает азбуки - обречена провал, ибо начинать надо, как раз - с азбуки. В контексте обсуждаемого - это азбука как раз, которой вы не владеете, пока что.