Используя python 2.7, моя цель состоит в том, чтобы иметь программу, которая запускает два цикла одновременно для управления индикаторами на двух отдельных индикаторах гистограммы (12 сегментов).Светодиоды гистограммы будут отображать уровни O2 и CO2.O2 всегда будет уменьшаться, а CO2 всегда будет увеличиваться.За исключением случаев, когда вы нажимаете кнопку, из-за которой уровни возвращаются к 0 для CO2 и 12 для O2.Есть две кнопки, одна для O2 и одна для CO2.
Я хотел бы запустить многопроцессорность, так как я пробовал многопоточность, и она не супер плавная.Однако, когда я пробую следующую многопроцессорную обработку, я получаю: "Программа все еще работает. Вы хотите ее убить?!" ". Когда я запускаю эквивалент с модулем потоков, он работает (но сноване отлично).
import smbus
import time
import os
from multiprocessing import Process
from Adafruit_LED_Backpack import BicolorBargraph24
import pygame
from pygame.locals import *
o2ledON = [r, r, r, r, y, y, y, y, y, y, y, y, y, y, y, g, g, g, g, g, g, g, g, g]
Co2ledON = [g, g, g, g, g, y, y, y, y, y, y, y, y, y, y, r, r, r, r, r, r, r, r, r]
def increaseCo2():
try:
GPIO.add_event_detect(24, GPIO.FALLING, callback = Co2interrupt, bouncetime=3000)
except KeyboardInterrupt:
GPIO.cleanup()
global co2AlarmSound
global ReplacingCo2Scrubber
global Co2ledON
global Co2Level
global Co2FullKnown
while(True):
if(not ReplacingCo2Scrubber):
if (Co2Level == 23 and Co2FullKnown == False):
print "Your Co2 scrubber is toast! Replace your Co2 cartridge!"
co2AlarmSound.play(loops=3)
#os.system('aplay alarm1.wav &')
Co2FullKnown = True
elif (Co2Level >= 0 and Co2Level <= 23):
try:
Co2display.set_bar(Co2Level, Co2ledON[Co2Level])
Co2display.write_display()
Co2Level += 1
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except:
print "Unexpected error:", sys.exc_info()[0]
time.sleep(9)
def useoxygen():
try:
GPIO.add_event_detect(23, GPIO.FALLING, callback = o2interrupt, bouncetime=3000)
except KeyboardInterrupt:
GPIO.cleanup()
global o2AlarmSound
global RechargingOxygen
global OxygenLevel
global OxygenEmptyKnown
while(True):
if(not RechargingOxygen):
if OxygenLevel == 0 and OxygenEmptyKnown == False:
print "You've run out of Oxygen! Replace your o2 Cartridge!"
o2AlarmSound.play(loops=3)
OxygenEmptyKnown = 1
#os.system('aplay alarm1.wav &')
elif (OxygenLevel >= 0 and OxygenLevel <= 23):
try:
o2display.set_bar(OxygenLevel, b)
o2display.write_display()
OxygenLevel -= 1
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
except:
print "Unexpected error:", sys.exc_info()[0]
time.sleep(8)
#---------------Main Program-----------------------------------
if __name__ == '__main__':
#This puts the oxygen bargraph up to full, which will eventually decrease to 0
for index, colour in enumerate(o2ledON):
o2display.set_bar(index, colour)
o2display.write_display()
time.sleep(.1)
print "o2 level : ",index
o2thread = Process(target=useoxygen)
Co2thread = Process(target=increaseCo2)
Co2thread.start()
o2thread.start()