Frequently Used

Scroll Text on LED Matrix

LED マトリクスに文字列をスクロール表示するブロック。ニュースティッカーのように文字を流せる。

Block
Scroll Text on LED Matrix
Text Code for This Block
var sbScrollChunkRTL = function(sbArray, sbPin, sbMatrixWidth, sbMatrixHeight, sbType, frameDelay, ownSize, isFirst, isLast) {
    var arrayCols = sbArray.length / sbMatrixHeight;
    var totalFrames, padLeft;
    if (isFirst && isLast) { totalFrames = sbMatrixWidth + ownSize + 1; padLeft = sbMatrixWidth; }
    else if (isFirst) { totalFrames = sbMatrixWidth + ownSize; padLeft = sbMatrixWidth; }
    else if (isLast) { totalFrames = ownSize + 1; padLeft = 0; }
    else { totalFrames = ownSize; padLeft = 0; }
    for (var frame = 0; frame < totalFrames; frame++) {
      var t0 = Date.now();
      var sbData = [];
      for (var sbRow = 0; sbRow < sbMatrixHeight; sbRow++) {
        for (var sbCol = 0; sbCol < sbMatrixWidth; sbCol++) {
          var arrayCol = frame + sbCol - padLeft;
          if (arrayCol >= 0 && arrayCol < arrayCols) {
            sbData.push(sbArray[sbRow * arrayCols + arrayCol]);
          } else {
            sbData.push("#000000");
          }
        }
      }
      sbRgbLedMatrix(sbPin, sbData, sbMatrixWidth, sbMatrixHeight, sbType);
      var rest = Math.max(frameDelay - (Date.now() - t0), 0);
      sbDelay(rest);
    }
  };

var sbScrollChunkLTR = function(sbArray, sbPin, sbMatrixWidth, sbMatrixHeight, sbType, frameDelay, ownSize, isFirst, isLast) {
    var arrayCols = sbArray.length / sbMatrixHeight;
    var totalFrames, padLeft;
    if (isFirst && isLast) { totalFrames = sbMatrixWidth + ownSize + 1; padLeft = sbMatrixWidth; }
    else if (isFirst) { totalFrames = sbMatrixWidth + ownSize; padLeft = sbMatrixWidth; }
    else if (isLast) { totalFrames = ownSize + 1; padLeft = 0; }
    else { totalFrames = ownSize; padLeft = 0; }
    for (var frame = totalFrames - 1; frame >= 0; frame--) {
      var t0 = Date.now();
      var sbData = [];
      for (var sbRow = 0; sbRow < sbMatrixHeight; sbRow++) {
        for (var sbCol = 0; sbCol < sbMatrixWidth; sbCol++) {
          var arrayCol = frame + sbCol - padLeft;
          if (arrayCol >= 0 && arrayCol < arrayCols) {
            sbData.push(sbArray[sbRow * arrayCols + arrayCol]);
          } else {
            sbData.push("#000000");
          }
        }
      }
      sbRgbLedMatrix(sbPin, sbData, sbMatrixWidth, sbMatrixHeight, sbType);
      var rest = Math.max(frameDelay - (Date.now() - t0), 0);
      sbDelay(rest);
    }
  };

var sbScrollChunkBTT = function(sbArray, sbPin, sbMatrixWidth, sbMatrixHeight, sbType, frameDelay, ownSize, isFirst, isLast) {
    var arrayRows = sbArray.length / sbMatrixWidth;
    var totalFrames, padTop;
    if (isFirst && isLast) { totalFrames = sbMatrixHeight + ownSize + 1; padTop = sbMatrixHeight; }
    else if (isFirst) { totalFrames = sbMatrixHeight + ownSize; padTop = sbMatrixHeight; }
    else if (isLast) { totalFrames = ownSize + 1; padTop = 0; }
    else { totalFrames = ownSize; padTop = 0; }
    for (var frame = 0; frame < totalFrames; frame++) {
      var t0 = Date.now();
      var sbData = [];
      for (var sbRow = 0; sbRow < sbMatrixHeight; sbRow++) {
        var arrayRow = frame + sbRow - padTop;
        for (var sbCol = 0; sbCol < sbMatrixWidth; sbCol++) {
          if (arrayRow >= 0 && arrayRow < arrayRows) {
            sbData.push(sbArray[arrayRow * sbMatrixWidth + sbCol]);
          } else {
            sbData.push("#000000");
          }
        }
      }
      sbRgbLedMatrix(sbPin, sbData, sbMatrixWidth, sbMatrixHeight, sbType);
      var rest = Math.max(frameDelay - (Date.now() - t0), 0);
      sbDelay(rest);
    }
  };

