RaspiQRP/main.py

100 lines
2.3 KiB
Python
Raw Normal View History

2022-07-20 17:22:05 +03:00
#!/usr/bin/env python
import pigpio
import time
import datetime
2022-07-20 19:28:27 +03:00
import asyncio
2022-07-20 19:03:17 +01:00
import os
from itertools import cycle
2022-07-29 17:50:32 +01:00
from RPi import GPIO
from time import sleep
from itertools import cycle
from rotary import main_loop as rotary
bands = {
"80m":[3.5, 4],
"40m":[7, 7.3],
"20m":[14, 14.35],
"10m":[28, 29.7],
"2m":[144,146],
"70cm":[430,440]
}
# Setup for encoder
band = cycle(bands)
CURRENT_BAND = None
step = 0.025
clk=17
dt=27
sw=22
GPIO.setmode(GPIO.BCM)
GPIO.setup(clk, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(dt, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(sw, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
counter = 0
clkLastState = GPIO.input(clk)
2022-07-20 19:22:13 +03:00
2022-07-29 17:10:43 +03:00
# 1. Hook up the screen and buttons
# * the screen should show the frequency we're at
# * read the buttons
2022-07-29 17:50:32 +01:00
# 2. Encoder [x]
2022-07-29 17:10:43 +03:00
# * Change frequency in the scope of a given band
PTT_IS_ON:bool = False
FREQUENCY:float = float(430)
modulations = cycle(["./modulations/ssb.sh", "./modulations/fmrds.sh"])
2022-07-20 17:29:35 +03:00
# init GPIO
pi = pigpio.pi()
# button pin
pi.set_mode(10, pigpio.INPUT)
# modulation change pin(change this)
pi.set_mode(11)
2022-07-20 17:02:17 +03:00
2022-07-20 19:03:17 +01:00
async def run_command(*args):
process = await asyncio.create_subprocess_exec(*args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
2022-07-20 19:03:17 +01:00
print("Started: %s, pid=%s" % (args, process.pid), flush=True)
2022-07-25 23:11:33 +03:00
async def button_press(gpio:int, level):
2022-07-25 23:11:33 +03:00
# TODO: light an LED
2022-07-20 19:03:17 +01:00
global PTT_IS_ON
2022-07-25 23:11:33 +03:00
if(pi.read(gpio)!=0):
PTT_IS_ON = True
if(pi.read(gpio)==0):
PTT_IS_ON = False
await asyncio.sleep(.5)
2022-07-20 15:41:07 +01:00
2022-07-29 17:50:32 +01:00
# async def frequency(gpio):
# # TODO write this function after hooking up the encoder
2022-07-29 17:10:43 +03:00
async def main(freq:float):
# TODO change after figuring out the logic
task_created = False
2022-07-29 17:50:32 +01:00
asyncio.create_task(rotary)
print("Ready")
2022-07-20 19:18:34 +03:00
while True:
2022-07-25 23:11:33 +03:00
await button_press(gpio, level)
2022-07-29 17:50:32 +01:00
if (PTT_IS_ON and not task_created):
asyncio.create_task(run_command(MODULATION, str(freq)))
task_created = True
elif (task_created and not PTT_IS_ON):
await asyncio.sleep(1)
asyncio.create_task(run_command("./kill.sh"))
task_created = False
2022-07-20 19:03:17 +01:00
await asyncio.sleep(.5)
2022-07-20 19:28:27 +03:00
2022-07-20 17:29:35 +03:00
if __name__ == "__main__":
try:
asyncio.run(main("", 430))
except KeyboardInterrupt:
print("\n")