Монитор порта вывести на TM1637

ra9ane
Offline
Зарегистрирован: 01.11.2016

Прочитал много тем про вывод на TM1637, но примеры только вывода часов и термометров, индикатор не дорогой и хочется научиться выводить на него любые данные.
Взял скетч Монитор и решил вывести значения на TM1637, но не силён, видимо нужно ещё что то добавить.
Помогите кто может.

/*Подключаем библиотеку*/
#include "TM1637.h"
/*Определяем пины подключения*/
#define CLK 3
#define DIO 2
TM1637 tm1637(CLK, DIO);


void setup() {
    /*Инициализация дисплея*/
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);
   Serial.begin(9600);     // запускаем монитор порта   
   pinMode(A3, INPUT); // к входу A3 подключаем потенциометр
}

void loop() {
   int val = analogRead(A3); // считываем данные с порта A3
   Serial.println(val);             // выводим данные на монитор порта
   delay(1000);                       // ставим задержку для удобства
   
  /*Вывод чисел массива на дисплей*/
  int digitoneV = val/100;  // После деления на 100 остаётся разряд сотен. 
  int digittwoV = val/10;    // Выделяем разряд. десятков.
  int digitfriV = val*10;   // Выделяем разряд едениц.
   //Выводим массив на дисплей
  tm1637.display(1, digitoneV);
  tm1637.display(2, digittwoV);
  tm1637.display(3, digitfriV);
  tm1637.display(4, 28); //U
  /*Пауза*/
  delay(1000);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут уже выведены любые данные.

ra9ane
Offline
Зарегистрирован: 01.11.2016

переменный резистор подключен к А3, в монитор выводятся данные от 0 до 1023

rkit
Offline
Зарегистрирован: 23.11.2016
  tm1637.display(1, digitoneV);

И с чего ты решил, что это так работает?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вот в этом месте написан бред

ra9ane пишет:

  int digitoneV = val/100;  // После деления на 100 остаётся разряд сотен. 
  int digittwoV = val/10;    // Выделяем разряд. десятков.
  int digitfriV = val*10;   // Выделяем разряд едениц.

Попробуйте после этих строк просто вывести в монитор порта эти три переменные и посмотреть, что у Вас получилось

ra9ane
Offline
Зарегистрирован: 01.11.2016

видимо пенсию не просто так назначают, вот и спрашиваю что не так делаю, примеров вывода не нашёл. Может быть кому то кроме меня тоже поможет разобраться с индикатором.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ra9ane пишет:

вот и спрашиваю что не так делаю, примеров вывода не нашёл. 

А я Вам отвечаю. Вы сделали, что я сказал?

И не лезьте к экрану пока нормально значения для вывод не посчитаете.

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019
23
int digitoneV = val/100;  // После деления на 100 остаётся разряд сотен.
24
int digittwoV = val/10;    // Выделяем разряд. десятков.
25
int digitfriV = val*10;   // Выделяем разряд едениц.

Поищите здесь на форуме есть несколько тем прямо с готовыми кодами. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Возьми мою биб-ку для ТМ1637 и выводи туда хоть чёрталысово.

ra9ane
Offline
Зарегистрирован: 01.11.2016

Монитор порта выдаёт следующие значения, теперь как то нужно убрать лишние цифры?
val - 790
digitoneV - 7
digittwoV - 79
digitfriV - 7910

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Да. Видимо тебе пенсию не просто так назначили, а по показанию ВТЭК.

ra9ane
Offline
Зарегистрирован: 01.11.2016

Спасибо за помощь, всё таки в голове что то ещё осталось.

  /*Вывод чисел массива на дисплей*/
  int digitoneV = val/100;  // После деления на 100 остаётся разряд сотен. 
  int digittwoV = (val-digitoneV*100)/10;    // Выделяем разряд. десятков.
  int digitfriV = val-digitoneV*100-digittwoV*10;   // Выделяем разряд единиц.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ra9ane пишет:

Спасибо за помощь, всё таки в голове что то ещё осталось.

  /*Вывод чисел массива на дисплей*/
  int digitoneV = val/100;  // После деления на 100 остаётся разряд сотен. 
  int digittwoV = (val-digitoneV*100)/10;    // Выделяем разряд. десятков.
  int digitfriV = val-digitoneV*100-digittwoV*10;   // Выделяем разряд единиц.

Что именно осталось? Похоже, что мусор :-(

/*Вывод чисел массива на дисплей*/
int digitoneV = val / 100;  // После деления на 100 остаётся разряд сотен. 
int digittwoV = (val / 10) % 10;    // Выделяем разряд. десятков.
int digitfriV = val % 10;   // Выделяем разряд единиц.

Только с таким походом, непонятно, что Вы будете делать, если 4 цифры понадобятся. Опять всё с начала?

ra9ane
Offline
Зарегистрирован: 01.11.2016

Всё я победил, нужно было просто включить мозг, Всем спасибо за ответы, особенно о возрасте, да и программировать пробовал в молодости и прошлом веке, язык Алгол-60 на ЭВМ Минск-22.

/*Подключаем библиотеку*/
#include "TM1637.h"
/*Определяем пины подключения*/
#define CLK 3
#define DIO 2
TM1637 tm1637(CLK, DIO);

void setup() {
    /*Инициализация дисплея*/
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);
   Serial.begin(9600);     // запускаем монитор порта   
   pinMode(A3, INPUT); // к входу A3 подключаем потенциометр
}

void loop() {
   int val = analogRead(A3); // считываем данные с порта A3
     
  /*Вывод чисел массива на дисплей*/
  int digitV = val/1000;  // После деления на 1000 остаётся разряд тысяч.
  int digitoneV = (val-digitV*1000)/100;  // После деления на 100 остаётся разряд сотен. 
  int digittwoV = (val-digitV*1000-digitoneV*100)/10;    // Выделяем разряд. десятков.
  int digitfriV = val-digitV*1000-digitoneV*100-digittwoV*10;   // Выделяем разряд единиц.
               // выводим данные на монитор порта
  Serial.println(val);
  delay(1000);                       // ставим задержку для удобства
   //Выводим массив на дисплей
  tm1637.display(0, digitV);
  tm1637.display(1, digitoneV); 
  tm1637.display(2, digittwoV);
  tm1637.display(3, digitfriV);
  delay(1000);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ra9ane пишет:

нужно было просто включить мозг, 

Ну, так включите! Что ж Вы оставили эти жуткие повторные вычисления. Я же Вам написал в №12 как это надо делать.

Вы совсем не читаете, что Вам пишут?

ra9ane
Offline
Зарегистрирован: 01.11.2016

Ещё раз спасибо теперь увидел, как можно всё просто сделать )

/*Подключаем библиотеку*/
#include "TM1637.h"
/*Определяем пины подключения*/
#define CLK 3
#define DIO 2
TM1637 tm1637(CLK, DIO);

void setup() {
    /*Инициализация дисплея*/
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);
   Serial.begin(9600);     // запускаем монитор порта   
   pinMode(A3, INPUT); // к входу A3 подключаем потенциометр
}

