7 сегментный дисплей 39121. как вывести точку?

fsdb
Offline
Зарегистрирован: 24.10.2015

Ребята, помогите вывести точку на четырех значном семи сегментном дисплее. числа библиотека выводит а точку опускает.
ссылка на дисплей

https://ru.aliexpress.com/item/J34-Free-Shipping-4-Bits-Digital-Tube-LED-Display-Module-Four-Serial-for-Arduino-595-Driver/32401419391.html?spm=2114.10010208.1000014.2.2edRgP&scm=1007.13338.79672.000000000000000&pvid=efeb8e97-71da-4bb1-a0c3-eee36023591f&tpp=1

 

//цифры
#include "Four7Seg74hc595.h"

esl::Four7Seg74hc595 display(6 ,5,4 );
//6 SCLK (1 число)
//5  RCLK (2 число)
//4  DIO  (3 число)


char sbuf[5];
unsigned long t1=0;
unsigned long  cnt;
float f_old;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

float f;
int a;
a=analogRead(A0);
f=a;

f=(f*1.256)/268;


if (f_old==f) {cnt++;}
if (cnt==300) {cnt=0; t1=1;}
f_old=f;


if (f<=2) {
if (t1==1) {
t1=0;



f=f*100;
a=int(f);
sprintf( sbuf, "%04u", a);

//String stringVar=String(f);
//char charVar[sizeof(stringVar)];
//stringVar.toCharArray(charVar, sizeof(charVar));


//Serial.print(charVar);
//Serial.print(" ");
Serial.print(f);
Serial.print("v ");
Serial.println(a);

display.setDigits( sbuf, 4 );
}
}
display.update();
//показываем на цифровом дисплее     



}

 

 

 

 

 

 

 

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

А в каком месте кода Вы пытаетесь точку вывести?

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015
fsdb
Offline
Зарегистрирован: 24.10.2015

ЕвгенийП -  в закоментированном коде пытался через charVar. мерию вольтаж батарейки 1.27 хотел бы вывести на дисплей показания с точкой.

 

fsdb
Offline
Зарегистрирован: 24.10.2015

Sanyaba, пробывал я её ранее. в этих библиотеках управление идет именно 7 сегментными диодами а как поставить точку именно - ну никак не пойму.

fsdb
Offline
Зарегистрирован: 24.10.2015

по возможности подскажите как нужно правильно

String stringVar=String(f);
char charVar[sizeof(stringVar)];
stringVar.toCharArray(charVar, sizeof(charVar));
display.setDigits( charVar, 4 );

 

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

fsdb пишет:

ЕвгенийП -  в закоментированном коде пытался через charVar. мерию вольтаж батарейки 1.27 хотел бы вывести на дисплей показания с точкой.

Вы не поняли мой вопрос. В каком именно месте кода (номер строки) Вы пытаетесь вывести тточку и у Вас не получается?

fsdb
Offline
Зарегистрирован: 24.10.2015

display.setDigits( charVar, 4 );

fsdb
Offline
Зарегистрирован: 24.10.2015

я думал что 5й пост весьма понятен? попытка потролить и поглумиться?

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

fsdb пишет:

я думал что 5й пост весьма понятен? попытка потролить и поглумиться?

А Вы не заметили, что мой вопрос был в первом, сильно раньше пятого?

Попытка потроллить и поглумиться?

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

А в пятом посте написано что-то невразумительное. Совсем невразумительное.

fsdb
Offline
Зарегистрирован: 24.10.2015

ЕвгенийП - вот не надо сейчас писать эти доводы в последнем посте. Так пишут только школьники. Сохраните достоинство - уйдите с темы. был вопрос на который у меня нет ответа, а имея верный ответ - форум был бы лишним.

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

fsdb пишет:

вот не надо сейчас писать эти доводы.

С Вашего позволнеия (или без такового) я сам буду решать что мне надо, что нет.

Я написал, что код даже близео не похож на разумный (с трудом удержался от слова "бред"). Если бы в ответ от Вас послледовал нормальный вопрос типа "а что в нём не так?", был бы нормальный ответ. Но вместо нормально вопроса последовало требование

fsdb пишет:

уйдите с темы

Я то могу уйти. Только проблема Ваша никуда не уйдёт, с Вами и останется.

fsdb пишет:

а имея верный ответ - форум был бы лишним.

Выт правда считаете, что форум создан исключительно для того, чтобы давать Вам правильные ответы на детсадовские вопросы?

