Помощь в написании кода на arduino

Тема в разделе "Закажу проект", создана пользователем Andrey2018, 9 янв 2018.

  1. Andrey2018

    Andrey2018 Нуб

    проект.png Доброго времени уважаемые друзья есть очень интересный проект в котором нужна помощь (не бесплатная конечно), часть кода написана, нужно его доработать и дополнить.
    Пример того что должно получиться прикреплю на картинке.
     

    Вложения:

    • image.jpg
      image.jpg
      Размер файла:
      841,5 КБ
      Просмотров:
      380
    Последнее редактирование: 9 янв 2018
  2. BAR__MEN

    BAR__MEN Гуру

    Пишите в личку
     
  3. ostrov

    ostrov Гуру

    Или мне, если что.
     
  4. Andrey2018

    Andrey2018 Нуб

    Всем отправил ТЗ
     
  5. Onkel

    Onkel Гуру

    Присылайте тех.задание ydom@mail.ru сделаем.
     
  6. koteika

    koteika Гик

  7. Developer-RU

    Developer-RU Гик

    в личку
     
  8. Andrey2018

    Andrey2018 Нуб

    помогите разобраться, не выводит данные с датчика в реальном времени, а при переключении показывает конечную информацию
    Код (C++):
    //Подключите красный провод к +5V,
    //Черный провод на массу
    //Желтый провод датчика к контакту #2

    #include <LiquidCrystal_I2C.h>
    #include "TM1637.h"
    LiquidCrystal_I2C lcd(0x3F,16,2); // пины под LCD shield

    #define FLOWSENSORPIN 2 // пин для датчика расхода
    #define BUTTON_PIN  5 // пин Arduino подключенный к кнопке
    #define CLK 9
    #define DIO 8
    TM1637 tm1637(CLK,DIO);

    int clicks = 0; // текущее кол-во нажатий
    boolean ready = false;
    boolean buttonWasUp = true;
    volatile uint16_t pulses = 0; // считает сколько импульсов
    volatile uint8_t lastflowpinstate; // отслеживает состояние пина FLOWSENSORPIN
    volatile uint32_t lastflowratetimer = 0; // отсчитывает время между импульсами
    volatile float flowrate; // и использует это, чтобы вычислить скорость потока
    SIGNAL(TIMER0_COMPA_vect) {
    uint8_t x = digitalRead(FLOWSENSORPIN);
     
      if (x == lastflowpinstate) {
        lastflowratetimer++;
        return; // nothing changed!
      }
     
      if (x == HIGH) {
        //low to high transition!
        pulses++;
      }
      lastflowpinstate = x;
      flowrate = 1000.0;
      flowrate /= lastflowratetimer;  // в герцах
      lastflowratetimer = 0;
    }

    void useInterrupt(boolean v) {
      if (v) {
        // Timer0 уже используется для millis() - просто прерываем
        // в середине и вызываю "Compare A" функция выше
        OCR0A = 0xAF;
        TIMSK0 |= _BV(OCIE0A);
      } else {
        // не вызывать функцию прерывания больше
        TIMSK0 &= ~_BV(OCIE0A);
      }
    }
    int flag=0;







    void setup() {

    {
      // инициализация дисплея
      tm1637.init();
      tm1637.set(7);
     
     
    }

     
      lcd.init();
        lcd.begin(16, 2);
          pinMode(BUTTON_PIN, INPUT_PULLUP);
              // начальное сообщение
            lcd.setCursor(0, 0);
        lcd.print("TEST CONTROLLERS");
        lcd.setCursor(0, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(1, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(2, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(3, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(4, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(5, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(6, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(7, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(8, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(9, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(10, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(11, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(12, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(13, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(14, 1);
    lcd.print("-");
    delay(100);
    lcd.setCursor(15, 1);
    lcd.print("-");
         delay(1500);
        lcd.clear();
         lcd.setCursor(1, 0);
         lcd.print("Bettary 100 %");
        delay(3000); // Время на прочтение начального сообщения 5сек
       
         

       pinMode(FLOWSENSORPIN, INPUT);
       digitalWrite(FLOWSENSORPIN, HIGH);
       lastflowpinstate = digitalRead(FLOWSENSORPIN);
       useInterrupt(true);
       }


     


    void loop()                    
    {
      if(digitalRead(3)==HIGH&&flag==0)//если кнопка нажата  
         // и перемення flag равна 0 , то ...
         {
             
                    flag=1;
            //это нужно для того что бы с каждым нажатием кнопки
            //происходило только одно действие
            // плюс защита от "дребезга"  100%
           
         }
           
          if(digitalRead(3)==LOW&&flag==1)//если кнопка НЕ нажата
         //и переменная flag равна - 1 ,то ...
         {
             digitalWrite(4,!digitalRead(4));
            flag=0;//обнуляем переменную flag
         }
       

       
          // счетчик нажатий, до 5 раз, потом снова по кругу, каждый раз значение нажатия записывается в переменную
        boolean buttonRead = digitalRead(BUTTON_PIN);
        if (buttonWasUp && !buttonRead)
        {
            delay(10);
            if (!digitalRead(BUTTON_PIN))
            {
                clicks = (clicks + 1) % 13;
                ready = true;  // флаг, что надо обновить экран
            }
        }
        if(ready)
            {
            lcd.clear(); // очистим экран
            ready = false;  //сбрасываем флаг
            switch(clicks)
            {
              case 1:
              lcd.backlight();
              lcd.setCursor(1, 0);
              lcd.print("Bettary 100 %");
              lcd.setCursor(1, 1);
              lcd.print("DATA CLOCK");
              tone (11, 2200, 1400); // включаем на пьезодинамик 600 Гц
              delay(2000); // ждем 1 секунду
              tone(11, 2200, 1400);
              delay(500);
              break;

              case 2:
              {
                lcd.backlight();
                Serial.begin(9600);
              lcd.setCursor(4, 0);
              lcd.print("RASHOD");
                  lcd.setCursor(0, 1);
                  lcd.print("+");  
                  float liters = pulses;
                  liters /= 7.5;
                  liters /= 60.0;
                 Serial.print(liters);
                 Serial.println(" Liters");
                  lcd.setCursor(1, 1);
                  lcd.print(liters);
                  lcd.print(" litrov");
                  tm1637.display(flowrate);
                        delay(3000);}
              break;
             

    case 3:
              {lcd.backlight();
              float liters = pulses;
                  liters /= 7.5;
                  liters /= 60.0;
              lcd.setCursor(3, 0);
              lcd.print(pulses, DEC);
              lcd.setCursor(7, 0);
              lcd.print(" m1");
              tm1637.display(liters);
                        delay(3000);}
              break;

            }
    }
      buttonWasUp = buttonRead;
    }