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

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