Счетчик прерывания света на фоторезисторе

markelovdn
Offline
Зарегистрирован: 09.02.2016

Нужна помощь!

Хочется сделать вот это https://www.youtube.com/watch?v=N7yFwZviiGE

Но не могу понять как.

То что в коментариях к видео разобрать тоже не получается.

Экран такойже как на видео, лазер и фоторезистор тоже есть пока получилось сделать только так:

#include <OLED_I2C.h>                               // Подключаем библиотеку OLED_I2C для работы со шрифтами и графикой
OLED  myOLED(A4, A5, A4);                           // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];
int ldr = 0;
 
void setup()
{
  myOLED.begin();
}
void loop(){
  if (analogRead(ldr) < 1000){
  myOLED.clrScr();                                    // Стираем все с экрана
  myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
  myOLED.print("ntvyj", CENTER, 0);           // Выводим надпись "Русский язык"
  myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт
  myOLED.update();                                    // Обновляем информацию на дисплее
                                          // Пауза 3 секунды
}
else
{
  myOLED.clrScr();                                    // Стираем все с экрана
  myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
  myOLED.print("cdtnkj", CENTER, 0);           // Выводим надпись "Русский язык"
  myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт
  myOLED.update();                                    // Обновляем информацию на дисплее
                                           // Пауза 3 секунды
}
}
 
Этот код позволяет только выводить на экран слова "темно" и "светло" при прерывании и наведении лазера на фоторезистор.
Хотелось бы сделать счетчик количества прерваний луча света на фоторезистор.
В дальнейшем также хотелось бы запускать таймер по поподанию луча света на фоторезистор и остановка таймера по прерыванию.
Помогите знающие!
Спасибо!
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

markelovdn пишет:

Хотелось бы сделать счетчик количества прерваний луча света на фоторезистор.

В дальнейшем также хотелось бы запускать таймер по поподанию луча света на фоторезистор и остановка таймера по прерыванию.
Если бы не второе предложение, я бы написал, для вас код.
но , ваше непонимание первого и сразу амбиции по поводу таймера, лишают меня желания этого делать.
markelovdn
Offline
Зарегистрирован: 09.02.2016

Я конечно извиняюсь за мою амбициозность, но в предложении есть слово в ДАЛЬНЕЙШЕМ поясняющее желание разобраться и понять все последовательно. Спасибо за ответ.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

markelovdn пишет:
Я конечно извиняюсь за мою амбициозность, но в предложении есть слово в ДАЛЬНЕЙШЕМ поясняющее желание разобраться и понять все последовательно. Спасибо за ответ.

ОК, последовательно ...

То есть первое, вы поняли и реализовали уже ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

что бы было без обид

#include <OLED_I2C.h>                               // Подключаем библиотеку OLED_I2C для работы со шрифтами и графикой
OLED  myOLED(A4, A5, A4);                           // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];
int ldr = 0;
int On = 0;

void setup()
{
  myOLED.begin();
}
void loop() {
  if (analogRead(ldr) < 1000) {
    myOLED.clrScr();                                    // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("ntvyj", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт
    myOLED.update();                                    // Обновляем информацию на дисплее
    // Пауза 3 секунды
  }
  else
  {
    On++;
    myOLED.clrScr();                                    // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("cdtnkj", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт

// я не знаю ка выводить на ваш дисплей но тут надо вывести переменную On
// просто предположу
    myOLED.print(On, CENTER, 1);           // Выводим надпись "Русский язык"

    
    myOLED.update();                                    // Обновляем информацию на дисплее
    // Пауза 3 секунды
  }
}

 

markelovdn
Offline
Зарегистрирован: 09.02.2016

xDriver пишет:

что бы было без обид

#include <OLED_I2C.h>                               // Подключаем библиотеку OLED_I2C для работы со шрифтами и графикой
OLED  myOLED(A4, A5, A4);                           // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];
int ldr = 0;
int On = 0;

void setup()
{
  myOLED.begin();
}
void loop() {
  if (analogRead(ldr) < 1000) {
    myOLED.clrScr();                                    // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("ntvyj", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт
    myOLED.update();                                    // Обновляем информацию на дисплее
    // Пауза 3 секунды
  }
  else
  {
    On++;
    myOLED.clrScr();                                    // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("cdtnkj", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.setFont(SmallFont);                          // Инициализируем латинский шрифт

// я не знаю ка выводить на ваш дисплей но тут надо вывести переменную On
// просто предположу
    myOLED.print(On, CENTER, 1);           // Выводим надпись "Русский язык"

    
    myOLED.update();                                    // Обновляем информацию на дисплее
    // Пауза 3 секунды
  }
}

 

Выдает ошибку:

Подобный код пробовал но выдавал такуюже ошибку извиняюсь что не сказал сразу. Я понимаю что не соответсвие типов данных но что надо сделать что бы тип данных соответсвовал.

ardu
Offline
Зарегистрирован: 11.02.2017

Посмотрите printNumI или так myOLED.print(String(On), CENTER, 1);