# Dual4BitVerticalBargraph3x.py # # A DEMO DUAL 4 bit slow analogue bargraph generator in colour for STANDARD Python 3.x.x # and Linux... This is a DUAL vertical version of the SINGLE one also given away by myself. # It is written so that anyone can understand how it works. # # (Original copyright, (C)2011, B.Walker, G0LCU.) # # Saved as Dual4BitVerticalBargraph3x.py wherever you like. # # This DEMO goes from safe green, to warning amber, to danger red, with a crirical # error beep above 14 on both the vertical displays... # It is a slow "AT A GLANCE" display for quick assessments, not for accuracy. # # Two system commands are required, "clear" and "setterm", for this to work. # I assume that these are available on all recent and current Linux distros. # The device /dev/audio is used so this must be free also. # # It is useful for quick "AT A GLANCE" readings from say two 8 bit ADCs used as a simple # voltmeters, ammeters, etc... # # To run use the following from inside a Python prompt... # >>> exec(open("/full/path/to/code/Dual4BitVerticalBargraph3x.py").read()) # # This looks like two "LED" style "VU" displays side by side... # Add the required imports for this DEMO. import os import random import time # Just for this DEMO set up variables as global... global count global byteone global bytetwo global blank global greenlines global yellowlines global redlines global waveform global unichar global spacer # Startup variable values here. count=0 byteone=0 bytetwo=0 blank="(C)2011, B.Walker, G0LCU." greenlines=blank yellowlines=blank redlines=blank unichar=chr(0x2588)+chr(0x2588) spacer=" ____ " # This is a squarewave binary for the critical error beep(s). waveform=b"\x00\x00\x00\x00\xff\xff\xff\xff" def main(): # Disable the cursor as it looks much nicer... ;o) os.system("setterm -cursor off") while 1: # Run continuously and use Ctrl-C to STOP! blank="\033[0m " # Generate two byte values as though grabbed from a serial, parallel or USB port. # E.G... The Arduino Diecimila Dev Board as a multiple analogue source. byteone=int(random.random()*256) bytetwo=int(random.random()*256) # Now divide by 16 to simulate a 4 bit values. byteone=int(byteone/16) bytetwo=int(bytetwo/16) # Although this should never occur, don't allow any errors. if byteone>=15: byteone=15 if byteone<=0: byteone=0 if bytetwo>=15: bytetwo=15 if bytetwo<=0: bytetwo=0 # Do a full, clean, clear screen and start looping. os.system("clear"),chr(13)," ",chr(13), print("\033[0mDual Four Bit Level Vertical Analogue Bar Graph Display...") print() print("Original copyright, (C)2011, B.Walker, G0LCU.") print() print(blank+"\033[1;31m15 __ __ ____ __ __ 15") redlines=blank+"\033[1;31m14 __ " if byteone>=15: redlines=redlines+unichar+spacer else: redlines=redlines+" "+spacer if bytetwo>=15: redlines=redlines+unichar+" __ 14" else: redlines=redlines+" __ 14" print(redlines) redlines=blank+"\033[1;31m13 __ " if byteone>=14: redlines=redlines+unichar+spacer else: redlines=redlines+" "+spacer if bytetwo>=14: redlines=redlines+unichar+" __ 13" else: redlines=redlines+" __ 13" print(redlines) yellowlines=blank+"\033[1;33m12 __ " if byteone>=13: yellowlines=yellowlines+unichar+spacer else: yellowlines=yellowlines+" "+spacer if bytetwo>=13: yellowlines=yellowlines+unichar+" __ 12" else: yellowlines=yellowlines+" __ 12" print(yellowlines) yellowlines=blank+"\033[1;33m11 __ " if byteone>=12: yellowlines=yellowlines+unichar+spacer else: yellowlines=yellowlines+" "+spacer if bytetwo>=12: yellowlines=yellowlines+unichar+" __ 11" else: yellowlines=yellowlines+" __ 11" print(yellowlines) yellowlines=blank+"\033[1;33m10 __ " if byteone>=11: yellowlines=yellowlines+unichar+spacer else: yellowlines=yellowlines+" "+spacer if bytetwo>=11: yellowlines=yellowlines+unichar+" __ 10" else: yellowlines=yellowlines+" __ 10" print(yellowlines) greenlines=blank+"\033[1;32m 9 __ " if byteone>=10: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=10: greenlines=greenlines+unichar+" __ 9" else: greenlines=greenlines+" __ 9" print(greenlines) greenlines=blank+"\033[1;32m 8 __ " if byteone>=9: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=9: greenlines=greenlines+unichar+" __ 8" else: greenlines=greenlines+" __ 8" print(greenlines) greenlines=blank+"\033[1;32m 7 __ " if byteone>=8: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=8: greenlines=greenlines+unichar+" __ 7" else: greenlines=greenlines+" __ 7" print(greenlines) greenlines=blank+"\033[1;32m 6 __ " if byteone>=7: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=7: greenlines=greenlines+unichar+" __ 6" else: greenlines=greenlines+" __ 6" print(greenlines) greenlines=blank+"\033[1;32m 5 __ " if byteone>=6: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=6: greenlines=greenlines+unichar+" __ 5" else: greenlines=greenlines+" __ 5" print(greenlines) greenlines=blank+"\033[1;32m 4 __ " if byteone>=5: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=5: greenlines=greenlines+unichar+" __ 4" else: greenlines=greenlines+" __ 4" print(greenlines) greenlines=blank+"\033[1;32m 3 __ " if byteone>=4: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=4: greenlines=greenlines+unichar+" __ 3" else: greenlines=greenlines+" __ 3" print(greenlines) greenlines=blank+"\033[1;32m 2 __ " if byteone>=3: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=3: greenlines=greenlines+unichar+" __ 2" else: greenlines=greenlines+" __ 2" print(greenlines) greenlines=blank+"\033[1;32m 1 __ " if byteone>=2: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+" "+spacer if bytetwo>=2: greenlines=greenlines+unichar+" __ 1" else: greenlines=greenlines+" __ 1" print(greenlines) greenlines=blank+"\033[1;32m 0 __ " if byteone>=1: greenlines=greenlines+unichar+spacer else: greenlines=greenlines+"__"+spacer if bytetwo>=1: greenlines=greenlines+unichar+" __ 0" else: greenlines=greenlines+"__ __ 0" print(greenlines) # Print the two byte values onto the screen... print("\033[1;34mByteone =",byteone,"\b, bytetwo =",bytetwo,"\b... ") # Now reset to the default colours, etc... print("\033[0mPress Ctrl-C to stop...") time.sleep(1) # Use two different beeps for the two displays. # Both are different frequency squarewaves. if byteone==15 or bytetwo==15: # Select an error beep for each display... if byteone==15: waveform=b"\x00\x00\x00\x00\xff\xff\xff\xff" if bytetwo==15: waveform=b"\x00\x00\xff\xff\x00\x00\xff\xff" # Set audio timing to zero, "0". count=0 # Open up the audio device to write to. # This could be /dev/dsp also... audio=open("/dev/audio", "wb") # A "count" value of 1 = 1mS, so 1000 = 1S. while count<=1000: # Send 8 bytes of data to the audio device 1000 times. audio.write(waveform) count=count+1 # Close the audio device access. audio.close() # Enable the cursor again if it ever gets here... ;oO os.system("setterm -cursor on") main() # End of DEMO... # Enjoy finding simple solutions to often very difficult problems...