Бесконтактный тахометр на pro mini

Semiel
Offline
Зарегистрирован: 21.01.2018

Приветствую всех.

Решил собрать себе бесконтактный тахометр (обороты движков мерять) нашёл подходяший проект, закупился необходимыми модулями, подключил OLED SSD1306 0.96 дюима, залил прошивку но дисплей не засветился.

Думал сначала что дисплей с поднебесной бракованый прислали, начал шерстить просторы интернета, оказывается китайские клоны не всегда работают со стандартными библиотеками, начал подкидывать библиотеки в arduino ide и закачивать примеры из них в надежде что какой нибудь из них заработает, и о чудо на примерах из библиотеки iarduino_OLED_txt мой экранчик засветился.

теперь самое главное, как прицепить эту библиотеку к коду который имеенся, верней что в строках поменять?

Код

//    ТАХОМЕТР
//    Modelmen.ru

byte datchik = 2;

float last_time = 0;
int count = 0;
byte on = 0;


#include <OLED_I2C.h>                          // Подключаем библиотеку OLED_I2C
OLED  myOLED(SDA, SCL, 8);                     // Выбор порта, UNO это SDA 8 pin, SCL - 9 pin.
extern uint8_t SmallFont[];                    // Подключаем шрифт 
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

void setup(){
  pinMode(datchik, INPUT);
  Serial.begin(9600);
  myOLED.begin();                              // инициализация экрана
}


void loop(){

  if(digitalRead(datchik) == LOW)
  {
    if(on == 0)
    {
      count++;
    }
    on = 1;    
  }
  else{
    on = 0;
  }

  if(millis() - last_time > 1000) // обновлять раз в секунду
  {    
    count = count * 60; // обороты за минуту
    Serial.println(count);  

    myOLED.clrScr(); // очистить экран
    myOLED.setFont(SmallFont);
    myOLED.print("RPM", CENTER, 10); // вывожу текст в центре, строка 10
    myOLED.setFont(BigNumbers);
    myOLED.print(String(count), CENTER, 30); // вывожу текст в центре, строка 30
    myOLED.update();
    
    delay(50);
    last_time = millis(); // сброс
    count = 0;
  }
}

Пример из библиотеки

//  Раскомментируйте для программной реализации шины I2C:    //
//  #define pin_SW_SDA 3                                     // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C.
//  #define pin_SW_SCL 9                                     // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C.
//  Раскомментируйте для совместимости с большинством плат:  //
//  #include <Wire.h>                                        // Библиотека iarduino_OLED_txt будет использовать методы и функции библиотеки Wire.
//  Ссылки для ознакомления:                                 //
//  Подробная информация о подключении модуля к шине I2C:    // http://wiki.iarduino.ru/page/i2c_connection/
//  Подробная информация о функциях и методах библиотеки:    // http://wiki.iarduino.ru/page/OLED_trema/
//  Библиотека  iarduino_OLED_txt (текстовая) экономит ОЗУ:  // http://iarduino.ru/file/341.html
//  Бибилиотека iarduino_OLED     (графическая):             // http://iarduino.ru/file/340.html
                                                             // 
#include <iarduino_OLED_txt.h>                               // Подключаем библиотеку iarduino_OLED_txt.
iarduino_OLED_txt myOLED(0x3C);                              // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                             //
extern uint8_t MediumFontRus[];                              // Подключаем шрифт MediumFontRus.
                                                             // Если Вы не используете Кириллицу, то лучше подключить шрифт MediumFont, он займет меньше места в памяти программ.
void setup(){                                                //
    myOLED.begin();                                          // Инициируем работу с дисплеем.
    myOLED.setFont(MediumFontRus);                           // Указываем шрифт который требуется использовать для вывода цифр и текста.
}                                                            //
                                                             //
