Оцените библиотеку

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Dschever, 2 дек 2016.

  1. Dschever

    Dschever Нерд

    Написал библиотеку, надеюсь получить хорошие советы, может кому пригодиться
    Вот ссылка на гитхаб
    https://github.com/Dschever/sdvigoviy_registr
    управление в принципе я там описал, сама библиотека sdvigoviy_registr.js
    а еще файл blink_led.js это так попутно написал пока тестил
    очень старался написать основываясь на видео амперки с ютуба по искре
    можно подключить неограниченное количество регистров, ограничивает лишь мощность платы)
    использование простое, если 1-2 регистра то создаются глобальные переменные Rx где x номер ножки
    R1.write(1) и питание пошло на ножку регистра q1
    а если много регистров и не удобно к каждому пину обращаться можно отключить создание глобальных переменных Rx и включать при помощи метода registr.PinUpdate()
    в общем старался описать все в Readme будут вопросы пишите)
     
  2. DrOnJD

    DrOnJD Нерд

    Код (Javascript):

    var SuperRegistr = function(opts, i, tr){
        opts = opts || {};
        i = i || 1;
        tr = tr || true;
        this._arr_pin = CreatePin(i, this, tr);
          this._ds = opts.ds;
          this._st = opts.st;
          this._sh = opts.sh;
          this._mr = opts.mr;
          this._oe = opts.oe;
          this._hi_z = false;
        if(this._mr!=undefined) this._mr.write(1);
        if(this._oe!=undefined) this._oe.write(0);
    };
    var SuperPin = function(p, registr){
      this._pin = p;
      this._registr = registr;
    };
    SuperRegistr.prototype.PinUpdate = function (){
        for (var i = this._arr_pin.length-1; i >=0 ; i--) {
    // В условных операторах лучше использовать операторы без приведения типов
            if(this._arr_pin[i] == true ){
                this._ds.write(1);
                this._sh.write(1);
                this._sh.write(0);
                this._ds.write(0);
            }else if(this._arr_pin[i] == false){
                this._ds.write(0);
                this._sh.write(1);
                this._sh.write(0);
            }else{
                console.log("Error Arr_Pin[i]");
                this._ds.write(0);
                this._sh.write(1);
                this._sh.write(0);
            }
        }
        this._st.write(1);
        this._st.write(0);
    };

    SuperPin.prototype.write = function(on_off){
    //Правильные отступы важны, это упрощает читаемость кода (при сложной структуре) и показывает насколько аккуратен и внимателен программист.
                  if(on_off == true){
                      this._registr._arr_pin[this._pin]=1;
                      this._registr.PinUpdate();
                  }else if(on_off == false){
                    this._registr._arr_pin[this._pin]=0;
                      this._registr.PinUpdate();
                  }else{
                      console.log("Error    write(true) or false, 1,0");
                  }
    };

    SuperRegistr.prototype.Reset = function (){
      if(this._mr!=undefined){
        this._mr.write(0);
        this._st.write(1);
        this._st.write(0);
        this._mr.write(1);
      }else if(this._mr==undefined){
          for (var i=0; this._arr_pin.length>i; i++) {
              this._arr_pin[i]=0;
          }; // лишняя точка с запятой
          this._st.write(1);
        this._st.write(0);
      }else{
          console.log("Error  | mr |  Error");
      }
    };
    //Функциям и методам нужно давать более осознанные названия.
    //Большими буквами именуются константы
    SuperRegistr.prototype.HI_Z = function (){
    if(this._mr!=undefined){
        if(this._hi_z == false){
            this._hi_z = true;
            this._oe.write(1);
        }else if(this._hi_z == true){
            this._hi_z = false;
            this._oe.write(0);
        }
    }else{
        console.log("Error  | oe |  Error");
    }
    };
    //С большой буквы именуются классы
    function CreatePin(i, registr, tr){
    //Если планируется выкладывать библиотеку для массового использования, не лишним будет давать переменным и параметрам более полные и осознанные имена, это сильно упрощает понимание кода.
        var arr=[];
        for(p=0;p<i*8;p++){
            arr.push(0);
              if(tr == true)global["R"+p] = new SuperPin(p, registr);
        }
        return arr;
    }; // лишняя точка с запятой

    exports.connect = function(opts, i, tr){
        return new SuperRegistr(opts, i, tr);
    } // отсутствует точка с запятой
     
    Единственная важная проблема - это отсутствует описания библиотеки. Не ясно как ей пользоваться, какие параметры передавать хотя-бы для конекта. Все остальные замечания вторичны.
     
    Последнее редактирование: 2 дек 2016
    Dschever нравится это.
  3. Dschever

    Dschever Нерд

    А в readme мало иныормации? еще добавить?
     
  4. Dschever

    Dschever Нерд

    Спасибо, постараюсь исправить замечания, на счет описания, я сделал Readmе к библиотеке, если плохо описанно скажите что не так, исправлю, дописывал в 5утра, мог чтото упустить или лишнего написать
     
  5. DrOnJD

    DrOnJD Нерд

    В редми
    и этого скорее всего не достаточно. Возможно Вы забыли закомитить или запушить последние изменения.
     
  6. mcureenab

    mcureenab Гуру

    Readme пустой.
    Очень не плохо начинать с разработки документации или делать это попеременно с разработкой кода.
    Если сложно описать словами как и для чего пользоваться библиотекой, то лучше поменять библиотеку.

    В случае ошибки нужно исключение поднимать, а лог пусть приложение пишет, если ему надо.

    on_off непонятно о чем. true это on или off
     
  7. Dschever

    Dschever Нерд

    И вправду пуст, я наверно не сохранил, я там старался как можно подробней описать, после работы исправлю
     
  8. Dschever

    Dschever Нерд

    Спасибо что уделяеете мне время, я думал хорошо знаю JS, всегда есть чему научиться

    Немного напишу тут о библиотеке

    Вызов
    var ds=P0,st=P1,sh=P2,mr=P3,oe=P4;
    var reg = require('sdvigoviy_registr').connect({ds:ds,st:st,sh:sh,mr:mr,oe: oe},1,true);
    mr, oe, 1, true не обязательны, но тогда
    mr+5v oe gnd
    1-число регистров, если не писать будет 1, может быть много
    true - можно не писать будет тру, если false, то не будут создоваться глобальные переменные удобно если много регистров
    Можно изменять масив внутри reg._arr_pin и использовать метод reg.PinUpdate()
    Остольные методы
    reg.Reset() сбросить
    reg.HI_Z() переключение HI-Z
    R0.write(1)или true включит пин q0
    R0.write(0)или false выключит q0
     
  9. Dschever

    Dschever Нерд

    Набрасал на скорую, в ридми все подробней описывал, опишу все там вечером подробнее
     
  10. mcureenab

    mcureenab Гуру

    Пины микросхемы Qx называются а в библиотеке Rx что не добавляет ясности.
    Для каскадного подключения микросхем индексация пинов не ясна.
    К стати есть возможность установить сразу несколько пинов?
     
    Последнее редактирование: 2 дек 2016
  11. Dschever

    Dschever Нерд

    Когда придумывал имя для переменной не задумался о удобстве, просто буква R мне показалась более симпатична нежеле Q.
    Исправлю
    Подключать регистры последовательно через q7' на ds как в инструкции. тогда при
    var reg = require('sdvigoviy_registr').connect({ds:ds,st:st,sh:sh,mr:mr,oe: oe},2,true);
    будет от R0 до R15 и используються так же,
    По инструкции к регистру, при сдвиге, лишний сигнал переходит дальше через q7'
    Не было возможности проверить, регистр только 1 (
    Но должно работать, если у кого есть такая возможность прошу сообщить о результатах теста
     
  12. Dschever

    Dschever Нерд

    Не совсем понял
    Но предположу
    Можно влиять на reg._arr_pin
    К примеру 5 регистров значит 40 пинов, при вызове библиотеки использовали false
    Можно включить все пины так
    Код (Javascript):
    for (i=0; i <reg._arr_pin.length;i++ ){
       reg._arr_pin [i]=1;//или тру
    }
    reg.PinUpdate ();
    Не знаю правильно ли понял ваш вопрос и смог ли на него ответить
     
  13. ИгорьК

    ИгорьК Гуру

    Поправили бы Вы заголовок. Библиотека, которая... Ну нельзя же так: написал библу - зацените, вперед на Гит.
    Прикиньте, если все библиотеки так начинались.
     
  14. Dschever

    Dschever Нерд

    Исправил почти все недочеты
    Несостыковка отступов после переноса из редактора, на компе все норм, видимо символы переноса на хабе более строго рассматриваються
    Гдето 20стр. не совсем понял замечание, предположу что стоит создать переменную перед фор и ей задать значание this._arr_pin.length-1
    Гдето 60стр. лмшняя точка с зпт, ятак понимаю, между действиями на одном уровне нужен знак ; чтоб разделить их
    Прошу обьяснить чтоб писать грамотней
    С HI-Z я не очень понимаю как оно работет, орентировочно предпологаю, что при hiz питание на пины подоеться постоянно и считываеться изминение на них наверно это для кнопок(не разбирался)
    Поэтому оставил переключение с рабочего на Hiz знающим
    Гдето 90стр. лишняя ; после остольных классов и методов стоит и вроде так надо, что тут не так?
     
  15. Dschever

    Dschever Нерд


    Исправил, так будет правильней
     
  16. Dschever

    Dschever Нерд

    Посторался все исправить и заполннить ридми
    Надеюсь получить ценный опыт, давненько учу сам програмирование, но никогда не работал с людьми, у меня не было наставника
    Всем спасибо за участие
     
  17. Dschever

    Dschever Нерд

    Постараюсь конкретнее описывать тему
     
  18. Unixon

    Unixon Оракул Модератор

    Какие еще ds,st,sh,mr,oe в коде, зачем там эта китайская грамота?
    DataPin, ClockPin, LatchPin, ResetPin, OutputEnablePin
    Такой элементарный код должен быть написан на человеческом языке и понятен без документации.
    Ну и технический английский учите, чтобы к транслиту не прибегать.
     
    Последнее редактирование: 3 дек 2016
  19. ИгорьК

    ИгорьК Гуру

    В ряды "Ардуинщиков" вливается новое племя :)
     
  20. Unixon

    Unixon Оракул Модератор

    Ну эт хорошо, пускай вливаются :)