I created a working Stargate Universe Moc with an EV3.
It is possible to choose how far the Gate spins for each chevron and you can dial adresse with 7-9 chevrons.
Video:
I created a working Stargate Universe Moc with an EV3.
It is possible to choose how far the Gate spins for each chevron and you can dial adresse with 7-9 chevrons.
Video:
Nice… Custom code?
Used Micro-Python(Lego Education Version) for the project
Ah. So, yes.
#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import (Port, Stop, Direction, Button, Color,
SoundFile, ImageFile, Align)
from pybricks.tools import print, wait, StopWatch
from pybricks.robotics import DriveBase
#gears 16,12,140 (teeth count of the gears)
#118°~90° input=>output
#36 Symbols for universe gate
#4*118°/36Symbols ~ 13.1°/Symbol
gate_motor = Motor(Port.A,Direction.CLOCKWISE,[16,12,140])
def spinToSymbol(symbolNumber=4,spin=False):
if spin:
symbolNumber *= -1
gate_motor.run_target(80,symbolNumber * 13.1)
def getButtonInput():
while not any(brick.buttons()):
wait(10)
buttonInput = brick.buttons()
brick.light(Color.YELLOW)
while any(brick.buttons()):
wait(10)
brick.light(None)
return buttonInput[0]
def getSymbols():
symbols = []
symbols.append(9)
def printSymbols():
brick.display.clear()
brick.display.text("Symbols:",(60,50))
for i in(range(len(symbols))):
brick.display.text(str(i+1)+"."+str(symbols[i]))
brick.display.text("Left:-",(0,10))
brick.display.text("Right:+",(0,20))
brick.display.text("Down:Next Symbol",(0,30))
brick.display.text("Center:Dial",(0,40))
i = 0
while True:
printSymbols()
nextInput = getButtonInput()
if nextInput==16: #LEFT
if symbols[i] > 0:
symbols[i] -= 1
elif nextInput==64: #RIGHT
symbols[i] += 1
elif nextInput==4: #DOWN
if symbols[i] > 0:
i += 1
if i >= 9:
return symbols
break
symbols.append(9)
elif nextInput==32: #CENTER
if i >= 6 and symbols[i]>0:
return symbols
break
def dialGate(symbols=[4,4,4,4,4,4,4]):
def printDialingDialog(chevron=3,encoding=False):
if encoding:
chevron -= 1
brick.display.clear()
brick.display.text("Start Dialing Gate:",(8,35))
for i in range(chevron):
brick.display.text(" Chevron "+str(i+1)+" locked")
if encoding:
brick.display.text(" Chevron "+str(chevron+1)+" encoded")
brick.display.text("Start Dialing Gate:",(8,35))
brick.light(None)
spin=True
addressLength=len(symbols)
if addressLength <=9:
for i in(range(addressLength)):
printDialingDialog(i+1,True)
spinToSymbol(symbols[i],spin)
if spin:
spin=False
else:
spin=True
brick.light(Color.RED)
brick.sound.file('chevron2.wav')
wait(200)
printDialingDialog(i+1,False)
wait(400)
brick.light(None)
if addressLength>=7 and addressLength <=9:
brick.sound.file('gate_open.wav')
brick.display.text("Wormhole established")
getButtonInput()
brick.sound.file('gate_close.wav')
else:
brick.display.text("DIALING FAILED!")
symbols=getSymbols()
dialGate(symbols)
I wish i knew python. I only know Java and C#, and only very basic amounts of that.
I don’t get what it’s supposed to be, but good job with the EV3!
Better Video from the Show: