QuadDisplay для Iskra JS

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Михаил Б., 31 мар 2016.

  1. Михаил Б.

    Михаил Б. Нерд

    Приветствую!

    Есть ли что-то типа https://github.com/amperka/QuadDisplay только на JS?
    Я возможно плохо искал, но на вскидку не нашел.

    Спасибо!
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Hello!

    Нет для JS модуля-драйвера пока нет. Сделаем его. Постараемся в ближайшее время.
     
  3. Михаил Б.

    Михаил Б. Нерд

    Получилось как-то так:

    Код (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;
     
     
    sys нравится это.
  4. Михаил Б.

    Михаил Б. Нерд

    Не понимаю как справиться с проблемой: при повторных вызовах обновления индикаторов, моргают все светодиоды, включая те, которые не задействованы в "старом" и в "новом" состояниях.

    Например, если сделать так:
    Код (C++):
    setInterval(function(){
      displayDigits(P8, 1,2,3,4);
    }, 1000);
    каждую секунду моргают все светодиоды во всех 4х сегментах.

    Подскажите, как от этого избавиться?
     
  5. Михаил Б.

    Михаил Б. Нерд

    zakutnya, sys и ИгорьК нравится это.
  6. nailxx

    nailxx Официальный Нерд Администратор

    Супер! Grand merci
     
  7. Скоро год. Где дработающий модуль взять???
     
  8. Protos911

    Protos911 Нерд

    Хорошо,что я старый вариант успел купить... мне его подключение больше нравиться!
    Зато у нового поле сплошное и время переключения выше;)
     
    Последнее редактирование: 22 фев 2017
  9. Shazes

    Shazes Нерд

    Это правда, старый вариант ТОП, непонятно зачем что-то вообще было менять...
     
  10. Protos911

    Protos911 Нерд

    Меняли потому, что при изменении индикации чаще, чем раз в 0,5 сек. дисплей забивает мусором...:(
     
  11. Shazes

    Shazes Нерд

    Не знаю, у меня лично, даже при 50 миллисекундах никакого мусора нет...
     
  12. Protos911

    Protos911 Нерд

    Код (C++):
    var q = require('@amperka/quaddisplay').connect(P5);

    var i = 0;

    setInterval(()=>{
      q.display(i++, 1);
    }, 100);
    Попробуйте...
    Если у вас не будет каши, то Амперка зря его сняла с производства... ;)
     
  13. Shazes

    Shazes Нерд

    Если вы про бледно загорающиеся сегменты и точки рядом с выводимыми цифрами(кстати только при отправке значения) то такая проблема действительно есть, но в принципе это не очень мешает.
     
  14. Protos911

    Protos911 Нерд

    Это и есть "каша" на языке схемотехники... ;)
    Её наличие значит, что из-за переходных процессов не происходит гашения сегментов, что в принципе не допустимо!
    Эффект, как у катодно-люминесцентных индикаторов :cool:
    Для школьных занятий по кибернетике и домашних опытов сойдёт, конечно...
    Я купил, потому, что нужен был симисегментник, да и подключение удобней, чем у нового :)
     
  15. Shazes

    Shazes Нерд

    Спасибо за пояснение, "каша" действительно немного мешает(но, конечно пока эта проблема решена так себе, ведь библиотек для работы с новым модулем пока нет), но если например мы хотим выводить на экран время, или температуру с точностью до десятых, то "каша" никак мешать не будет...
     
  16. Protos911

    Protos911 Нерд

    Кривая работа дешифраторов видна и там, просто не так явно...:D