Dec. 24, 2015 - cheapie
For this project, the mesecons, digilines, and rgblightstone mods are required. The digibutton mod is recommended, but it is possible to complete this without it.
The story behind this one is quite similar to the Tic-Tac-Toe machine. Uberi's version is nice and all, but uses 22 Luacontrollers. It's easy enough to reduce this to 21, but any fewer than that requires a smarter display. With RGB Lightstone, one LuaC does the job.
Start with a 17 wide by 5 tall panel of digimese or digilines. On the front of this, place a block of RGB Lightstone in the top left corner, and set it for channel "d", X address 1, and Y address 1. Continue this line to the right, incrementing the X address each time. The far right should have an X address of 17. Next, place another row below these and punch each one. Repeat until the entire front of the digimese is covered. If done correctly, the bottom-right RGB Lightstone will have an X address of 17 and a Y address of 5.
On top of the display's digilines or digimese, place another digiline or digimese block (anywhere works except the end). On one side, place a digilines RTC, and on the other, a Luacontroller with blinky plant.
Now, set the RTC to the channel "clock", and program the Luacontroller with the following code:
--RGB Lightstone Clock
--Written by cheapie, WTFPL
function format_time(time)
local hour=math.floor(time*24)%10
local minute=math.floor(((time*24)%1)*60)%10
local tenhour=math.floor(math.floor(time*24)/10)
local tenminute=math.floor(math.floor(((time*24)%1)*60)/10)
return tenhour,hour,tenminute,minute
end
if event.type=="program" then
mem.fgcolor = "darkblue"
mem.bgcolor = "black"
mem.th = 0
mem.h = 0
mem.tm = 0
mem.m = 0
mem.colon = false
mem.font={}
mem.font["blank"]={
{mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor}
}
mem.font[0]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[1]={
{mem.bgcolor,mem.fgcolor,mem.bgcolor},
{mem.fgcolor,mem.fgcolor,mem.bgcolor},
{mem.bgcolor,mem.fgcolor,mem.bgcolor},
{mem.bgcolor,mem.fgcolor,mem.bgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[2]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.bgcolor,mem.fgcolor,mem.bgcolor},
{mem.fgcolor,mem.bgcolor,mem.bgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[3]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[4]={
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor}
}
mem.font[5]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.bgcolor},
{mem.fgcolor,mem.fgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.bgcolor}
}
mem.font[6]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.bgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[7]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.bgcolor,mem.fgcolor,mem.bgcolor},
{mem.fgcolor,mem.bgcolor,mem.bgcolor}
}
mem.font[8]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
mem.font[9]={
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.fgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor},
{mem.bgcolor,mem.bgcolor,mem.fgcolor},
{mem.fgcolor,mem.fgcolor,mem.fgcolor}
}
end
function render(th,h,tm,m,colon)
buffer={{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor},
{mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor,mem.bgcolor}}
thchar = mem.font[th]
hchar = mem.font[h]
tmchar = mem.font[tm]
mchar = mem.font[m]
buffer[1][1] = thchar[1][1]
buffer[1][2] = thchar[1][2]
buffer[1][3] = thchar[1][3]
buffer[2][1] = thchar[2][1]
buffer[2][2] = thchar[2][2]
buffer[2][3] = thchar[2][3]
buffer[3][1] = thchar[3][1]
buffer[3][2] = thchar[3][2]
buffer[3][3] = thchar[3][3]
buffer[4][1] = thchar[4][1]
buffer[4][2] = thchar[4][2]
buffer[4][3] = thchar[4][3]
buffer[5][1] = thchar[5][1]
buffer[5][2] = thchar[5][2]
buffer[5][3] = thchar[5][3]
buffer[1][5] = hchar[1][1]
buffer[1][6] = hchar[1][2]
buffer[1][7] = hchar[1][3]
buffer[2][5] = hchar[2][1]
buffer[2][6] = hchar[2][2]
buffer[2][7] = hchar[2][3]
buffer[3][5] = hchar[3][1]
buffer[3][6] = hchar[3][2]
buffer[3][7] = hchar[3][3]
buffer[4][5] = hchar[4][1]
buffer[4][6] = hchar[4][2]
buffer[4][7] = hchar[4][3]
buffer[5][5] = hchar[5][1]
buffer[5][6] = hchar[5][2]
buffer[5][7] = hchar[5][3]
buffer[2][9] = colon and mem.fgcolor or mem.bgcolor
buffer[4][9] = colon and mem.fgcolor or mem.bgcolor
buffer[1][11] = tmchar[1][1]
buffer[1][12] = tmchar[1][2]
buffer[1][13] = tmchar[1][3]
buffer[2][11] = tmchar[2][1]
buffer[2][12] = tmchar[2][2]
buffer[2][13] = tmchar[2][3]
buffer[3][11] = tmchar[3][1]
buffer[3][12] = tmchar[3][2]
buffer[3][13] = tmchar[3][3]
buffer[4][11] = tmchar[4][1]
buffer[4][12] = tmchar[4][2]
buffer[4][13] = tmchar[4][3]
buffer[5][11] = tmchar[5][1]
buffer[5][12] = tmchar[5][2]
buffer[5][13] = tmchar[5][3]
buffer[1][15] = mchar[1][1]
buffer[1][16] = mchar[1][2]
buffer[1][17] = mchar[1][3]
buffer[2][15] = mchar[2][1]
buffer[2][16] = mchar[2][2]
buffer[2][17] = mchar[2][3]
buffer[3][15] = mchar[3][1]
buffer[3][16] = mchar[3][2]
buffer[3][17] = mchar[3][3]
buffer[4][15] = mchar[4][1]
buffer[4][16] = mchar[4][2]
buffer[4][17] = mchar[4][3]
buffer[5][15] = mchar[5][1]
buffer[5][16] = mchar[5][2]
buffer[5][17] = mchar[5][3]
return(buffer)
end
if event.type == "on" then
digiline_send("clock","GET")
elseif event.type == "digiline" and event.channel == "clock" and event.msg ~= "GET" then
local th,h,tm,m = format_time(event.msg)
mem.colon = not mem.colon
digiline_send("d",render(th,h,tm,m,mem.colon))
end
And.... that's it! The clock should come on and immediately start displaying the current (Minetest) time. No setting needed.