128 lines
3.7 KiB
Python
Executable File
128 lines
3.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
'''
|
|
|
|
Improved dac.py and talk.py (by Jacob Potter). Pimped by Sam Neurohack.
|
|
|
|
- python3
|
|
- works with nannou visualisers
|
|
- can talk to a given etherdream knowing it's IP.
|
|
|
|
v0.1.0
|
|
|
|
'''
|
|
|
|
#
|
|
# j4cDAC test code
|
|
#
|
|
# Copyright 2011 Jacob Potter
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, version 3.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import dac3 as dac
|
|
import argparse
|
|
import sys
|
|
|
|
argsparser = argparse.ArgumentParser(description="Draw a square on a laser via Etherdream DAC")
|
|
|
|
argsparser.add_argument("-i","--ip",help="Etherdream IP (default : first etherdream broadcast received)",default="True",type=str)
|
|
|
|
|
|
|
|
args = argsparser.parse_args()
|
|
etherIP = args.ip
|
|
|
|
|
|
|
|
class SquarePointStream(object):
|
|
'''
|
|
def produce(self):
|
|
pmax = 15600
|
|
pstep = 100
|
|
cmax = 65535
|
|
while True:
|
|
for x in xrange(-pmax, pmax, pstep):
|
|
yield (x, pmax, cmax, 0, 0, cmax)
|
|
for y in xrange(pmax, -pmax, -pstep):
|
|
yield (pmax, y, 0, cmax, 0, cmax)
|
|
for x in xrange(pmax, -pmax, -pstep):
|
|
yield (x, -pmax, 0, 0, cmax, cmax)
|
|
for y in xrange(-pmax, pmax, pstep):
|
|
yield (-pmax, y, cmax, cmax, cmax, cmax)
|
|
'''
|
|
|
|
def produce(self):
|
|
|
|
pmax = 15600
|
|
pstep = 100
|
|
Cmax = 65535
|
|
|
|
|
|
while True:
|
|
|
|
print("Cmax:",Cmax)
|
|
|
|
for x in range(-pmax, pmax, pstep):
|
|
|
|
yield (x, pmax, Cmax, 0, 0) # pure Red
|
|
#yield (x, pmax, 0, Cmax, 0) # pure Green
|
|
#yield (x, pmax, 0, 0, Cmax) # pure Blue
|
|
#yield (x, pmax, Cmax, Cmax, Cmax) # pure White
|
|
|
|
|
|
for y in range(pmax, -pmax, -pstep):
|
|
|
|
#yield (pmax, y, Cmax, 0, 0) # pure Red
|
|
yield (pmax, y, 0, Cmax, 0) # pure Green
|
|
#yield (pmax, y, 0, 0, Cmax) # pure Blue
|
|
#yield (pmax, y, Cmax, Cmax, Cmax) # pure White
|
|
|
|
for x in range(pmax, -pmax, -pstep):
|
|
#yield (x, -pmax, Cmax, 0, 0) # pure Red
|
|
#yield (x, -pmax, 0, Cmax, 0) # pure Green
|
|
yield (x, -pmax, 0, 0, Cmax) # pure Blue
|
|
#yield (x, -pmax, Cmax, Cmax, Cmax) # pure White
|
|
|
|
|
|
for y in range(-pmax, pmax, pstep):
|
|
#yield (-pmax, y, Cmax, 0, 0) # pure Red
|
|
#yield (-pmax, y,0, Cmax, 0) # pure Green
|
|
#yield (-pmax, y, 0, 0, Cmax) # pure Blue
|
|
yield (-pmax, y, Cmax, Cmax, Cmax) # pure White
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
self.stream = self.produce()
|
|
|
|
def read(self, n):
|
|
return [next(self.stream) for i in range(n)]
|
|
|
|
class NullPointStream(object):
|
|
def read(self, n):
|
|
return [(0, 0, 0, 0, 0)] * n
|
|
|
|
#dac.find_dac()
|
|
if etherIP == "True":
|
|
print("Waiting for the first DAC broadcast...")
|
|
d = dac.DAC(dac.find_first_dac())
|
|
|
|
else:
|
|
print("Using Etherdream :", etherIP)
|
|
d = dac.DAC(etherIP)
|
|
|
|
|
|
print("Sending points...")
|
|
d.play_stream(SquarePointStream())
|