Posted 03 May 2012 - 05:04 PM
Hi all, sorry for my english im spanish, i take you a digital 5x3 clock that takes minecraft hour in 12/24 hour format and has clock refresh control.
dont mention my lua skills im completly noob at lua programing :-)
[twitter]https://twitter.com/#!/elfcor[/twitter]
dont mention my lua skills im completly noob at lua programing :-)
http://www.youtube.com/v/iDoz8nofkUk
-- Swich para cambiar el reloj a formato 12 horas, si esta a falso son 24 horas
docehoras = false
-- Funcion que limpia la pantalla del ordenador
function clear()
term.clear()
term.setCursorPos(1,1)
end
-- Funcion que formatea la hora que le pasamos sacandola en formato hh:mm
function formatotiempo(nTime)
local nHour = math.floor(nTime)
local nMinute = math.floor((nTime - nHour)*60)
-- Si son 12 horas restamos 12 a las horas
if docehoras == true and nHour >= 13 then
pmDot = true
nHour = nHour-12
else
pmDot = false
end
-- Devolvemos la hora Formateada
return string.format( "%02d:%02d", nHour, nMinute )
end
-- Funcion que dibuja el numero que quedamos en la posicion que queramos
function dibujar(numero,cara)
-- Definicion de los numeros en arrays o tablas muy importante respetar los colores.
local tabla1 = {"pink","magenta"}
local tabla2 = {"white","yellow","lime","gray","magenta"}
local tabla3 = {"white","pink","yellow","gray","magenta"}
local tabla4 = {"pink","yellow","magenta","orange"}
local tabla5 = {"white","orange","pink","yellow","gray"}
local tabla6 = {"white","orange","pink","yellow","lime","gray"}
local tabla7 = {"white","pink","magenta"}
local tabla8 = {"white","orange","pink","yellow","lime","gray","magenta"}
local tabla9 = {"white","orange","pink","yellow","gray","magenta"}
local tabla0 = {"white","orange","pink","lime","gray","magenta"}
-- Definicion de las caras donde estan conectados los cables
-- el orden se corresponde con la posicion de los digitos en el display
local tablacaras = {"left","back","right","front"}
-- Primero limpiamos el digito a dibujar
for v = 1,7 do
rs.setBundledOutput( tablacaras[cara], colors.subtract( rs.getBundledOutput( tablacaras[cara] ), colors[tabla8[v]] ) )
end
-- Luego dependiendo del numero a dibujar recorremos el array correspondiente y lo dibujamos en el digito seleccionado
if numero == 1 then
for v = 1,2 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla1[v]] ) )
end
elseif numero == 2 then
for v = 1,5 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla2[v]] ) )
end
elseif numero == 3 then
for v = 1,5 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla3[v]] ) )
end
elseif numero == 4 then
for v = 1,4 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla4[v]] ) )
end
elseif numero == 5 then
for v = 1,5 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla5[v]] ) )
end
elseif numero == 6 then
for v = 1,6 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla6[v]] ) )
end
elseif numero == 7 then
for v = 1,3 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla7[v]] ) )
end
elseif numero == 8 then
for v = 1,7 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla8[v]] ) )
end
elseif numero == 9 then
for v = 1,6 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla9[v]] ) )
end
elseif numero == 0 then
for v = 1,6 do
rs.setBundledOutput( tablacaras[cara], colors.combine( rs.getBundledOutput( tablacaras[cara] ), colors[tabla0[v]] ) )
end
else
-- Bucle de control, si viene cualquier cosa que no sea un numero del 0-9 borramos el digito seleccionado siempre que este entre 1-4
if cara >= 1 and cara <= 4 then
for v = 1,7 do
rs.setBundledOutput( tablacaras[cara], colors.subtract( rs.getBundledOutput( tablacaras[cara] ), colors[tabla8[v]] ) )
end
else
-- Si se intenta dibujar cualquier otro digito limpiamos el display completo
for j = 1,4 do
for v = 1,7 do
rs.setBundledOutput( tablacaras[cara], colors.subtract( rs.getBundledOutput( tablacaras[cara] ), colors[tabla8[v]] ) )
end
end
end
end
end
-- tabla de las caras (si podria haberlo definido como variables globales, pero quiero mantenerlo muy simple
local tablacaras = {"left","back","right","front"}
-- tabla del numero 8 o lo que es lo mismo todos los cables seleccionado, esto nos servira para limpiar el display, lo mismo, manteniendolo simple
local tabla8 = {"white","orange","pink","yellow","lime","gray","magenta"}
-- Limpiamos la pantalla del ordenador
term.clear()
-- Posicionamos el cursor en la posicion 1,1
term.setCursorPos(1,1)
-- Pequeño spam porque yo lo valgo :-)
print("Bienvenido al reloj 1.0")
print("Creado por ELFCO")
print("canal de youtube www.youtube.com/user/elfco")
write "\'q\' para salir"
-- Bucle principal del programa, os dejo el codigo comentado de como seria sin reloj y palanca al final del código
while true do
-- Recojemos cualquier evento en el SO del ordenador
event, param = os.pullEvent()
-- Si tenemos una señal de redstone
if event == "redstone" then
-- Recojemos el tiempo del SO
gameTime = os.time()
-- Formateamos el tiempo a hh:mm
eTime = formatotiempo(gameTime)
-- mensaje de debug para ver en pantalla la hora generada quitar -- para verlo
--print (eTime)
-- Separamos primer digito de horas, segundo digito de horas, primer digito de minutos y segundo digito de minutos
-- primer digito de horas
hour1 = string.sub(eTime, 1, 1)
-- Lo transformamos a numero ya que no vamos a tratarlo como cadena
eHour1 = tonumber(hour1)
-- Segundo digito de horas
hour2 = string.sub(eTime, 2, 2)
-- Lo transformamos a numero ya que no vamos a tratarlo como cadena
eHour2 = tonumber(hour2)
-- primer digito de minutos
minute1 = string.sub(eTime, 4, 4)
-- Lo transformamos a numero ya que no vamos a tratarlo como cadena
eMinute1 = tonumber(minute1)
-- Segundo digito de minutos
minute2 = string.sub(eTime, 5, 5)
-- Lo transformamos a numero ya que no vamos a tratarlo como cadena
eMinute2 = tonumber(minute2)
-- Dibujamos el primer digito de horas en el digito 4 del display
dibujar(eHour1,4)
-- Dibujamos el segundo digito de horas en el digito 3 del display
dibujar(eHour2,3)
-- Dibujamos el primer digito de minutos en el digito 2 del display
dibujar(eMinute1,2)
-- Dibujamos el segundo digito de minutos en el digito 1 del display
dibujar(eMinute2,1)
elseif event == "char" and param == "q" then
-- Si se ha pulsado q limpiamos el display completo y terminamos el programa
clear()
for j = 1,4 do
for v = 1,7 do
rs.setBundledOutput( tablacaras[j], colors.subtract( rs.getBundledOutput( tablacaras[j] ), colors[tabla8[v]] ) )
end
end
break
end
end
-- Funcion de delay si no quereis q vuestro pc muera en el intento...
--function Delay(sec)
-- os.startTimer(sec)
-- while true do
-- event, param1 = os.pullEvent()
-- if event == "timer" then break end
-- end
--end
--while true do
-- event, param = os.pullEvent()
-- gameTime = os.time()
-- eTime = formatotiempo(gameTime)
-- --print (eTime)
-- hour1 = string.sub(eTime, 1, 1)
-- eHour1 = tonumber(hour1)
-- hour2 = string.sub(eTime, 2, 2)
-- eHour2 = tonumber(hour2)
-- minute1 = string.sub(eTime, 4, 4)
-- eMinute1 = tonumber(minute1)
-- minute2 = string.sub(eTime, 5, 5)
-- eMinute2 = tonumber(minute2)
-- dibujar(eHour1,4)
-- dibujar(eHour2,3)
-- dibujar(eMinute2,1)
-- dibujar(eMinute1,2)
-- Configurar la velocidad de refresco del display en segundos
-- Delay(1)
-- if event == "char" and param == "q" then
-- clear()
-- for j = 1,4 do
-- for v = 1,7 do
-- rs.setBundledOutput( tablacaras[j], colors.subtract( rs.getBundledOutput( tablacaras[j] ), colors[tabla8[v]] ) )
-- end
-- end
-- break
-- end
--end
[twitter]https://twitter.com/#!/elfcor[/twitter]