Skip to content

Instantly share code, notes, and snippets.

@OrlandoHC
Created March 18, 2022 16:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OrlandoHC/ce465e16b96f6360eb22bfdc35b92166 to your computer and use it in GitHub Desktop.
Save OrlandoHC/ce465e16b96f6360eb22bfdc35b92166 to your computer and use it in GitHub Desktop.
LED Scroller
#wrapper
#theMarquee
- (0..59).each do |i|
.light.off{:class => "0_#{i}"}
- (0..59).each do |i|
.light.off{:class => "1_#{i}"}
- (0..59).each do |i|
.light.off{:class => "2_#{i}"}
- (0..59).each do |i|
.light.off{:class => "3_#{i}"}
- (0..59).each do |i|
.light.off{:class => "4_#{i}"}
- (0..59).each do |i|
.light.off{:class => "5_#{i}"}
- (0..59).each do |i|
.light.off{:class => "6_#{i}"}
%input{:id => "theInput", :type => "text", :name => "input", :value => "Hello everyone"}
var SCROLLER_LENGTH = 60;
var HEIGHT = 7;
var theInput = $('#theInput');
var fps = 30;
var myMessage = textToLED('Hello everyone ');
var leftPointer = SCROLLER_LENGTH + 1;
var rightPointer = 0;
var furthestLeftPoint = 0 - myMessage.length;
theInput.change(function(){
clearLights();
myMessage = textToLED(this.value);
furthestLeftPoint = 0 - myMessage.length;
leftPointer = SCROLLER_LENGTH + 1;
});
function clearLights(){
var lightsOn = $('.on');
lightsOn.removeClass('on');
lightsOn.addClass('off');
}
function setLight(row, col, state){
var theLight = $('.'+row+'_'+col);
if(theLight.hasClass('on') && !state){
theLight.removeClass('on');
theLight.addClass('off');
}else if(theLight.hasClass('off') && state){
theLight.removeClass('off');
theLight.addClass('on');
}
}
function drawMessage(messageArray, leftPointer){
var messageLength = messageArray.length;
var totalScrollLength = SCROLLER_LENGTH + messageLength;
if(messageLength>0){
for(var col=0;col<messageLength;col++){
for(var row=0;row<HEIGHT;row++){
var offsetCol = leftPointer + col;
if(offsetCol<SCROLLER_LENGTH || offsetCol >= 0){
setLight(row,offsetCol,messageArray[col][row]);
}
}
}
}
}
function textToLED(theWord){
var theMessage = [];
theWord = theWord.toUpperCase();
for(var i=0;i<theWord.length;i++){
theMessage.push(charToLED(theWord.charAt(i)));
theMessage.push(charToLED());
}
var flatten = [];
flatten = flatten.concat.apply(flatten, theMessage);
return flatten;
}
function charToLED(theChar){
var theLed = [];
switch(theChar){
case 'A' :
theLed = [[false, false, true, true, true, true, true],
[false, true, false, false, true, false, false],
[true, false, false, false, true, false, false],
[false, true, false, false, true, false, false],
[false, false, true, true, true, true, true]];
break;
case 'B' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[false, true, true, false, true, true, false]];
break;
case 'C' :
theLed = [[false, true, true, true, true, true, false],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[false, true, false, false, false, true, false]];
break;
case 'D' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[false, true, true, true, true, true, false]];
break;
case 'E' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, false, false, false, true]];
break;
case 'F' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[true, false, false, false, false, false, false]];
break;
case 'G' :
theLed = [[false, true, true, true, true, true, false],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[true, false, false, false, true, false, true],
[true, true, false, false, true, true, true]];
break;
case 'H' :
theLed = [[true, true, true, true, true, true, true],
[false, false, false, true, false, false, false],
[false, false, false, true, false, false, false],
[false, false, false, true, false, false, false],
[true, true, true, true, true, true, true]];
break;
case 'I' :
theLed = [[false, false, false, false, false, false, false],
[true, false, false, false, false, false, true],
[true, true, true, true, true, true, true],
[true, false, false, false, false, false, true],
[false, false, false, false, false, false, false]];
break;
case 'J' :
theLed = [[false, false, false, false, false, true, false],
[false, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[true, true, true, true, true, true, false],
[true, false, false, false, false, false, false]];
break;
case 'K' :
theLed = [[true, true, true, true, true, true, true],
[false, false, false, true, false, false, false],
[false, false, true, false, true, false, false],
[false, true, false, false, false, true, false],
[true, false, false, false, false, false, true]];
break;
case 'L' :
theLed = [[true, true, true, true, true, true, true],
[false, false, false, false, false, false, true],
[false, false, false, false, false, false, true],
[false, false, false, false, false, false, true],
[false, false, false, false, false, false, true]];
break;
case 'M' :
theLed = [[true, true, true, true, true, true, true],
[false, true, false, false, false, false, false],
[false, false, true, false, false, false, false],
[false, true, false, false, false, false, false],
[true, true, true, true, true, true, true]];
break;
case 'N' :
theLed = [[true, true, true, true, true, true, true],
[false, false, true, false, false, false, false],
[false, false, false, true, false, false, false],
[false, false, false, false, true, false, false],
[true, true, true, true, true, true, true]];
break;
case 'O' :
theLed = [[false, true, true, true, true, true, false],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[true, false, false, false, false, false, true],
[false, true, true, true, true, true, false]];
break;
case 'P' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[false, true, true, false, false, false, false]];
break;
case 'Q' :
theLed = [[false, true, true, true, true, true, false],
[true, false, false, false, false, false, true],
[true, false, false, false, true, false, true],
[true, false, false, false, false, true, false],
[false, true, true, true, true, false, true]];
break;
case 'R' :
theLed = [[true, true, true, true, true, true, true],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[true, false, false, true, false, false, false],
[false, true, true, false, true, true, true]];
break;
case 'S' :
theLed = [[false, true, true, false, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, true, false, false, true],
[true, false, false, false, true, true, false]];
break;
case 'T' :
theLed = [[true, false, false, false, false, false, false],
[true, false, false, false, false, false, false],
[true, true, true, true, true, true, true],
[true, false, false, false, false, false, false],
[true, false, false, false, false, false, false]];
break;
case 'U' :
theLed = [[true, true, true, true, true, true, false],
[false, false, false, false, false, false, true],
[false, false, false, false, false, false, true],
[false, false, false, false, false, false, true],
[true, true, true, true, true, true, false]];
break;
case 'V' :
theLed = [[true, true, true, true, true, false, false],
[false, false, false, false, false, true, false],
[false, false, false, false, false, false, true],
[false, false, false, false, false, true, false],
[true, true, true, true, true, false, false]];
break;
case 'W' :
theLed = [[true, true, true, true, true, true, false],
[false, false, false, false, false, false, true],
[false, false, false, false, true, true, false],
[false, false, false, false, false, false, true],
[true, true, true, true, true, true, false]];
break;
case 'X' :
theLed = [[true, false, false, false, false, false, true],
[false, true, true, false, true, true, false],
[false, false, false, true, false, false, false],
[false, true, true, false, true, true, false],
[true, false, false, false, false, false, true]];
break;
case 'Y' :
theLed = [[true, false, false, false, false, false, false],
[false, true, false, false, false, false, false],
[false, false, true, true, true, true, true],
[false, true, false, false, false, false, false],
[true, false, false, false, false, false, false]];
break;
case 'Z' :
theLed = [[true, false, false, false, false, true, true],
[true, false, false, false, true, false, true],
[true, false, false, true, false, false, true],
[true, false, true, false, false, false, true],
[true, true, false, false, false, false, true]];
break;
default:
theLed = [[false, false, false, false, false, false, false]];
}
return theLed;
}
function draw() {
setTimeout(function() {
requestAnimationFrame(draw);
if(leftPointer==furthestLeftPoint){
leftPointer = SCROLLER_LENGTH + 1;
}
drawMessage(myMessage, leftPointer);
leftPointer--;
}, 1000 / fps);
}
draw();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
body{
background-color: #222;
}
#wrapper{
width: 420px;
margin: 50px auto;
}
#theMarquee{
height: 55px;
background: linear-gradient(0deg, #111, #222);
box-shadow:
0px 0px 2px 0px #aaa inset,
0px -1px 2px 0px #aaa inset,
2px -5px 5px 0px #111 inset,
0px -5px 5px 0px #111 inset,
2px 5px 5px 0px #111;
border-radius: 5px;
}
#theInput{
clear: both;
margin: 25px 100px;
width: 200px;
text-align: center;
}
.light {
width: 5px;
height: 5px;
margin: 1px 1px;
text-align: center;
font-size: 15px;
float: left;
border-radius: 50%;
}
.off{
background-color: #121212;
}
.on{
background-color: #0ff;
box-shadow: 0px 0px 5px #0ff;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment