поблема с ик датчиком YL-63 (FC-51)

Тема в разделе "Arduino & Shields", создана пользователем bender19993, 7 дек 2018.

  1. bender19993

    bender19993 Нерд

    Делаю оптический тахометр, вроде бы всё сделал подключил, но на дисплее жуткие помехи... попробовал отключить датчик, как только касаешься провод который отвечает за OUT показания скачут до 7К. При всём подключении лишь изредка проскакивают верные значения
    Код (C++):
    #include "LCD_1602_RUS.h"
    LCD_1602_RUS lcd(0x27,16,2);

    float r_speed, rev_time;
    volatile unsigned long lastflash, flash, lastshow;
    unsigned int RPM;
    String spaces = "       ";

    void setup() {
      Serial.begin(9600);                  // открыть порт
      attachInterrupt(1, sens, RISING);    // подключить прерывание на 2 пин при повышении сигнала
      pinMode(, OUTPUT);                  // 3 пин как выход
      digitalWrite(13, HIGH);               // подать 5 вольт на 3 пин
      lcd.init();                 // инициализация дисплея
      lcd.backlight();            // включить подсветку
      lcd.setCursor(0, 0);        // курсор слева 1 строчка
      lcd.print(L"Обороты ");    // слово Обороты
      lcd.setCursor(0, 1);        // курсор слева 2 строчка
      lcd.print(L"Скорость: ");   // слово Скорость
    }
    void sens() {
      flash = micros() - lastflash;   // вычислить время между двумя оборотами
      lastflash = micros();           // запомнить время последнего оборота
    }

    void loop() {
      if (micros() - lastflash > 1000000) { // если сигнала нет больше секунды
        RPM = 0;                            // считаем, что всё стоит и не крутится
        r_speed = 0;
      } else {
        rev_time = (float) flash / 1000000 * n;             // время одного оборота в секундах, с учётом числа лопастей
        RPM = (float) 60 / rev_time;                        // обороты в минуту
        r_speed = (float) 2 * 3.1415 * r / 100 / rev_time * 3.6;  // скорость точки на радиусе, км/ч
      }
      if (millis() - lastshow > 300) {  // кадждые 300 миллисекунд
        lcd.setCursor(9, 0);  // курсор 9 слева 1 строчка
        lcd.print(RPM);       // выводим RPM
        lcd.print(spaces);    // очищаем цифры с прошлого вывода
        lcd.setCursor(10, 1); // курсор 10 слева 2 строчка
        lcd.print(r_speed);   // выводим скорость
        lcd.print(spaces);    // очищаем цифры с прошлого вывода
        lastshow = millis();  // сброс таймера
      }
    }
     
  2. bender19993

    bender19993 Нерд

    пробовал разные ик датчики и ардуинки...(
     
  3. Никаких рук. И максимум 10 сантиметров провода.
     
    arkadyf и bender19993 нравится это.
  4. bender19993

    bender19993 Нерд

    не помогает
     
  5. bender19993

    bender19993 Нерд

    а нееее, помогло..))) Спасибо большое!