def __init__(self, saveObject, transmitObject, packetObj): self.__transmit = transmitObject self.__getTTNCData = TTNCData(saveObject) self.__getAttitudeData = AttitudeData(saveObject) self.__heartBeatObj = heart_beat() self.__tasks = [] # List will be populated with all background tasks # self.__safeMode = safeModeObject print("Initialized postBoomDeploy") self.__packet = packetObj
def __init__(self, saveObject, transmitObject, packetObj): self.thresholdVoltage = 3.85 #Threshold voltage to deploy AeroBoom. self.darkVoltage = 0.9 #Average voltage from sunsors that, if below this, indicates GASPACS is in darkness self.lightMinimumMinutes = 1 #Minimum amount of time GASPACS must be on light side of orbit before deploying self.batteryStatusOk = False self.sunlightData = 0 self.__getTTNCData = TTNCData(saveObject) self.__getAttitudeData = AttitudeData(saveObject) self.__tasks = [] #Will be populated with tasks self.__packetProcessing = packetObj self.__transmit = transmitObject self.__heartBeatObj = heart_beat()
def __init__(self, saveObject, transmitObject, cam, packetObj): self.__getTTNCData = TTNCData(saveObject) self.__getAttitudeData = AttitudeData(saveObject) self.__getDeployData = DeployData(saveObject) self.__tasks = [ ] # Empty list will be populated with all background tasks # self.__safeMode = safeModeObject self.__saveObject = saveObject self.__transmit = transmitObject self.__packetProcessing = packet(transmitObject, cam) self.__heartBeatObj = heart_beat() self.__cam = cam self.__packetProcessing = packetObj
def __init__(self, saveObject, transmitObject, packetObj): self.deployVoltage = 3.85 #Threshold voltage to deploy self.maximumWaitTime = 22 * 60 #Maximum time to wait for deployment before going to SAFE self.timeWaited = 0 #Time already waited - zero self.__getTTNCData = getDriverData.TTNCData(saveObject) self.__getAttitudeData = getDriverData.AttitudeData(saveObject) self.__tasks = [ ] #List will be populated with background tasks to cancel them # self.__safeMode = safeModeObject self.__antennaDeployer = BackupAntennaDeployer() self.__antennaDoor = AntennaDoor() self.__transmit = transmitObject self.__packetProcessing = packetObj self.__heartBeatObj = heart_beat()
async def executeFlightLogic( ): # Open the file save object, start TXISR, camera obj, and start Boot Mode data collection baseFile = open("/home/pi/lastBase.txt") codeBase = int(baseFile.read()) cameraObj = Camera() # Variable setup delay = 35 * 60 # 35 minute delay #TODO: set this delay to 35 min antennaVoltageCheckWait = 22 * 60 * 60 # 22 hour wait for the voltage to increase past the threshold. This is arbitrary for now boot = True saveObject = saveTofiles.save() # startTXISR(save) ttncData = getDriverData.TTNCData(saveObject) attitudeData = getDriverData.AttitudeData(saveObject) # safeModeObject = safe.safe(saveObject) transmitObject = Transmitting(codeBase, cameraObj) packet = packetProcessing(transmitObject, cameraObj) heartBeatObj = heart_beat() antennaDoorObj = antennaDoor() print( 'Starting data collection') #Setting up Background tasks for BOOT mode tasks = [] tasks.append(asyncio.create_task( heartBeatObj.heartBeatRun())) # starting heart beat tasks.append( asyncio.create_task(pythonInterrupt.interrupt( transmitObject, packet))) # starting rx monitoring tasks.append(asyncio.create_task( ttncData.collectTTNCData(0))) # Boot Mode is classified as 0 tasks.append(asyncio.create_task( attitudeData.collectAttitudeData())) # collecting attitude data # Initialize all mission mode objects # NOTE: the comms-tx is the only exception to this rule as it is to be handled differently than other mission modes # NOTE: Boot Mode is defined and executed in this document, instead of a separate mission mode # safeModeObject was deleted below in the init parameters after saveObject antennaDeploy = antennaMode(saveObject, transmitObject, packet) preBoomDeploy = preBoomMode(saveObject, transmitObject, packet) postBoomDeploy = postBoomMode(saveObject, transmitObject, packet) boomDeploy = boomMode(saveObject, transmitObject, cameraObj, packet) # Check the boot record if it doesn't exist recreate it if (readData() == (None, None, None)): print('Files are empty') bootCount, antennaDeployed, lastMode = 0, False, 0 # otherwise save the last mission mode else: bootCount, antennaDeployed, lastMode = readData() bootCount += 1 # Increment boot count # save data recordData(bootCount, antennaDeployed, lastMode) if lastMode not in range(0, 7): #Mission Mode invalid lastMode = 0 antennaDeployed = False recordData(bootCount, antennaDeployed, lastMode) # This is the implementation of the BOOT mode logic. if not antennaDeployed: # First, sleep for 35 minutes print('Antenna is undeployed, waiting 35 minutes') await asyncio.sleep(delay) # Sleep for 35 minutes while (transmitObject.isRunning()): await asyncio.sleep(60) #sleep if a transmission is running print("Moving on to check antenna door status") #deploy the antenna, if it fails we will do nothing eps = EPS() voltageCount = 0 try: while True: try: BusVoltage = eps.getBusVoltage() except: #if we fail to check the bus voltage we will set it to the max value plus one BusVoltage = 5.1 + 1 if antennaDeployed == True: break elif (not antennaDeployed) and (BusVoltage > 3.75): antennaDoorObj.deployAntennaMain( ) #wait for the antenna to deploy await asyncio.sleep(300) break elif ((antennaVoltageCheckWait / 10) < voltageCount): antennaDoorObj.deployAntennaMain( ) #wait for the antenna to deploy await asyncio.sleep(300) break else: voltageCount += 1 await asyncio.sleep(10) except: print("____Failed to deploy the antenna_____") # status is set True if all 4 doors are deployed, else it is False try: status = antennaDoorObj.readDoorStatus() except: status = False print("Failed to check antenna door status") if antennaDeployed == True: pass elif status == True: antennaDeployed = True else: antennaDeployed = False recordData(bootCount, antennaDeployed, lastMode) try: # Cancels attitude collection tasks for t in tasks: t.cancel() print('Successfully cancelled BOOT mode background tasks') except asyncio.exceptions.CancelledError: print("Exception thrown cancelling task - This is normal") if not antennaDeployed: await asyncio.gather(antennaDeploy.run()) print('Running Antenna Deployment Mode') antennaDeployed = True print("Antenna Deployed = ", antennaDeployed) recordData(bootCount, antennaDeployed, lastMode) # Save into files elif lastMode == 4: print('Running Post Boom Deploy') lastMode = 4 recordData(bootCount, antennaDeployed, lastMode) # Save into files await asyncio.gather(postBoomDeploy.run()) else: print('Running preBoom Deploy') lastMode = 2 recordData(bootCount, antennaDeployed, lastMode) # Save into files await asyncio.gather(preBoomDeploy.run()) lastMode = 3 recordData(bootCount, antennaDeploy, lastMode) print("Finished running preBoomDeploy") while True: # This loop executes the rest of the flight logic # pre boom deploy print("Entered the loop that chooses the next mission mode.") recordData(bootCount, antennaDeployed, lastMode) # Save into files if ((antennaDeployed == True) and (lastMode != 3) and (lastMode != 4)): print('Running pre-Boom deploy') lastMode = 2 recordData(bootCount, antennaDeployed, lastMode) await asyncio.gather( preBoomDeploy.run() ) # Execute pre-boom deploy, then move to post-boom deploy print("Finished preBoomDeploy") lastMode = 3 recordData(bootCount, antennaDeployed, lastMode) elif ((antennaDeployed == True) and (lastMode == 3)): print('Running Boom Deploy') await asyncio.gather( boomDeploy.run() ) # Execute boom deployment, start post-boom deploy lastMode = 4 recordData(bootCount, antennaDeployed, lastMode) else: # Post-Boom Deploy print('Running post-Boom Deploy') recordData(bootCount, antennaDeployed, lastMode) # Save into files await asyncio.gather(postBoomDeploy.run())
import sys sys.path.append('../') import asyncio from flightLogic.missionModes.heartBeat import heart_beat """ Tests if heartbeat is working """ heartBeatObj = heart_beat() print("Starting receive.") asyncio.run(heartBeatObj.heartBeatRun())