var sbScrollChunkTTB = function(sbArray, sbPin, sbMatrixWidth, sbMatrixHeight, sbType, frameDelay, ownSize, isFirst, isLast) {
    var arrayRows = sbArray.length / sbMatrixWidth;
    var totalFrames, padTop;
    if (isFirst && isLast) { totalFrames = sbMatrixHeight + ownSize + 1; padTop = sbMatrixHeight; }
    else if (isFirst) { totalFrames = sbMatrixHeight + ownSize; padTop = sbMatrixHeight; }
    else if (isLast) { totalFrames = ownSize + 1; padTop = 0; }
    else { totalFrames = ownSize; padTop = 0; }
    for (var frame = totalFrames - 1; frame >= 0; frame--) {
      var t0 = Date.now();
      var sbData = [];
      for (var sbRow = 0; sbRow < sbMatrixHeight; sbRow++) {
        var arrayRow = frame + sbRow - padTop;
        for (var sbCol = 0; sbCol < sbMatrixWidth; sbCol++) {
          if (arrayRow >= 0 && arrayRow < arrayRows) {
            sbData.push(sbArray[arrayRow * sbMatrixWidth + sbCol]);
          } else {
            sbData.push("#000000");
          }
        }
      }
      sbRgbLedMatrix(sbPin, sbData, sbMatrixWidth, sbMatrixHeight, sbType);
      var rest = Math.max(frameDelay - (Date.now() - t0), 0);
      sbDelay(rest);
    }
  };

var clr_Pmy = "#E60012";
var arr_fah = sbConvertTextToLedArray("てきすと", 8, 8, clr_Pmy, "RIGHTTOLEFT");
{
  var total_gn2 = arr_fah.length / 8;
  var frameDelay_gn2 = Math.floor((1000) / 17);
  if (frameDelay_gn2 < 0) frameDelay_gn2 = 0;
  var workArr_gn2 = arr_fah;
  var chunks_gn2 = [];
  var __startgn2 = 0;
  while (__startgn2 < total_gn2) {
    var __endgn2 = Math.min(__startgn2 + 16, total_gn2);
    var __ownSizegn2 = __endgn2 - __startgn2;
    var __isLastgn2 = __endgn2 >= total_gn2;
    var __actualEndgn2 = __isLastgn2 ? __endgn2 : Math.min(__endgn2 + 8, total_gn2);
    var __chunkgn2 = [];
    for (var __rgn2 = 0; __rgn2 < 8; __rgn2++)
      for (var __cgn2 = __startgn2; __cgn2 < __actualEndgn2; __cgn2++)
        __chunkgn2.push(workArr_gn2[__rgn2 * total_gn2 + __cgn2]);
    chunks_gn2.push({arr: __chunkgn2, ownSize: __ownSizegn2, isFirst: __startgn2 === 0, isLast: __isLastgn2});
    __startgn2 = __endgn2;
  }
  for (var __ign2 = 0; __ign2 < chunks_gn2.length; __ign2++) {
    var __chgn2 = chunks_gn2[__ign2];
    sbScrollChunkRTL(__chgn2.arr, "PA10", 8, 8, 1, frameDelay_gn2, __chgn2.ownSize, __chgn2.isFirst, __chgn2.isLast);
  }
}
Arguments
  • Arg 1Setting
  • Arg 2Pin number(e.g.: PA10)
  • Arg 3Text
  • Arg 4Text
  • Arg 5Choice(右から左 / 下から上 / 左から右 / 上から下 / 右から左(反転) / 下から上(反転) / 左から右(反転) / 上から下(反転))
  • Arg 6Number