void loop() {
   int val = analogRead(A3); // считываем данные с порта A3
     
  /*Вывод чисел массива на дисплей*/
  int digitV = val/1000;      // После деления на 1000 остаётся разряд тысяч.
  int digitoneV = val/100%10;   // После деления на 100 остаётся разряд сотен. 
  int digittwoV = val/10%10; // Выделяем разряд. десятков.
  int digitfriV = val%10;     // Выделяем разряд единиц.
        // выводим данные на монитор порта
  Serial.println(val);
  delay(1000);                       // ставим задержку для удобства
   //Выводим массив на дисплей
  tm1637.display(0, digitV);
  tm1637.display(1, digitoneV); 
  tm1637.display(2, digittwoV);
  tm1637.display(3, digitfriV);
  delay(1000);
}

 

Гриша
Offline
Зарегистрирован: 27.04.2014

ra9ane пишет:

Ещё раз спасибо теперь увидел, как можно всё просто сделать )



  int digittwoV = val/10%10; // Выделяем разряд. десятков.  - не совсем так
// делим на 10 и потом берем остаток от деления на 10
 


 int digitfriV = val%10;     // Выделяем разряд единиц. - не правильно
//берем остаток от деления на 10

 

я немного описание поправил, смысл сильно поменялся (описания). и разберитесь с арифметическими операторами.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Гриша. а я вот не согласен комментариями. Они бессмысленны.

 int digitfriV = val%10;     // Выделяем разряд единиц. - не правильно
//берем остаток от деления на 10

Я и из кода вижу, что там берётся остаток от деления на 10 - что нового мне сообщает Ваш комментарий? Он просто повторяет по-русски то, что в коде написано. А вот то, что в терминах данной задачи это разряд единиц, а не, например, количество яиц динозавра в инкубаторе - это из кода никак не следует, и это как раз полезная информация для понимания того, что делается в программе.

Гриша
Offline
Зарегистрирован: 27.04.2014

ЕвгенийП пишет:

Гриша. а я вот не согласен комментариями. Они бессмысленны.

Возможно вы правы - бессмысленны... Но ТС как я понял "не вполне" понимает... я имею ввиду механизм получения значения разряда десятичного числа.