void loop(){                                                 //
    myOLED.clrScr();                                         // Чистим экран.
    myOLED.print(F("iArduino"), 15,     4);                  // Выводим текст начиная с 15 столбца 4 строки (высота шрифта 2 строки, он займёт строки 3 и 4).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("ABC"),      0,      1);                  // Выводим текст начиная с  0 столбца 1 строки (высота шрифта 2 строки, он займёт строки 0 и 1).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("XYZ"),      92,     7);                  // Выводим текст начиная с 92 столбца 7 строки (высота шрифта 2 строки, он займёт строки 6 и 7).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("abc"),      92,     1);                  // Выводим текст начиная с 92 столбца 1 строки (высота шрифта 2 строки, он займёт строки 0 и 1).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("xyz"),      0,      7);                  // Выводим текст начиная с  0 столбца 7 строки (высота шрифта 2 строки, он займёт строки 6 и 7).
    delay (5000);                                            // Ждём 5 секунд.
                                                             //
    myOLED.clrScr();                                         // Чистим экран.
    myOLED.print(F("iАрдуино"), OLED_C, 4);                  // Выводим по центру       4 строки (высота шрифта 2 строки, он займёт строки 3 и 4).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("АБВ"),      OLED_L, 1);                  // Выводим по левому  краю 1 строки (высота шрифта 2 строки, он займёт строки 0 и 1).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("ЭЮЯ"),      OLED_R, 7);                  // Выводим по правому краю 7 строки (высота шрифта 2 строки, он займёт строки 6 и 7).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("абв"),      OLED_R, 1);                  // Выводим по правому краю 1 строки (высота шрифта 2 строки, он займёт строки 0 и 1).
    delay (500);                                             // Ждём пол секунды.
    myOLED.print(F("эюя"),      OLED_L, 7);                  // Выводим по левому  краю 7 строки (высота шрифта 2 строки, он займёт строки 6 и 7).
    delay (5000);                                            // Ждём 5 секунд.
                                                             //
    myOLED.clrScr();                                         // Чистим экран.
    myOLED.print( 77, 0, 2 );                                // Выводим число 77 начиная с 0 столбца 2 строки.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( "+" );                                     // Выводим текст в той же строке сразу после предыдущего числа.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( 77 );                                      // Выводим число 77 в той же строке сразу после предыдущего текста.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( "=" );                                     // Выводим текст в той же строке сразу после предыдущего числа.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( 77+77 );                                   // Выводим результат сложения чисел 77+77, в той же строке сразу после предыдущего текста.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( 77, 0, 6, HEX );                           // Выводим число 77 начиная с 0 столбца 6 строки, вывод осуществляется в 16-ричной системе.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( "+" );                                     // Выводим текст в той же строке сразу после предыдущего числа.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( 77, OLED_N, OLED_N, HEX );                 // Выводим число 77 в той же строке сразу после предыдущего текста, вывод осуществляется в 16-ричной системе.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( "=" );                                     // Выводим текст в той же строке сразу после предыдущего числа.
    delay (500);                                             // Ждём пол секунды.
    myOLED.print( 77+77, OLED_N, OLED_N, HEX );              // Выводим результат сложения чисел 77+77, в той же строке сразу после предыдущего текста, вывод осуществляется в 16-ричной системе.
    delay (5000);                                            // Ждём 5 секунд.
                                                             //
    myOLED.clrScr();                                         // Чистим экран.
    myOLED.print(F("{}[]()<>?!" ), OLED_C, 1);               // Выводим текст по центру 1 строки (высота шрифта 2 строки, он займёт строки 0 и 1).
    myOLED.print(F("#$%&*~`'\"^"), OLED_C, 4);               // Выводим текст по центру 4 строки (высота шрифта 2 строки, он займёт строки 3 и 4).
    myOLED.print(F("_-+=,.:;|/" ), OLED_C, 7);               // Выводим текст по центру 7 строки (высота шрифта 2 строки, он займёт строки 6 и 7).
    delay (5000);                                            // Ждём 5 секунд.
}                                                            //

 

Semiel
Offline
Зарегистрирован: 21.01.2018

В коде прописана другая библиотека соотвецтвенно дисплей не работает.

Но я уже решил вопрос методом проб

вот так работает

//    ТАХОМЕТР
//    Modelmen.ru

#define pin_SW_SDA 3
#define pin_SW_SCL 9 
byte datchik = 2;

float last_time = 0;
int count = 0;
byte on = 0;


#include <iarduino_OLED.h>                         // Подключаем библиотеку iarduino OLED
iarduino_OLED  myOLED(0x3C);                    
extern uint8_t SmallFont[];                    // Подключаем шрифт 
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

void setup(){
  pinMode(datchik, INPUT);
  Serial.begin(9600);
  myOLED.begin();                              // инициализация экрана
}


void loop(){

  if(digitalRead(datchik) == LOW)
  {
    if(on == 0)
    {
      count++;
    }
    on = 1;    
  }
  else{
    on = 0;
  }

  if(millis() - last_time > 1000) // обновлять раз в секунду
  {    
    count = count * 60; // обороты за минуту
    Serial.println(count);  

    myOLED.clrScr(); // очистить экран
    myOLED.setFont(SmallFont);
    myOLED.print("RPM", 5, 10); // вывожу текст в центре, строка 10
    myOLED.setFont(BigNumbers);
    myOLED.print(String(count), 60, 50); // вывожу текст числа оборотов в центре, строка 50
    myOLED.update();
    
    delay(50);
    last_time = millis(); // сброс
    count = 0;
  }
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Где тут про БЕСКОНТАКТНОСТЬ ???

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Komandir пишет:

Где тут про БЕСКОНТАКТНОСТЬ ???

Ничего ты не понимаешь.
Библиотека для микропроцессора, который чип. Чип из кремния, кремний полезное ископаемое, находится в недрах планеты. ПАМАГИТЕ решить проблему планетарного масштаба.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вы не понимаете. Участились случаи передачи вируса от одного двигателя к другому через человека. Местами это приводит к масштабам локальных эпидемий. Так что безконтактные методы диагностики двигателей в последнее время получили широкое распространение. Если Вы хотите что бы ваш двигатель был здоров не подпускайте к диагностике и ремонту вашего двигателя постороннего человека, если он не одет в одноразовые перчатки и маску.