-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path24b LED Binary Counter.py
More file actions
132 lines (102 loc) · 4.12 KB
/
24b LED Binary Counter.py
File metadata and controls
132 lines (102 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# 24b LED Binary Counter Python program example:
# Created by Joseph C. Richardson, GitHub.com
# Note: be mindful while working with
# electronics. There are mistakes that
# cannot be corrected should you ignore
# any basic electronics rules. Electronics
# demands basic math skills and knowledge
# of electronics components alike.
# Items needed are as follows:
# Raspberry Pi 4 = 1
# breadboard = 1 or more depending
# 74HC595 shift register = 3
# LEDs = 24
# 220 ohm resistor = 24
# jumper wire = 45 +2 for the Rasp pi 4 fan
# Note: use two other jumper wires for
# the Raspberry Pi 4 fan, while in use/
# operation.
# 24b Binary Counter Python program example:
# This Raspberry Pi 4 Python program allows
# users to learn all about how binary data
# bits work with three 74HC595 shift registers.
# We will use the breadboard method:
# GPIO.setmode(GPIO.BOARD)
# This method is for the GPIO pinouts
# not the GPIO numbers, such as BCM
# You can also use the Broadcom SOC
# Channel method if you prefer:
# GPIO.setmode(GPIO.BCM)
# This allows GPIO numbers, not GPIO
# pinouts, such as the breadboard
# method illustrates in our Python
# program example.
# import functions:
import RPi.GPIO as GPIO
from time import sleep as wait
GPIO.setmode(GPIO.BOARD) # breadboard method
GPIO.setwarnings(False) # disable setwarnings
# Create variables for the latch, data bit and the clock.
# You can rename all these variables to any names you wish,
# but keep in mind that you must also rename any variables
# in your program as well. Click the Find and Replace command
# on the IDLE menu to make any renaming changes faster to cover
# any variables you want to rename. However, you should stick
# to meaningful names, so other programmers can learn and
# understand what's happening throughout the program's
# execution/run.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Note: Python executes its programs from the top, downward.
# You must place these variables in this correct order as shown.
# These pinout values won't execute right if you don't.
latch=35
data_bit=37
clock=33
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Read numbers easier with the underscore_character.
msb=16_777_215,16_777_216 # most significant bits
lsb=8_388_607,8_388_608 # least significant bits
led_speed=.5 # pause duration
stop_program_message='''
print('Stop program Execution/run:')
print('cleanup/release all GPIO pinouts \
to LOW state.')'''
control_shift=latch,data_bit,clock
for i in control_shift:GPIO.setup(i,GPIO.OUT) # setup desired GPIO pinouts
for i in range(24):
GPIO.output(latch,0)
GPIO.output(data_bit,0) # set all 24 data bits to 0/off
GPIO.output(clock,1)
GPIO.output(latch,1)
GPIO.output(clock,0)
try:
for i in range(msb[0],lsb[0],-1): # reverse for loop and step value -1
bin=f'{i:b}'
for j in range(24):
GPIO.output(latch,0)
GPIO.output(data_bit,int(bin[j])-1) # with 2's complement value -1
GPIO.output(clock,1)
GPIO.output(latch,1)
GPIO.output(clock,0)
wait(led_speed)
for i in range(lsb[1],msb[1]): # forward for loop
bin=f'{i:b}'
for j in range(24):
GPIO.output(latch,0)
GPIO.output(data_bit,int(bin[j])) # without 2's complement
GPIO.output(clock,1)
GPIO.output(latch,1)
GPIO.output(clock,0)
wait(led_speed)
# Note: it is recommended that you setup
# a KeyboardInterrupt handler to force
# the GPIO pins to return to a low state/off.
except KeyboardInterrupt:
exec(stop_program_message) # GPIO notification message
for i in range(24):
GPIO.output(latch,0)
GPIO.output(data_bit,0) # set all 24 data bits to 0/off
GPIO.output(clock,1)
GPIO.output(latch,1)
GPIO.output(clock,0)
GPIO.cleanup() # GPIO.cleanup() sets all GPIO pins to LOW/OFF