Приветствую! Есть ли что-то типа https://github.com/amperka/QuadDisplay только на JS? Я возможно плохо искал, но на вскидку не нашел. Спасибо!
Получилось как-то так: Код (Javascript): // принцип работы описан тут: http://www.romanblack.com/shift1.htm // длительности импульсов отсюда https://github.com/amperka/QuadDisplay/blob/master/QuadDisplay.cpp var qDP = P8; // quad Display Pin var CLEAR = [].concat.apply([], [].concat(Array(32).fill([0.001,0.03]), [0.06,0.3])); bitmaps = [ 0b00000011, // 0 0b10011111, // 1 0b00100101, // 2 0b00001101, // 3 0b10011001, // 4 0b01001001, // 5 0b01000001, // 6 0b00011111, // 7 0b00000001, // 8 0b00001001 // 9 ]; function clear(pin) { pin.write(1); digitalPulse(pin, 0, CLEAR); } function displayDigits(pin, a, b, c, d){ // склееваем массивы длительностей импульсов всех четырех цифр в один // и прибавляем импульс "защелки" (latch) lengths = digitToPulseLengths(bitmaps[a]).concat( digitToPulseLengths(bitmaps[b]), digitToPulseLengths(bitmaps[c]), digitToPulseLengths(bitmaps[d]), [0.06,0.3] ); pin.write(1); digitalPulse(pin, 0, lengths); } // Рекурсивно генерируем массив длинн импульсов function digitToPulseLengths(digit, deepness, arr) { if (typeof(arr)==='undefined') arr = Array(); if (typeof(deepness)==='undefined') deepness = 8; if ((digit & 0b1) == 1) { arr.push(0.001); arr.push(0.03); } else { arr.push(0.015); arr.push(0.06); } if (deepness > 1) return( digitToPulseLengths(digit >> 1, deepness - 1, arr) ); return arr; } // тут наконец выводим цифири displayDigits(qDP, 1,2,3,4); // шорткаты для вызова функций из консоли Object.c = clear; Object.d = displayDigits;
Не понимаю как справиться с проблемой: при повторных вызовах обновления индикаторов, моргают все светодиоды, включая те, которые не задействованы в "старом" и в "новом" состояниях. Например, если сделать так: Код (C++): setInterval(function(){ displayDigits(P8, 1,2,3,4); }, 1000); каждую секунду моргают все светодиоды во всех 4х сегментах. Подскажите, как от этого избавиться?
Оформил код в виде модуля, вдруг полезно будет кому-то: https://github.com/madbox/IskraJS/blob/master/modules/TroykaQuadDisplay.js
Хорошо,что я старый вариант успел купить... мне его подключение больше нравиться! Зато у нового поле сплошное и время переключения выше
Код (C++): var q = require('@amperka/quaddisplay').connect(P5); var i = 0; setInterval(()=>{ q.display(i++, 1); }, 100); Попробуйте... Если у вас не будет каши, то Амперка зря его сняла с производства...
Если вы про бледно загорающиеся сегменты и точки рядом с выводимыми цифрами(кстати только при отправке значения) то такая проблема действительно есть, но в принципе это не очень мешает.
Это и есть "каша" на языке схемотехники... Её наличие значит, что из-за переходных процессов не происходит гашения сегментов, что в принципе не допустимо! Эффект, как у катодно-люминесцентных индикаторов Для школьных занятий по кибернетике и домашних опытов сойдёт, конечно... Я купил, потому, что нужен был симисегментник, да и подключение удобней, чем у нового
Спасибо за пояснение, "каша" действительно немного мешает(но, конечно пока эта проблема решена так себе, ведь библиотек для работы с новым модулем пока нет), но если например мы хотим выводить на экран время, или температуру с точностью до десятых, то "каша" никак мешать не будет...