Боюсь, что я Вас разочарую, но форум - он для общения по интересам. Здесь общаются люди, у которых общие интересы и которым интересно друг с другом. Лично Вам никто здесь ничего не должен. Поэтому либо Вы вежливо задаёте вопросы, и, возможно, получаете ответы, либо, требуете. чтобы люди "ушли с темы" и остаётесь со своими проблемами наедине.

Удачи!

kalapanga
Offline
Зарегистрирован: 23.10.2016

А Ваша библиотека вообще точку умеет выводить? Вы проверяли? Есть рабочий пример выводящий точку? Скорее всего нет, иначе вряд ли бы возник этот вопрос. Либо разбирайтесь в коде этой библиотеки, либо найдите другую.

Писал, пока ещё не видел последних сообщений. Как-то не вызывают желания общаться. 

fsdb
Offline
Зарегистрирован: 24.10.2015

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

спасибо 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

kalapanga пишет:

Вы проверяли?

я запретил.

*пошто бурята русофобите, словяне?

fsdb
Offline
Зарегистрирован: 24.10.2015

Sanyaba - по вашей ссылке тоже пробывал. но в примере использование точки не было.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

fsdb пишет:

по возможности подскажите как нужно правильно

String stringVar=String(f);
char charVar[sizeof(stringVar)];
stringVar.toCharArray(charVar, sizeof(charVar));
display.setDigits( charVar, 4 );

Правильно - пристрелить кобылу, которая это набредила, чтоб не мучилапсь. Советы по лечению - только выкачивание бабла ветеринарами.

fsdb
Offline
Зарегистрирован: 24.10.2015

kalapanga - скорее всего умеет. есть упоминание в коментариях про dot


void Four7Seg74hc595::update() {
  uint8_t value, max_index = num_digits-1;
  for ( uint8_t i=0; i < num_digits; i++ ) {
     value = raw_digits[ max_index-i ] ^ invert_mask;
     shiftOut( dio_pin, sclk_pin, MSBFIRST, value ); // seven segments + dot (common-anode type)
     shiftOut( dio_pin, sclk_pin, MSBFIRST, (1 << i) ); // select digit
     digitalWrite( rclk_pin, HIGH );
     digitalWrite( rclk_pin, LOW );
     delayMicroseconds( delay_usec );
  }
  shiftOut( dio_pin, sclk_pin, MSBFIRST, 0xff ); // seven segments + dot (common-anode type)
  shiftOut( dio_pin, sclk_pin, MSBFIRST, 0 ); // select digit
  digitalWrite( rclk_pin, HIGH );
  digitalWrite( rclk_pin, LOW );
}

 

fsdb
Offline
Зарегистрирован: 24.10.2015

Ворота и почему так не корректно?

на дисплее вижу 1 (пустой сегмент)26 . функция ожидает char , вместо пустого сегмента в char точка.

fsdb
Offline
Зарегистрирован: 24.10.2015

kalapanga -вы правы . все таки там нет это функции в библиотеке. посмотрел по внимательней... спасибо

P.S. по поводу сообщений - он хотел что бы все это так и закончилось изначально.  а если слова мои *по возможности подскажите как нужно правильно* - для него звучат как требования и пытается учить меня вежлости - это бред сивой кобылы .

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

fsdb пишет:

Ворота и почему так не корректно?

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

Попробуй создать строки разной длины и напечатать от них sizeof(str). Посмотри, что получится, подумай (если есть чем).

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ну, не знаю - заюзать библиотеку для 7-ми сегментного индикатора, пытаться зажечь 8-й сегмент по ходу треда размазывая розовые сопли.

fsdb
Offline
Зарегистрирован: 24.10.2015

Клапауций 112 -я осознал. спасибо. kalapanga подсказал верное направление. 

Ворота - корректней было воспользоваться length()? я брал пример с др. сайта...

 

 

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Не знаю, что там "корректней". Ты напечатал, как я говорил? Судя по всему - нет. Значит. корректней пристрелить кобылу, как я и советовал, поскольку работать ты явно не желаешь.

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Sanyaba пишет:

http://www.catincoat.ru/2016/03/arduino-atmega328-4-bit-led-digital.html

Я этим пользовался.

Функция disp.dispFloat(-1.32, 2); выводит число с точкой (и с минусом если нужно).

Второй параметр - число знаков после запятой.