''' Raspberry Nixie Shield - Nixie Clock This example shows how to display time on the nixie tube using Nixie Shield with the Raspberry Pi Nixie Shield uses five digital outputs to drive nixie tube Pin 29 as on/off (EN) line, 31, 33, 35, 37 as an address (A, B, C, D) of nixie tube digit/cathode This example code is in the public domain https://www.nixietester.com ''' import time # Import time module import RPi.GPIO as GPIO # Import RPi.GPIO module as just GPIO GPIO.setmode(GPIO.BOARD) # Declare the type of GPIO numbering system GPIO.setwarnings(False) # Disable warnings # Pin definitions / Nixie tube digit address: EN = 29 # On/Off Nixie tube A = 37 B = 33 C = 31 D = 35 nixieseconds = '0' # Pin assignments: 35, 31, 33, 37 address = [D, C, B, A] # Pattern table for 10 digits digit = [(0, 0, 0, 0), # '0' (0, 0, 0, 1), # '1' (0, 0, 1, 0), # '2' (0, 0, 1, 1), # '3' (0, 1, 0, 0), # '4' (0, 1, 0, 1), # '5' (0, 1, 1, 0), # '6' (0, 1, 1, 1), # '7' (1, 0, 0, 0), # '8' (1, 0, 0, 1)] # '9' #Setup pins as an outputs, initially low GPIO.setup(EN,GPIO.OUT, initial=0) GPIO.setup(address, GPIO.OUT, initial=0) nixie_sleep = 0.001 cathode_max = 11 cathode_min = 0 def cathode(): GPIO.output(EN,GPIO.LOW) # Turn on the Nixie tube GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(address, digit[9]) time.sleep(nixie_sleep) GPIO.output(address, digit[8]) time.sleep(nixie_sleep) GPIO.output(address, digit[7]) time.sleep(nixie_sleep) GPIO.output(address, digit[6]) time.sleep(nixie_sleep) GPIO.output(address, digit[5]) time.sleep(nixie_sleep) GPIO.output(address, digit[4]) time.sleep(nixie_sleep) GPIO.output(address, digit[3]) time.sleep(nixie_sleep) GPIO.output(address, digit[2]) time.sleep(nixie_sleep) GPIO.output(address, digit[1]) time.sleep(nixie_sleep) GPIO.output(address, digit[0]) time.sleep(nixie_sleep) GPIO.output(EN,GPIO.HIGH) # Turn off the Nixie tube while True: # Get current local time nixietime = time.strftime("%I%M") nixieseconds = time.strftime("%-S") #if int(nixietime)>1300: nixietime_int=int(nixietime)-1200 # Display each digit in local time string for d in range(4): # Lookup each digit in time string and output corresponding pattern if not (d==0 and int(nixietime[d])==0): GPIO.output(address, digit[int(nixietime[d])]) GPIO.output(EN,GPIO.LOW) # Turn on the Nixie tube time.sleep(0.300) GPIO.output(EN,GPIO.HIGH) # Turn off the Nixie tube if d == 1: time.sleep(0.250) # Wait longer between displaying hours and minutes else: time.sleep(0.150) time.sleep(1.500) # Wait and repeate GPIO.output(EN,GPIO.HIGH) # Turn off the Nixie tube while int(nixieseconds)>cathode_min and int(nixieseconds)