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 :-)


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]