Commit 1d2370e5 authored by Federico Meloda's avatar Federico Meloda
Browse files

fixed audioinit

parents c4cc304e 3b86770b
Loading
Loading
Loading
Loading

Makefile

0 → 100644
+5 −0
Original line number Diff line number Diff line
servo_control: servo_control.c
	$(CC) -o $@ $^ -lwiringPi -lpthread
	sudo chown root $@
	sudo chmod u+x $@
	sudo chown root $@

ksp_client.py

0 → 100644
+37 −0
Original line number Diff line number Diff line
import krpc
import zmq
import argparse


class ModelRocket:
    socket = None
    realRocket = None 
    topic = "events"
    states = { -1:"abort", 0:"pre_launch",1:"liftoff", 2:"stage_1_separation", 3:"stage_2_separation"}
    stage_map = {0:0,1:1,2:2,3:3}

    def send(self,stage):
        self.socket.send("%d %d" % (self.topic, self.stage_map[stage]))

    def __init__(self,addr="localhost:5556"):
        context = zmq.Context()
        self.socket = context.socket(zmq.PUB)
        self.socket.bind("tcp://%s" % addr)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='')
    parser.add_argument('addr', type=str, default="localhost:5556", nargs="?")
    args = parser.parse_args()

    conn = krpc.connect()
    vessel = conn.space_center.active_vessel
    control = vessel.control
    rocket = ModelRocket(args.addr)

    stage = conn.add_stream(getattr, control, 'current_stage')
    stage.add_callback(rocket.send)
    stage.start()

    while 42:
        pass
+52 −54
Original line number Diff line number Diff line
#!/usr/bin/env python3

from time import sleep
from random import randint
import configparser

import zmq
import sys
import spidev
import ws2812

import OPi.GPIO as GPIO
from neopixel import *
from random import randint

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
def get_color():
    rand = randint(0, 10)
    if rand < 5:
        return (248, 255, 255)
    elif rand == 6:
        return (111, 255, 0)
    elif rand == 7:
        return (234, 255, 0)
    elif rand == 8:
        return (87, 255, 34)
    else:
        return (0, 213, 0)


# Create NeoPixel object with appropriate configuration.
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT)
# Intialize the library (must be called once before other functions).
strip.begin()
def light_flame():
    spi = spidev.SpiDev()
    spi.open(1, 0)

# LED strip configuration:
LED_COUNT   = 16      # Number of LED pixels.
LED_PIN     = 18      # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ = 800000  # LED signal frequency in hertz (usually 800khz)
LED_BRIGHTNESS = 255     # Set to 0 for darkest and 255 for brightest
LED_DMA     = 5       # DMA channel to use for generating signal (try 5)
LED_INVERT  = False   # True to invert the signal (when using NPN transistor level shift)
    while True:
        ws2812.write2812(spi, [get_color() * 4])
        sleep(0.2)

port = "5556"
if len(sys.argv) > 1:
    port = sys.argv[1]
    int(port)

def main():
    config = configparser.ConfigParser({'host': '10.10.10.1', 'port': '5556'})
    config.read('config.cfg')

    port = config['port']
    host = config['host']

    # Socket to talk to server
    context = zmq.Context()
    socket = context.socket(zmq.SUB)

    print("Connecting to coordinator...")
socket.connect(f"tcp://localhost:{port}")
    socket.connect(f"tcp://{host}:{port}")

    topicfilter = "events"
    socket.setsockopt(zmq.SUBSCRIBE, topicfilter)


    while True:
        string = socket.recv()
        topic, messagedata = string.split()
@@ -51,18 +61,6 @@ while True:
        else:
            print("Unhandled message")

def light_flame(): 
    for i in range(0,strip.numPixels(),1):
        rand = randint(0,10)
        if rand<5:
            color = (255, 248, 255)
        else if rand==6:
            color = (255, 111, 0)
        else if rand==7:
            color = (255, 234, 0)
        else if rand==8:
            color = (255, 87, 34)
        else :
            color = (213, 0, 0)
        strip.setPixelColor(i, color)
    strip.show()

if __name__ == "__main__":
    main()
+44 −27
Original line number Diff line number Diff line
#!/usr/bin/env python3

import zmq
import sys
import subprocess
import configparser

import actions

port = "5556"
if len(sys.argv) > 1:
    port = sys.argv[1]
    int(port)
def prime_stages():
    subprocess.Popen('./servo_control', '1', '1')
    subprocess.Popen('./servo_control', '7', '1')


def separate_stage_one():
    subprocess.Popen('./servo_control', '1', '0')


def separate_stage_two():
    subprocess.Popen('./servo_control', '7', '0')


def main():
    config = configparser.ConfigParser({'host': '10.10.10.1', 'port': '5556'})
    config.read('config.cfg')

    port = config['port']
    host = config['host']

    # Socket to talk to server
    context = zmq.Context()
    socket = context.socket(zmq.SUB)

    print("Connecting to coordinator...")
socket.connect(f"tcp://localhost:{port}")
    socket.connect(f"tcp://{host}:{port}")

    topicfilter = "events"
    socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

    prime_stages()

    while True:
        string = socket.recv()
        topic, messagedata = string.split()

    if messagedata == "pre_launch":
        actions.pre_launch()
    elif messagedata == "liftoff":
        actions.liftoff()
    elif messagedata == "stage_1_separation":
        actions.stage_1_separation()
        if messagedata == "stage_1_separation":
            separate_stage_one()
        elif messagedata == "stage_2_separation":
        actions.stage_2_separation()
            separate_stage_two()
        else:
            print("Unhandled message")

        print(topic, messagedata)


if __name__ == "__main__":
    main()

sound.py

0 → 100644
+62 −0
Original line number Diff line number Diff line
#!/usr/bin/env python3

import pygame as pg
from threading import Timer
import zmq
import configparser


# fade out
def endMission():
    pg.mixer.Channel(0).fadeout(5)
    pass


def main():
    config = configparser.ConfigParser({'host': '10.10.10.1', 'port': '5556'})
    config.read('config.cfg')

    port = config['port']
    host = config['host']

    pg.mixer.init()
    pg.init(44100, size=-16, channels=2, buffer=4096)
    pg.mixer.set_num_channels(3)  # default is 8

    # carico i file audio
    lancio = pg.mixer.Sound('sounds/lancio.wav')
    stageOne = pg.mixer.Sound('sounds/stageOne.wav')
    stageTwo = pg.mixer.Sound('sounds/stageTwo.wav')

    # tempo di fine suono dopo secondo modulo
    t = Timer(30.0, endMission)

    # Socket to talk to server
    context = zmq.Context()
    socket = context.socket(zmq.SUB)

    print("Connecting to coordinator...")
    socket.connect(f"tcp://{host}:{port}")

    topicfilter = "events"
    socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

    while True:
        string = socket.recv()
        topic, messagedata = string.split()

        if messagedata == "pre_launch":
            pg.mixer.Channel(0).play(lancio)
        elif messagedata == "stage_1_separation":
            pg.mixer.Channel(1).play(stageOne)
        elif messagedata == "stage_2_separation":
            pg.mixer.Channel(2).play(stageTwo)
            t.start()
        else:
            print("Unhandled message")

        print(topic, messagedata)


if __name__ == "__main__":
    main()