Compare commits

...

2 Commits

Author SHA1 Message Date
Jonas Zeunert
484f8f26e7 Update README.md 2024-02-25 21:11:53 +01:00
Jonas Zeunert
60c9b3d1a6 Ref: Remove unecessary files 2024-02-25 19:55:21 +01:00
32 changed files with 51 additions and 1193 deletions

View File

@@ -1 +0,0 @@
input events entprellen über flanken statt zeit

View File

@@ -13,6 +13,8 @@ By default a static library gets build together with a networking target which e
* Boost: program_options thread timer chrono filesystem
* libthread
[^1]: Please note that wiringPi is deprecated and may not work on future releases of raspbian and most probably not on a Raspberry Pi5 and future versions.
### Build
To build the flippr-driver library run the following commands:
```sh1
@@ -34,7 +36,6 @@ We added a script /usr/bin/reset_flippr this can be found in the repo and must b
* `-DBUILD_NETWORKING` Builds the networking target binary. Default: On
* `-DBUILD_CLI` Build a basic TUI to control the flipper by hand. Default: Off
[^1]: Please note that wiringPi is deprecated and might not work on future releases of raspbian and most probably not on a Raspberry Pi5 and future versions.
## Usage
### Configuration
@@ -44,12 +45,58 @@ We added a script /usr/bin/reset_flippr this can be found in the repo and must b
The Readme there contains all necessary information about the specific files.
### Networking
When built with the networking target (default), the driver is accessible via two UNIX Domain Socket through a simple REST API.
When built with the networking target (default), the driver is accessible via two UNIX Domain Socket through a simple HTTP/REST API.
The sockets can be found either in the folder specified through the env variable `XDG_RUNTIME_DIR` or if it is not set in `/tmp`.
The sockets are:
* `S.flippR_driver.in`: All input events that occure on the pinball machine get pushed there.
* `S.flippr_driver.out`: With this socket the driver can be controlled.
An example connector writtin in Python can be found in the TUI [[FlippR_Networking.py|https://gitlab.rhetenor.de/rhetenor/flippr-code/src/branch/master/cli/FlippR_Networking.py]]
An example connector writtin in Python can be found in the TUI [[FlippR_Networking.py|https://gitlab.rhetenor.de/rhetenor/flippr-code/src/branch/master/cli/FlippR_Networking.py]]
In the following subsection the API is described.
#### Output Socket
The following GET commands are understood by the Output Socket:
##### Solenoids
* `/solenoids`: Returns all available solenoids
* `/solenoids/ + name + /trigger`: Triggers the solenoid with the given name
##### Sounds
* `/sounds`: Returns all available sounds
* `/sounds/ + name + /play`: Plays the sound with the given name
##### Lamps
* `/lamps`: Returns all available lamps
* `/lamps/ + name + /activate`: Activates the lamp with the given name
* `/lamps/ + name + /deactivate`: Deactivates the lamp with the given name
* `/lamps/ + name + /status`: Returns the status of the lamp (active/inactive)
##### Displays
* `/displays`: Returns all available displays
* `/displays/ + name + /write_score/ + score`: Writes the given number to the display
* `/displays/ + name + /write_content/ + content`: Writes the given content to the display
##### Flippers
* `/flippers/ + name + /activate`: Activates the flippers (top or bottom)
* `/flippers/ + name + /deactivate`: Deactivates the flippers (top or bottom)
#### Input Socket
The input socket events are character terminated with a 0x02 byte [^2] and contain the JSON events defined in the `Input Matrix Config`:
```
{
"name": string,
"address": number,
"priority": number
}
```
[^2]: This should be 0x03 ETX (End of text)

View File

@@ -1,37 +0,0 @@
#!/usr/bin/python3
from time import sleep
import os
import subprocess
import re
import wiringpi
p = subprocess.Popen(['gpio', 'i2cdetect'],stdout=subprocess.PIPE,)
#cmdout = str(p.communicate())
mcps = list()
p.stdout.readline()
for i in range(1,9):
line = str(p.stdout.readline()).split(' ')[1:]
base_multiplier = 1
for mcp in line:
base_multiplier += 1
if re.search('\d\d', mcp):
base = 64+16*base_multiplier
mcps.append((mcp,base))
wiringpi.wiringPiSetup()
for mcp in mcps:
print("Setting base for MCP: ", mcp[0], " with base: ", mcp[1])
wiringpi.mcp23017Setup(mcp[1], int(mcp[0], 16))
for pin in range(16):
wiringpi.pinMode(mcp[1] + pin, 1)
wiringpi.digitalWrite(mcp[1] + pin, 1)
sleep(0.1)
except_pins = [2, 3]
for i in range(32):
wiringpi.pinMode(i, 1)
wiringpi.digitalWrite(pin, 1)
sleep(0.1)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -1,13 +0,0 @@
#!/bin/bash
#echo "hello world"
cd /home/pi/firmware/flippr-code
OUTPUT="$(git pull)"
if [ "$OUTPUT" != "Already up-to-date." ]; then
echo "repo has updated. compile now..."
cd /home/pi/firmware/flippr-code/FlippR-Driver/build
cmake ..
make
fi
echo "repo on track, nothing to do here..."

View File

@@ -1,174 +0,0 @@
import wiringpi as wp
from time import sleep
i2c_addr = 0x21
base_addr = 81
pins = range(base_addr, base_addr + 16)
pins = [22, 27, 17, 19, 13, 6, 5, 20, 21, 26, 1, 12, 16, 4]
""" has to be inverted
pins_segment_select = [81, 82, 83]"""
pins_segment_select = [83, 82, 81]
pins_segment_select = [22, 27, 17]
""" has to be inverted
pins_digit_select = [84, 85, 86, 87] """
#pins_digit_select = [87, 86, 85, 84]
pins_digit_select = [19, 13, 6, 5]
#pins_display_select = [89, 90, 91, 92, 93]
pins_display_select = [1, 20, 12, 16, 4]
pin_run = 95
pin_run = 21
pin_lt = 88
pin_lt = 26
high = False
low = not high
"""
def init():
wp.mcp23017Setup(base_addr, i2c_addr)
for pin in pins:
wp.pinMode(pin, 1)
init()
"""
def init():
wp.wiringPiSetupGpio()
for pin in pins:
wp.pinMode(pin, 1)
init()
def init_ones():
for pin in pins:
wp.digitalWrite(pin, 1)
def init_zeros():
for pin in pins:
wp.digitalWrite(pin, 0)
def init_high():
for pin in pins:
wp.digitalWrite(pin, high)
def init_low():
for pin in pins:
wp.digitalWrite(pin, low)
def dec2bin_high(dec, digits):
bin_str = format(dec, '#0' + str(digits + 2) + 'b')[2:]
return map(lambda x: high if x == '1' else low, bin_str)
def dec2bin_low(dec, digits):
bin_str = format(dec, '#0' + str(digits + 2) + 'b')[2:]
return map(lambda x: low if x == '1' else high, bin_str)
def toggle_run():
if wp.digitalRead(pin_run) == 0:
#print("enable RUN")
wp.digitalWrite(pin_run, 1)
else:
#print("disable RUN")
wp.digitalWrite(pin_run, 0)
def toggle_lt():
if wp.digitalRead(pin_lt) == 0:
#print("enable LT")
wp.digitalWrite(pin_lt, 1)
else:
#print("disable LT")
wp.digitalWrite(pin_lt, 0)
def check_decimal_for_validity(decimal, lower, upper):
if type(decimal) is not type(1):
print("input not a decimal")
return False
if decimal < lower or decimal > upper:
print("decimal out of range")
return False
return True
def select_segment(decimal):
#if not check_decimal_for_validity(decimal, 0, 7):
# print("input error, no segment selected")
# return
values = dec2bin_high(decimal, 3)
pss = pins_segment_select
wp.digitalWrite(pss[0], values[0])
wp.digitalWrite(pss[1], values[1])
wp.digitalWrite(pss[2], values[2])
def select_digit(decimal):
#if not check_decimal_for_validity(decimal, 0, 9):
# print("input error, no digit selected")
# return
values = dec2bin_low(decimal, 4)
pds = pins_digit_select
wp.digitalWrite(pds[0], values[0])
wp.digitalWrite(pds[1], values[1])
wp.digitalWrite(pds[2], values[2])
wp.digitalWrite(pds[3], values[3])
def select_display(decimal):
#if not check_decimal_for_validity(decimal, 1, 5):
# print("input error, no display selected")
# return
wp.digitalWrite(pins_display_select[int(decimal) - 1], high)
def unselect_display(decimal):
#if not check_decimal_for_validity(decimal, 1, 5):
# print("input error, no display unselected")
# return
wp.digitalWrite(pins_display_select[int(decimal) - 1], low)
def unselect_all_displays():
for pin in pins_display_select:
wp.digitalWrite(pin, low)
def select_all_displays():
for pin in pins_display_select:
wp.digitalWrite(pin, high)
def toggle_display(decimal):
select_display(decimal)
unselect_display(decimal)
def read_pins():
for pin in pins:
print(str(pin) + ' --> ' + str(wp.digitalRead(pin)))
def digit2display(disp, dig):
select_display(disp)
select_digit(dig)
unselect_all_displays()
def num2seg(num, seg):
select_segment(seg)
select_digit(num)
toggle_display(3)
def fancy(number,disp):
num_arr = map(int, list(str(number)))
num_arr = num_arr + [0] * max(0, (8 - len(num_arr)))
if len(num_arr) > 8:
num_arr = num_arr[:8]
print(num_arr)
num_arr = num_arr[-1::-1]
for j in range(5000):
for i in range(8):
select_segment(i)
select_digit(num_arr[i])
toggle_display(disp)
sleep(0.001)
def al(number,s):
num_arr = map(int, list(str(number)))[-1::-1]
for i in range(5000):
for segment in range(8):
for disp in range(2,6):
select_segment(segment)
select_digit(num_arr[segment])
num_arr = num_arr[-1::-1]
toggle_display(disp)
sleep(s)
def ini():
init()
init_low()
toggle_run()

Binary file not shown.

View File

@@ -1,187 +0,0 @@
import wiringpi
import tty
import itertools
import sys
from time import sleep
class Test(object):
def __init__(self, i2c_addr, base):
self.i2c_addr = i2c_addr
self.base = base
self.pins = range(base, base+16)
self.init_component()
def init_component(self):
wiringpi.mcp23017Setup(self.base, self.i2c_addr)
for i in self.pins:
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 1)
print(self.pins)
def write(self, pin, value):
print(str(self.pins[pin]) + " " + str(value))
wiringpi.digitalWrite(self.pins[pin], value)
class Test_Display(Test):
def __init__(self, i2c_addr = 0x21, base = 65 + 16):
super(Test_Display, self).__init__(i2c_addr, base)
self.pin_dic = {'d0' : base, 'd1' : base + 1, 'd2' : base + 2, 'bcd0': base + 3, 'bcd1': base + 4, 'bcd2' : base + 5, 'bcd3' : base + 6, 'bcdLT' : base + 7, 'disp1' : base + 8, 'disp2' : base + 9, 'disp3' : base + 10, 'disp4' : base + 11, 'disp5' : base + 12, 'disp6' : base + 13, 'run' : base + 14}
def write_number(self, number):
print('Writing number: ' + str(number))
wiringpi.digitalWrite(self.pin_dic['bcd0'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd1'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd2'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd3'], bool(number % 2))
def select_digit(self, digit):
print('Selecting 7 segment number: ' + str(digit))
wiringpi.digitalWrite(self.pin_dic['d0'], bool(digit % 2))
digit = digit / 2
wiringpi.digitalWrite(self.pin_dic['d1'], bool(digit % 2))
digit = digit / 2
wiringpi.digitalWrite(self.pin_dic['d2'], bool(digit % 2))
def disp_select(self, number):
print('Selecting Display: ' + str(number))
for i in range(1, 6):
if(i == number):
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 0)
else:
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 1)
#sleep(.1)
def run(self):
wiringpi.digitalWrite(self.pin_dic['run'], 0)
#sleep(.001)
wiringpi.digitalWrite(self.pin_dic['run'], 1)
def toggleLT(self):
sleep(.1)
wiringpi.digitalWrite(self.pin_dic['bcdLT'], 0)
sleep(.1)
wiringpi.digitalWrite(self.pin_dic['bcdLT'], 1)
def clear_disp_select(self):
print("Clearing Display")
for i in range(1, 7):
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 1)
def test_digit1(self):
for i in range(0, 8):
for j in range(0, 10):
self.select_digit(i)
self.clear_disp_select()
self.write_number(j)
self.disp_select(1)
self.run()
def test(self):
for k in range(1, 6):
for i in range(0, 8):
self.select_digit(i)
for j in range(0, 10):
self.write_number(j)
# self.toggleLT()
self.disp_select(k)
self.clear_disp_select()
self.run()
def test123(self):
self.clear_disp_select()
self.select_digit(0)
self.write_number(7)
wiringpi.digitalWrite(self.pin_dic['run'], 0)
self.disp_select(1)
def manual_test(self, display, digit, number):
self.select_digit(digit)
self.write_number(number)
self.disp_select(display)
self.clear_disp_select()
self.run()
def test_digits(self):
tty.setcbreak(sys.stdin.fileno())
self.write_number(3)
for i in range(0,8):
self.select_digit(i)
self.disp_select(0)
self.run()
sleep(.5)
def permutation_test(self):
self.select_digit(3)
self.write_number(0)
functions = [self.disp_select, self.clear_disp_select, self.run, self.toggleLT]
i = 0
for permutation in itertools.permutations(functions, 4):
print(str(i))
for function in permutation:
function(3)
print(permutation)
i = i+1
raw_input()
class Sound_Test(Test):
def __init__(self, i2c_addr = 0x22, base = 65):
super(Sound_Test, self).__init__(i2c_addr, base)
self.pins = [x + base for x in [15, 14, 12, 10, 8, 9, 11, 13]]
def fire(self):
self.write(7, 0)
def stop(self):
self.write(7, 1)
def init_component(self):
super(Sound_Test, self).init_component()
wiringpi.digitalWrite(self.base + 12, 1)
def fire_sound(self, i):
self.write(0, bool(i & 0b00000001))
self.write(1, bool(i & 0b00000010))
self.write(2, bool(i & 0b00000100))
self.write(3, bool(i & 0b00001000))
self.write(4, bool(i & 0b00010000))
self.write(5, bool(i & 0b00100000))
self.write(6, bool(i & 0b01000000))
self.write(7, bool(i & 0b10000000))
self.fire()
a = raw_input()
self.stop()
def rotate(self):
for i in range(22, 78):
self.fire_sound(i)
"""
def init_flipper(self):
init_driver()
init_display()
init_sound()
def init_driver(self):
i2c_driver = 0x20
base_driver = 65
wiringpi.mcp23017Setup(base_driver, i2c_driver)
def init_display(self):
i2c_display= 0x21
base_display = 65 + 16
wiringpi.mcp23017Setup(base_display, i2c_display)
for i in range(base_display, base_display+16):
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 0)
def init_sound(self):
i2c_sound = 0x22
base_sound = 65 + 32
wiringpi.mcp23017Setup(base_sound, i2c_sound)
for i in range(base_sound, base_sound+16):
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 0)
# set fire to 1 (out)
def """

View File

@@ -1,186 +0,0 @@
import wiringpi
import tty
import itertools
import sys
from time import sleep
class Test(object):
def __init__(self, i2c_addr, base):
self.i2c_addr = i2c_addr
self.base = base
self.pins = range(base, base+16)
self.init_component()
def init_component(self):
wiringpi.mcp23017Setup(self.base, self.i2c_addr)
for i in self.pins:
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 1)
print(self.pins)
def write(self, pin, value):
print(self.pins[pin])
wiringpi.digitalWrite(self.pins[pin], value)
class Test_Display(Test):
def __init__(self, i2c_addr = 0x21, base = 65 + 16):
super(Test_Display, self).__init__(i2c_addr, base)
self.pin_dic = {'d0' : base, 'd1' : base + 1, 'd2' : base + 2, 'bcd0': base + 3, 'bcd1': base + 4, 'bcd2' : base + 5, 'bcd3' : base + 6, 'bcdLT' : base + 7, 'disp1' : base + 8, 'disp2' : base + 9, 'disp3' : base + 10, 'disp4' : base + 11, 'disp5' : base + 12, 'disp6' : base + 13, 'run' : base + 14}
def write_number(self, number):
print('Writing number: ' + str(number))
wiringpi.digitalWrite(self.pin_dic['bcd0'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd1'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd2'], bool(number % 2))
number = number / 2
wiringpi.digitalWrite(self.pin_dic['bcd3'], bool(number % 2))
def select_digit(self, digit):
print('Selecting 7 segment number: ' + str(digit))
wiringpi.digitalWrite(self.pin_dic['d0'], bool(digit % 2))
digit = digit / 2
wiringpi.digitalWrite(self.pin_dic['d1'], bool(digit % 2))
digit = digit / 2
wiringpi.digitalWrite(self.pin_dic['d2'], bool(digit % 2))
def disp_select(self, number):
print('Selecting Display: ' + str(number))
for i in range(1, 6):
if(i == number):
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 0)
else:
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 1)
#sleep(.1)
def run(self):
wiringpi.digitalWrite(self.pin_dic['run'], 0)
#sleep(.001)
wiringpi.digitalWrite(self.pin_dic['run'], 1)
def toggleLT(self):
sleep(.1)
wiringpi.digitalWrite(self.pin_dic['bcdLT'], 0)
sleep(.1)
wiringpi.digitalWrite(self.pin_dic['bcdLT'], 1)
def clear_disp_select(self):
print("Clearing Display")
for i in range(1, 7):
wiringpi.digitalWrite(self.pin_dic['disp' + str(i)], 1)
def test_digit1(self):
for i in range(0, 8):
for j in range(0, 10):
self.select_digit(i)
self.clear_disp_select()
self.write_number(j)
self.disp_select(1)
self.run()
def test(self):
for k in range(1, 6):
for i in range(0, 8):
self.select_digit(i)
for j in range(0, 10):
self.write_number(j)
# self.toggleLT()
self.disp_select(k)
self.clear_disp_select()
self.run()
def test123(self):
self.clear_disp_select()
self.select_digit(0)
self.write_number(7)
wiringpi.digitalWrite(self.pin_dic['run'], 0)
self.disp_select(1)
def manual_test(self, display, digit, number):
self.select_digit(digit)
self.write_number(number)
self.disp_select(display)
self.clear_disp_select()
self.run()
def test_digits(self):
tty.setcbreak(sys.stdin.fileno())
self.write_number(3)
for i in range(0,8):
self.select_digit(i)
self.disp_select(0)
self.run()
sleep(.5)
def permutation_test(self):
self.select_digit(3)
self.write_number(0)
functions = [self.disp_select, self.clear_disp_select, self.run, self.toggleLT]
i = 0
for permutation in itertools.permutations(functions, 4):
print(str(i))
for function in permutation:
function(3)
print(permutation)
i = i+1
raw_input()
class Sound_Test(Test):
def __init__(self, i2c_addr = 0x22, base = 65 + 32):
super(Sound_Test, self).__init__(i2c_addr, base)
self.pins = [x + base for x in [15, 14, 12, 10, 8, 9, 11, 13]]
def fire(self):
self.write(7, 0)
def stop(self):
self.write(7, 1)
def init_component(self):
super(Sound_Test, self).init_component()
wiringpi.digitalWrite(self.base + 12, 1)
def rotate(self):
for i in range(22, 78):
self.write(0, i & 0b00000001)
self.write(1, i & 0b00000010)
self.write(2, i & 0b00000100)
self.write(3, i & 0b00001000)
self.write(4, i & 0b00010000)
self.write(5, i & 0b00100000)
self.write(6, i & 0b01000000)
self.write(7, i & 0b10000000)
self.fire()
# sleep(1)
a = raw_input()
self.stop()
"""
def init_flipper(self):
init_driver()
init_display()
init_sound()
def init_driver(self):
i2c_driver = 0x20
base_driver = 65
wiringpi.mcp23017Setup(base_driver, i2c_driver)
def init_display(self):
i2c_display= 0x21
base_display = 65 + 16
wiringpi.mcp23017Setup(base_display, i2c_display)
for i in range(base_display, base_display+16):
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 0)
def init_sound(self):
i2c_sound = 0x22
base_sound = 65 + 32
wiringpi.mcp23017Setup(base_sound, i2c_sound)
for i in range(base_sound, base_sound+16):
wiringpi.pinMode(i,1)
wiringpi.digitalWrite(i, 0)
# set fire to 1 (out)
def """

Binary file not shown.

View File

@@ -1,4 +0,0 @@
import sys
import test
test.s.manual_test(sys.argv[1], sys.argv[2], sys.argv[3])

View File

@@ -1,28 +0,0 @@
#!/bin/bash
gpio export 14 out
gpio export 15 out
gpio export 18 out
gpio export 23 out
gpio export 24 out
gpio export 25 out
gpio export 9 in
# missing driver board
gpio -g write 14 0
gpio -g write 15 0
gpio -g write 18 0
gpio -g write 23 1
gpio -g write 24 1
gpio -g write 25 0
gpio -g write 8 0
gpio -g write 16 0
gpio -g write 20 0
gpio -g write 21 0
gpio -g write 2 0
gpio -g write 3 0
gpio -g write 4 0
gpio -g write 6 0
gpio -g write 13 0
gpio -g write 19 0

View File

@@ -1,53 +0,0 @@
#!/bin/bash
shopt -s expand_aliases
source ./.bash_aliases
mux1 1
mux2 0
for(( i = 0; i < 8; i++))
do
echo "Activating Latch $((i+1))"
let "a = $i % 2"
let "b = $i / 2 % 2"
let "c = $i / 4 % 2"
ma0 $a
ma1 $b
ma2 $c
for(( j = 0; j < 8; j++))
do
echo "Activating Pin $j"
let "d = $j % 2"
let "e = $j / 2 % 2"
let "f = $j / 4 % 2"
fa0 $d
fa1 $e
fa2 $f
sleep $1
done
done
mux1 0
mux2 1
for(( i = 0; i < 5; i++))
do
echo "Activating Latch $((i + 9))"
let "a = $i % 2"
let "b = $i / 2 % 2"
let "c = $i / 4 % 2"
ma0 $a
ma1 $b
ma2 $c
for(( j = 0; j < 8; j++))
do
echo "Activating Pin $j"
let "d = $j % 2"
let "e = $j / 2 % 2"
let "f = $j / 4 % 2"
fa0 $d
fa1 $e
fa2 $f
sleep $1
done
done

View File

@@ -1,27 +0,0 @@
#!/bin/bash
while :
do
for(( i=0; i<5; i++))
do
let "a = $i % 2"
let "b = $i / 2 % 2"
let "c = $i / 4 % 2"
gpio -g write 14 $a
gpio -g write 15 $b
gpio -g write 18 $c
for(( j=0; j<8; j++))
do
let "d = $j % 2"
let "e = $j / 2 % 2"
let "f = $j / 4 % 2"
gpio -g write 23 $d
gpio -g write 24 $e
gpio -g write 25 $f
sleep .01
x=`gpio -g read 8`
if [ "$x" -eq "0" ]; then
echo "Row[$i], Col[$j]"
fi
done
done
done

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,41 +0,0 @@
import wiringpi
from time import sleep
base = 65
i2c = 0x20
timer = .5
wiringpi.wiringPiSetupGpio()
wiringpi.mcp23017Setup(base, i2c)
for i in range(base, base+16):
wiringpi.pinMode(i, 1)
wiringpi.digitalWrite(base+8, 0)
wiringpi.digitalWrite(base+9, 0)
def data(value):
wiringpi.digitalWrite(base+3, value)
def select_mux(mux):
wiringpi.digitalWrite(base+8, not mux)
wiringpi.digitalWrite(base+8 + 1, mux)
def select_latch(A,B,C):
wiringpi.digitalWrite(base + 5, A)
wiringpi.digitalWrite(base + 6, B)
wiringpi.digitalWrite(base + 7, C)
def select_latch_pin(A0,A1,A2):
wiringpi.digitalWrite(base, A0)
wiringpi.digitalWrite(base +1, A1)
wiringpi.digitalWrite(base+2, A2)
def trigger_pin(lA, lB, lC, A0, A1, A2):
select_latch(lA, lB, lC)
select_latch_pin(A0,A1,A2)
data(1)
sleep(timer)
data(0)

Binary file not shown.

View File

@@ -1,27 +0,0 @@
#!/usr/bin/python
import wiringpi
import output_manual as o
from time import sleep
timerInner = .5
def rotate():
for i in range(8):
print("Selecting Latch: " + str(i))
o.select_latch(i & 1, i & 2, i & 4)
for j in range(8):
o.select_latch_pin(j & 1, j & 2, j & 4)
print("Triggering Pin: " + str(j))
o.data(1)
sleep(timerInner)
o.data(0)
print("Selecting MUX1")
o.select_mux(0)
rotate()
print("Selecting MUX2")
o.select_mux(1)
rotate()

View File

@@ -1,156 +0,0 @@
import wiringpi
from time import sleep
base = 65
i2c = 0x20
timer = 0.7
pins = {"A0" : 9,#
"A1" : 8,#
"A2" : 1,#
"D0" : 0,
"RUN" : 7,#
"E1" : 2,#
"E2" : 10,
"E3" : 3,#
"E4" : 11,
"E5" : 4,#
"E6" : 12,
"E7" : 5,
"E8" : 13,
"E9" : 10,#PGIO06 wegen fehlender Porterweiterung
"E10" : 9,#GPIO12 wegen fehlender Porterweiterung
"E11" : 6,#
"E12" : 14,
"E13" : 15 }#
"""
A0 = 3
A1 = 2
A2 = 1
D0 = 17
E13 = 15
RUN = 16
E1 = 5
E2 = 6
E3 = 7
E4 = 8
E5 = 9
E6 = 10
E7 = 11
E8 = 12
E9 = pi
E10 = pi
E11 = 13
E12 = 14
E13 = 15
"""
"""
GPA0 0= 16
GPA1 1= 14
GPA2 2= 12
GPA3 3= 10
GPA4 4= 8
GPA5 5= 6
GPA6 6= 2
GPA7 7= 17
GPB0 8= 1
GPB1 9= 3
GPB2 10= 5
GPB3 11= 7
GPB4 12= 9
GPB5 13= 11
GPB6 14= 13
GPB7 15= 15
"""
for key in pins.keys():
pins[key] += base
pins["E10"] -= base
pins["E9"] -= base
def init():
wiringpi.wiringPiSetupGpio()
wiringpi.mcp23017Setup(base, i2c)
for i in pins.values():
wiringpi.pinMode(i, 1)
wiringpi.digitalWrite(i, 1)
data(0)
wiringpi.digitalWrite(pins["RUN"], 0)
def data(value):
wiringpi.digitalWrite(pins["D0"], value)
def select_latch(latch):
deselect_latches()
wiringpi.digitalWrite(pins["E" + str(latch)], 0)
def deselect_latches():
for i in range(1,14):
wiringpi.digitalWrite(pins["E" + str(i)], 1)
def select_pin(pin):
wiringpi.digitalWrite(pins["A0"], pin & 0b001)
wiringpi.digitalWrite(pins["A1"], pin & 0b010)
wiringpi.digitalWrite(pins["A2"], pin & 0b100)
def trigger_pin(latch, pin, t=timer):
select_latch(latch)
select_pin(pin)
data(1)
sleep(t)
data(0)
def rotate():
for i in range(1, 14):
for j in range(8):
trigger_pin(i, j)
print("activated latch "+str(i)+ "\t pin "+str(j))
def activate_all_lamps():
for latch in range(1,11):
for pin in range(8):
data(1)
select_latch(latch)
select_pin(pin)
sleep(0.03)
def all_lamps():
activate_all_lamps()
def outhole():
trigger_pin(11,0)
def right_kicker():
trigger_pin(12,5)
def right_flap():
trigger_pin(13,5,0.4)
def right_bank():
trigger_pin(13,2,0.4)
def activate_pin(latch, pin):
select_latch(latch)
select_pin(pin)
data(1)
deselect_latches()
def deactivate_pin(latch, pin):
select_latch(latch)
select_pin(pin)
data(0)
deselect_latches()
def activate_flipper():
activate_pin(8, 4)
def activate_top_flipper():
activate_pin(12, 4)
def deactivate_flipper():
deactivate_pin(8, 4)
def deactivate_top_flipper():
deactivate_pin(12, 4)
init()

View File

@@ -1,156 +0,0 @@
import wiringpi
from time import sleep
base = 65
i2c = 0x20
timer = 0.7
pins = {"A0" : 9,#
"A1" : 6,#
"A2" : 8,#
"D0" : 7,
"RUN" : 0,#
"E1" : 10,#
"E2" : 5,
"E3" : 11,#
"E4" : 4,
"E5" : 12,#
"E6" : 3,
"E7" : 13,
"E8" : 2,
"E9" : 9,#PGIO06 wegen fehlender Porterweiterung
"E10" : 10,#GPIO12 wegen fehlender Porterweiterung
"E11" : 14,#
"E12" : 1,
"E13" : 15 }#
"""
A0 = 3
A1 = 2
A2 = 1
D0 = 17
E13 = 15
RUN = 16
E1 = 5
E2 = 6
E3 = 7
E4 = 8
E5 = 9
E6 = 10
E7 = 11
E8 = 12
E9 = pi
E10 = pi
E11 = 13
E12 = 14
E13 = 15
"""
"""
GPA0 0= 16
GPA1 1= 14
GPA2 2= 12
GPA3 3= 10
GPA4 4= 8
GPA5 5= 6
GPA6 6= 2
GPA7 7= 17
GPB0 8= 1
GPB1 9= 3
GPB2 10= 5
GPB3 11= 7
GPB4 12= 9
GPB5 13= 11
GPB6 14= 13
GPB7 15= 15
"""
for key in pins.keys():
pins[key] += base
pins["E9"] -= base
pins["E10"] -= base
def init():
wiringpi.wiringPiSetupGpio()
wiringpi.mcp23017Setup(base, i2c)
for i in pins.values():
wiringpi.pinMode(i, 1)
wiringpi.digitalWrite(i, 1)
data(0)
wiringpi.digitalWrite(pins["RUN"], 0)
def data(value):
wiringpi.digitalWrite(pins["D0"], value)
def select_latch(latch):
deselect_latches()
wiringpi.digitalWrite(pins["E" + str(latch)], 0)
def deselect_latches():
for i in range(1,14):
wiringpi.digitalWrite(pins["E" + str(i)], 1)
def select_pin(pin):
wiringpi.digitalWrite(pins["A0"], pin & 0b001)
wiringpi.digitalWrite(pins["A1"], pin & 0b010)
wiringpi.digitalWrite(pins["A2"], pin & 0b100)
def trigger_pin(latch, pin, t=timer):
select_latch(latch)
select_pin(pin)
data(1)
sleep(t)
data(0)
def rotate():
for i in range(1, 14):
for j in range(8):
trigger_pin(i, j)
print("activated latch "+str(i)+ "\t pin "+str(j))
def activate_all_lamps():
for latch in range(1,11):
for pin in range(8):
data(1)
select_latch(latch)
select_pin(pin)
sleep(0.03)
def all_lamps():
activate_all_lamps()
def outhole():
trigger_pin(11,0)
def right_kicker():
trigger_pin(12,5)
def right_flap():
trigger_pin(13,5,0.4)
def right_bank():
trigger_pin(13,2,0.4)
def activate_pin(latch, pin):
select_latch(latch)
select_pin(pin)
data(1)
deselect_latches()
def deactivate_pin(latch, pin):
select_latch(latch)
select_pin(pin)
data(0)
deselect_latches()
def activate_flipper():
activate_pin(8, 4)
def activate_top_flipper():
activate_pin(12, 4)
def deactivate_flipper():
deactivate_pin(8, 4)
def deactivate_top_flipper():
deactivate_pin(12, 4)
init()

Binary file not shown.

View File

@@ -1,4 +0,0 @@
import initialize as si
s = si.Test_Display()
#s.test()

Binary file not shown.

Binary file not shown.

View File

@@ -1,91 +0,0 @@
#include <stdio.h>
#include <wiringPi.h>
#include <mcp23017.h>
#include <time.h>
const char disp_numbers[] = {89, 90, 91, 92, 93};
const char run = 95;
const char lt = 88;
const char base = 81;
void init(void)
{
wiringPiSetup();
mcp23017Setup(base, 0x21) ;
for(int i = 0; i < 16; i++)
{
pinMode(base + i, OUTPUT);
digitalWrite(base + i, 1);
}
digitalWrite(run, 0);
}
void clear_displays(void)
{
for(int i = 0; i < 5; i++)
{
digitalWrite(disp_numbers[i], 1);
}
}
void select_display(int number)
{
digitalWrite(disp_numbers[number-1], 0);
}
void toggle_display(int number)
{
select_display(number);
clear_displays();
}
void print_pins()
{
for(int i = 0; i < 16; i++)
{
int state = digitalRead(base + i);
printf("PIN %d is %d\n", i, state);
}
}
void select_digit(char number)
{
// MSB to LSB
digitalWrite(84, (number % 2));
number = number / 2;
digitalWrite(85, (number % 2));
number = number / 2;
digitalWrite(86, (number % 2));
number = number / 2;
digitalWrite(87, (number % 2));
}
void select_segment(int number)
{
digitalWrite(81, (number % 2));
number = number / 2;
digitalWrite(82, (number % 2));
number = number / 2;
digitalWrite(83, (number % 2));
}
int main(void)
{
clock_t t;
init();
print_pins();
int numbers[] = {0, 1, 2 ,3 ,4 ,5, 6, 7};
for(int i = 0; i < 50000; i++)
{
for(int j = 0; j < 3; j++)
{
//t = clock();
select_segment(j);
//printf("select_segment %d\n", j);
select_digit(numbers[j]);
//printf("select_digit %d\n", numbers[j]);
toggle_display(3);
//t = clock() - t;
//printf("took %f ms \n" , (((float) t)/CLOCKS_PER_SEC)*1000);
}
//print_pins();
}
}

View File

@@ -1,4 +0,0 @@
import initialize
s = initialize.Sound_Test()
s.rotate()