Exemplo n.º 1
0
	def __init__(self):
		super(Sensors, self).__init__()
		#create the sensore
		self.anemometer=Anemometer()
		self.hygrometer=Hygrometer()
		self.rain_gauge=RainGauge()
		self.thermometer=Thermometer()
Exemplo n.º 2
0
 def __init__(self):
     self.temperature = 0
     if not boxsettings.FAKE_DATA:
         logging.debug("Not FAKE data")
         self.thermometer = Thermometer()
     else:
         logging.debug("Not using sensors: fake data.")
Exemplo n.º 3
0
class MaxMinThermometer(object):
    """
    a maximum minimum thermometer which encapsulates (i.e. contains) 
    a thermometer and also stores min / max temperature data
    """
    def __init__(self):
        self.thermometer = Thermometer()
        self.min = None
        self.max = None

    def get_measurement(self):
        (temp, when) = self.thermometer.get_measurement()
        self.update_max_min(temp)
        return (temp, when)

    def update_max_min(self, temp):
        if self.min == None or self.min > temp:
            self.min = temp
        if self.max == None or self.max < temp:
            self.max = temp

    def reset_max_min(self):
        self.min = None
        self.max = None

    def close(self):
        self.thermometer.close()
Exemplo n.º 4
0
 def __init__(self, interval=INTERVAL, d_name=DEVICE_NAME):
     os.system('modprobe w1-gpio')
     os.system('modprobe w1-therm')
     self.d_name = d_name
     self.temp_sensor = os.path.join('/sys/bus/w1/devices', self.d_name,
                                     'w1_slave')
     Thermometer.__init__(self, interval)
Exemplo n.º 5
0
def encoding(input, num_bits = 8):
    inputs = []
    th = Thermometer(input.data.min(), input.data.max(), num_bits)

    for i in range(len(input.data)):
        bit_array = bitarray(0)
        row = input.data[i]

        for elem in row:
             bit_array.extend(th.code(elem))

        inputs.append({"class" : input.target[i], "bitarray": bit_array})


    return inputs
Exemplo n.º 6
0
    def config_from_file(self, a_path):
        """
            Configure the Brewer instantiates elements and populates the Tank as described by the selected config file
            :param a_path: path and name of the config file
            :type a_path: String
        """
        print "using path:"+a_path 
	with open(a_path) as f:
            content = f.read()
	f.close()
	print "content"+content
        y = BeautifulSoup(content,"xml")
        self.__name = y.brewer['name']
        self.__receipe=Receipe("Fill me !")
        self.__receipe.config_from_file(y.brewer.receipe.contents[0])
        thermo_tank=Thermometer(y.brewer.tank.equipments.thermometer['name'], y.brewer.tank.equipments.thermometer.path.contents[0])
        if(y.brewer.tank['drivetype']=="BOOLEAN"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, BOOLEAN)
        elif(y.brewer.tank['drivetype']=="PID"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, PID)
        elif(y.brewer.tank['drivetype']=="PREDICTIVE"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, PREDICTIVE)
        elif(y.brewer.tank['drivetype']=="STEP_INERTIA"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, STEP_INERTIA)
        for a_heater in y.find_all('heater'):
            self.__tank.add_heater(Heater(a_heater.get('name'),int(a_heater.get('power')),int(a_heater.get('GPIOpin'))))
        for an_ingredient in y.find_all('ingredient'):
            if(an_ingredient.get('type')=="Grain"):
                self.__tank.add_ingredient(Ingredient(an_ingredient.get('name'),GRAIN,float(an_ingredient.get('quantity'))))
            elif(an_ingredient.get('type')=="Water"):
                self.__tank.add_ingredient(Ingredient(an_ingredient.get('name'),WATER,float(an_ingredient.get('quantity'))))
        self.__outside_thermometer = Thermometer(y.brewer.outsidethermometer['name'],y.brewer.outsidethermometer.path.contents[0])   
        return self.__name
Exemplo n.º 7
0
class GetSendTemp:
    def __init__(self):
        self.temperature = 0
        if not boxsettings.FAKE_DATA:
            logging.debug("Not FAKE data")
            self.thermometer = Thermometer()
        else:
            logging.debug("Not using sensors: fake data.")

    def fake_temperature(self):
        deg_value = random.randint(3, 30)
        deg_value += random.random()
        return deg_value

    def measure_temperature(self):
        if boxsettings.FAKE_DATA:
            self.temperature = self.fake_temperature()
            logging.debug("Fake temperature: %s", self.temperature)
        else:
            try:
                self.temperature = self.thermometer.read_temp()
                logging.info("Temperature was read: %s", str(self.temperature))
            except:
                logging.warning("Error when reading temperature.")

    def send_temperature(self):
        logging.debug('GetSendTemp: send_temperature')
        sender = Sender()
        sender.send_deg(self.temperature)
Exemplo n.º 8
0
    def __init__(self):

        cntr = counter(2)
        meter = FluxMeter(70, 75)
        thermos = {}

        for i in range(2):
            thermo = Thermometer(cntr, meter)
            thermos[thermo.id] = thermo

        self.thermos = thermos
Exemplo n.º 9
0
class Sensors(object):
	"""docstring for Sensors"""
	def __init__(self):
		super(Sensors, self).__init__()
		#create the sensore
		self.anemometer=Anemometer()
		self.hygrometer=Hygrometer()
		self.rain_gauge=RainGauge()
		self.thermometer=Thermometer()


	def getValue(self):
		temp = self.thermometer.getTemperature();
		hum = self.hygrometer.getHumidity()
		wind_dir = self.anemometer.getWindDirection()
		wind_int = self.anemometer.getWindIntensity()
		rain = self.rain_gauge.getRain()
		return temp,hum,wind_dir,wind_int,rain
Exemplo n.º 10
0
def build_page(layout, page):
    layout.clear_widgets()
    links.clear()  # TODO: will prevent iframe functionality to work
    for id, item in page.iteritems():
        if item['type'] == 'button':
            wgt = Button()
        elif item['type'] == 'label':
            wgt = Label()
        elif item['type'] == 'var-label':
            wgt = VariableLabel()
            wgt.set_var(item['variable'])
        elif item['type'] == 'led':
            wgt = Led()
            wgt.set_var(item['variable'])
        elif item['type'] == 'thermometer':
            wgt = Thermometer()
            wgt.set_var(item['variable'])
        elif item['type'] == 'manometer':
            wgt = Manometer()
            wgt.set_var(item['variable'])
        elif item['type'] == 'edit-grid':
            wgt = EditGrid()
            wgt.set_dimenstion(item['rows'], item['cols'])
        wgt.id = id
        if 'text' in item:
            wgt.text = item['text']
        if 'font-size' in item:
            wgt.font_size = item['font-size']
        if 'pos' in item:
            wgt.pos = eval(item['pos'])
        if 'size' in item:
            wgt.size = eval(item['size'])
        if 'pos_hint' in item:
            wgt.pos_hint = item['pos_hint']
        if 'size_hint' in item:
            wgt.size_hint = eval(item['size_hint'])
        if 'link' in item:
            links[wgt.id] = item['link']
            wgt.bind(on_press=navigate)
        if 'click' in item:
            wgt.bind(on_press=eval(item['click']))
        layout.add_widget(wgt)
from datetime import datetime
from thermometer import Thermometer
from program import app
from flask import render_template


thermo = Thermometer()
timenow = str(datetime.today())

@app.route('/')
@app.route('/index')
def index():
    tp = f"{thermo.get_temp():.2f}"
    tm = datetime.today().strftime("%H:%M:%S %m/%d/%Y")
    return render_template('index.html',time=tm,temp=tp)


@app.route('/temp')
def get_temp():
    return f"{thermo.get_temp():.2f}°F"
Exemplo n.º 12
0
 def createWidget(self, parent):
     return Thermometer(parent)
Exemplo n.º 13
0
    def __init__(self, parent, cx, htrs):
        self.cx = cx
        self.htrs = htrs
        title = "Connection %d" % (cx + 1)
        wx.Frame.__init__(self, parent, wx.ID_ANY, title, (-1, -1), (-1, -1),
                          wx.DEFAULT_FRAME_STYLE & ~(wx.CLOSE_BOX))
        self.Bind(wx.EVT_CLOSE, self.onClose)

        sizer = wx.BoxSizer(wx.VERTICAL)

        sizerLeft = wx.BoxSizer(wx.VERTICAL)
        sizerRight = wx.BoxSizer(wx.VERTICAL)

        grid = wx.GridBagSizer()
        bfont = wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL,
                        wx.FONTWEIGHT_BOLD)
        font = wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL,
                       wx.FONTWEIGHT_NORMAL)

        row = 1
        t = wx.StaticText(self, wx.ID_ANY, "Printer:", size=(160, -1))
        t.SetFont(bfont)
        grid.Add(t, (row, 0))

        self.tPrtr = wx.StaticText(self, wx.ID_ANY, "", size=(200, -1))
        self.tPrtr.SetFont(font)
        grid.Add(self.tPrtr, (row, 1))

        t = wx.StaticText(self, wx.ID_ANY, "Port:")
        t.SetFont(bfont)
        grid.Add(t, (row + 1, 0))

        self.tPort = wx.StaticText(self, wx.ID_ANY, "")
        self.tPort.SetFont(font)
        grid.Add(self.tPort, (row + 1, 1))

        t = wx.StaticText(self, wx.ID_ANY, "Status:")
        t.SetFont(bfont)
        grid.Add(t, (row + 2, 0))

        self.tStat = wx.StaticText(self, wx.ID_ANY, "")
        self.tStat.SetFont(font)
        grid.Add(self.tStat, (row + 2, 1))

        sizerLeft.Add(grid)
        sizerLeft.AddSpacer((20, 20))

        self.lFile = wx.StaticText(self, wx.ID_ANY, "")
        self.lFile.SetFont(bfont)
        sizerLeft.Add(self.lFile)

        self.tFile = wx.StaticText(self, wx.ID_ANY, "")
        self.tFile.SetFont(font)
        sizerLeft.Add(self.tFile)

        sizerLeft.AddSpacer((20, 20))

        grid = wx.GridBagSizer()
        row = 0

        self.lStartTime = wx.StaticText(self, wx.ID_ANY, "", size=(160, -1))
        self.lStartTime.SetFont(bfont)
        grid.Add(self.lStartTime, (row, 0))

        self.tStartTime = wx.StaticText(self, wx.ID_ANY, "", size=(200, -1))
        self.tStartTime.SetFont(font)
        grid.Add(self.tStartTime, (row, 1))

        self.lExpDur = wx.StaticText(self, wx.ID_ANY, "")
        self.lExpDur.SetFont(bfont)
        grid.Add(self.lExpDur, (row + 1, 0))

        self.tExpDur = wx.StaticText(self, wx.ID_ANY, "")
        self.tExpDur.SetFont(font)
        grid.Add(self.tExpDur, (row + 1, 1))

        self.lOrigETA = wx.StaticText(self, wx.ID_ANY, "")
        self.lOrigETA.SetFont(bfont)
        grid.Add(self.lOrigETA, (row + 2, 0))

        self.tOrigETA = wx.StaticText(self, wx.ID_ANY, "")
        self.tOrigETA.SetFont(font)
        grid.Add(self.tOrigETA, (row + 2, 1))

        grid.AddSpacer((10, 10), (row + 3, 0))
        row += 4

        self.lElapsed = wx.StaticText(self, wx.ID_ANY, "")
        self.lElapsed.SetFont(bfont)
        grid.Add(self.lElapsed, (row, 0))

        self.tElapsed = wx.StaticText(self, wx.ID_ANY, "")
        self.tElapsed.SetFont(font)
        grid.Add(self.tElapsed, (row, 1))

        self.lRemaining = wx.StaticText(self, wx.ID_ANY, "")
        self.lRemaining.SetFont(bfont)
        grid.Add(self.lRemaining, (row + 1, 0))

        self.tRemaining = wx.StaticText(self, wx.ID_ANY, "")
        self.tRemaining.SetFont(font)
        grid.Add(self.tRemaining, (row + 1, 1))

        self.lNewETA = wx.StaticText(self, wx.ID_ANY, "")
        self.lNewETA.SetFont(bfont)
        grid.Add(self.lNewETA, (row + 2, 0))

        self.tNewETA = wx.StaticText(self, wx.ID_ANY, "")
        self.tNewETA.SetFont(font)
        grid.Add(self.tNewETA, (row + 2, 1))

        grid.AddSpacer((20, 20), (row + 3, 0))
        row += 4

        self.lHeight = wx.StaticText(self, wx.ID_ANY, "")
        self.lHeight.SetFont(bfont)
        grid.Add(self.lHeight, (row, 0))

        self.tHeight = wx.StaticText(self, wx.ID_ANY, "")
        self.tHeight.SetFont(font)
        grid.Add(self.tHeight, (row, 1))

        self.lLayer = wx.StaticText(self, wx.ID_ANY, "")
        self.lLayer.SetFont(bfont)
        grid.Add(self.lLayer, (row + 1, 0))

        self.tLayer = wx.StaticText(self, wx.ID_ANY, "")
        self.tLayer.SetFont(font)
        grid.Add(self.tLayer, (row + 1, 1))

        self.lGCode = wx.StaticText(self, wx.ID_ANY, "G Code")
        self.lGCode.SetFont(bfont)
        grid.Add(self.lGCode, (row + 2, 0))

        self.tGCode = wx.StaticText(self, wx.ID_ANY, "")
        self.tGCode.SetFont(font)
        grid.Add(self.tGCode, (row + 2, 1))

        sizerLeft.Add(grid)

        sizerH = wx.BoxSizer(wx.HORIZONTAL)
        sizerH.AddSpacer((20, 20))
        sizerH.Add(sizerLeft)

        sizerRight.AddSpacer((20, 20))

        self.therm = {}
        self.therm['Bed'] = Thermometer(self, "Print Bed")
        sizerRight.Add(self.therm['Bed'])
        sizerRight.AddSpacer((10, 10))

        k = "temps::connection.%d::temps::temps::HE0" % (self.cx + 1)
        if k in self.htrs:
            self.therm['HE0'] = Thermometer(self, "Hot End 0")
            sizerRight.Add(self.therm['HE0'])
            sizerRight.AddSpacer((10, 10))

        k = "temps::connection.%d::temps::temps::HE1" % (self.cx + 1)
        if k in self.htrs:
            self.therm['HE1'] = Thermometer(self, "Hot End 1")
            sizerRight.Add(self.therm['HE1'])
            sizerRight.AddSpacer((10, 10))

        sizerRight.AddSpacer((10, 10))

        sizerH.Add(sizerRight, 1, wx.EXPAND)
        sizerH.AddSpacer((20, 20))

        sizer.Add(sizerH)

        self.SetSizer(sizer)
        self.Layout()
        self.Fit()
Exemplo n.º 14
0
class Brewer:
    """
        A brewer uses the thermometers and heaters in order to follow the receipe. Each brewer has a single tank who knows its own composition in order to perform kick-ass calculations'
    """

    def __init__(self):
        """
            Constructor
        """
        self.__name = None
        self.__outside_thermometer = None
        self.__tank = None
        self.__receipe = None
        self.__brewing_started = False

    def config_from_file(self, a_path):
        """
            Configure the Brewer instantiates elements and populates the Tank as described by the selected config file
            :param a_path: path and name of the config file
            :type a_path: String
        """
        print "using path:"+a_path 
	with open(a_path) as f:
            content = f.read()
	f.close()
	print "content"+content
        y = BeautifulSoup(content,"xml")
        self.__name = y.brewer['name']
        self.__receipe=Receipe("Fill me !")
        self.__receipe.config_from_file(y.brewer.receipe.contents[0])
        thermo_tank=Thermometer(y.brewer.tank.equipments.thermometer['name'], y.brewer.tank.equipments.thermometer.path.contents[0])
        if(y.brewer.tank['drivetype']=="BOOLEAN"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, BOOLEAN)
        elif(y.brewer.tank['drivetype']=="PID"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, PID)
        elif(y.brewer.tank['drivetype']=="PREDICTIVE"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, PREDICTIVE)
        elif(y.brewer.tank['drivetype']=="STEP_INERTIA"):
            self.__tank=Tank(y.brewer.tank['name'],int(y.brewer.tank['diameter']),thermo_tank, STEP_INERTIA)
        for a_heater in y.find_all('heater'):
            self.__tank.add_heater(Heater(a_heater.get('name'),int(a_heater.get('power')),int(a_heater.get('GPIOpin'))))
        for an_ingredient in y.find_all('ingredient'):
            if(an_ingredient.get('type')=="Grain"):
                self.__tank.add_ingredient(Ingredient(an_ingredient.get('name'),GRAIN,float(an_ingredient.get('quantity'))))
            elif(an_ingredient.get('type')=="Water"):
                self.__tank.add_ingredient(Ingredient(an_ingredient.get('name'),WATER,float(an_ingredient.get('quantity'))))
        self.__outside_thermometer = Thermometer(y.brewer.outsidethermometer['name'],y.brewer.outsidethermometer.path.contents[0])   
        return self.__name
      

    def get_name(self):
        """
            Returns the name of the Brewer
            
            :return: Name of the Brewer
            :rtype: Sting
        """
        return self.__name


    def print_self(self):
        """
            Returns the Brewer as a human readable String ended with a new line
            
            :return: A String detailling the caracteristics of the Brewer
            :rtype: String
        """
        to_print="Name : "+self.__name
        to_print+="Outside thermometer : "+self.__outside_thermometer.print_self()
        to_print+="Tank : "+self.__tank.print_self()
        to_print+="Receipe : "+self.__receipe.print_self()+"\n"
        return to_print


    def init_brewing(self):
        """
            Checks that everything is ready for brewing and starts the receipe
            
            :return: A Boolean True = started OK, False for any anomaly
            :rtype: Boolean
        """
        if(self.__name == None or self.__tank == None or self.__receipe == None or self.__brewing_started == True):return False
        self.__brewing_started = True
        self.__receipe.start(self.__tank.get_current_temperature())
        print "***************************************************"
        print "Updated receipe "+self.__receipe.print_self()
        return True


    def log_temperatures(self,a_file):
        """
            This function logs in the desired output file the temperature state of the system.
            :param a_file: path and name of the file where all temperature will be reccorded
            :type a_file: String
        """
	f=open(a_file, "a")
	try:
	    f.write(str(datetime.datetime.now().strftime('%H:%M:%S'))+"\t"+unicodedata.normalize('NFKD',self.__receipe.get_current_step().get_name()).encode('ascii','ignore')+"\t"+str(self.__receipe.get_current_temperature_instruction())+"\t"+str(self.__tank.get_current_temperature())+"\t"+str(self.__tank.get_heating_status())+"\n")
	except:
            print "Unexpected log write error"
        f.close()


    def brew(self,a_outputfile):
        """
            This function is the main brewing function : ajusting the temperature according to the receipe. Function to be called regularily (every 5 seconds for instance).
            :param a_outputfile: path and name of the file where all temperature will be reccorded
            :type a_outputfile: String
        """
        while 1==1 :
            self.__receipe.update_step()
            if(self.__receipe.get_current_step().get_type()==TRANSITION):
				if(self.__tank.get_current_temperature()>=self.__receipe.get_next_temperature_instruction()): #Only works as long as transitions go from lower to higher temperatures...
					self.__receipe.transition_complete()
            if(self.__receipe.get_current_step()==None):
                print "Receipe completed"
                return True
            #self.__tank.temperature_hysteresis_drive(self.__receipe.get_current_temperature_instruction())
            #self.__tank.temperature_inertia_drive(self.__receipe.get_current_temperature_instruction(), self.__receipe.get_next_temperature_instruction())
            #self.__tank.temperature_model_drive(self.__receipe.get_current_temperature_instruction(), self.__receipe.get_next_temperature_instruction(),self.__outside_thermometer.read_temperature())
            self.__tank.temperature_step_inertia_drive(self.__receipe.get_current_temperature_instruction(), self.__receipe.get_next_temperature_instruction(),self.__receipe.get_current_step().get_inertia())
            print "Current step : "+self.__receipe.get_current_step().print_self()
            print "Temperature instuction : "+str(self.__receipe.get_current_temperature_instruction())
            print "Next Temperature instuction : "+str(self.__receipe.get_next_temperature_instruction())
            print "Current temperature : "+str(self.__tank.get_current_temperature())
            self.log_temperatures(a_outputfile)
            print 'Type "N" if you want to skip the current step',
            rlist, _, _ = select([sys.stdin], [], [], UPDATE_PERIOD)
            if rlist:
                s = sys.stdin.readline()
                if(s == "N\n"):
                    print "Skip order received"
                    self.__receipe.user_force_next_step()
            else:
                print "No input. Moving on..."
Exemplo n.º 15
0
 def __init__(self, interval=INTERVAL):
     Thermometer.__init__(self, interval)
Exemplo n.º 16
0
# encoding: utf-8
from thermometer import Thermometer
from resmeasure import ResMeasure
import socket

ip_port = ("192.168.0.150", 50052)
client = socket.socket()
client.connect(ip_port)

while True:
    cont = client.recv(1024).decode()  ##python 3.5 转型
    # w= 0.01
    c = float(cont) / 100
    r = ResMeasure().get_res(c)
    t = Thermometer().read(r)
    # print('当前电阻是:','%.2f' % r,'Ω')
    print('当前温度是:', '%.2f' % t, '℃')
client.close()
Exemplo n.º 17
0
 def __init__(self):
     self.thermometer = Thermometer()
     self.min = None
     self.max = None
Exemplo n.º 18
0
class Trainer(object):

    def __init__(self):

        ###############
        # load config #
        ###############
        with open('trainer_config.yaml') as f:
            CONFIG = yaml.load(f)
        self.exp_type = CONFIG['experiment-type']
        self.playback_bool = CONFIG['playback-enabled']
        self.subj_id = CONFIG['subject-id']
        self.subj_dir = 'datasets/' + self.subj_id
        if self.exp_type == 'timed':
            fu.write_all_headers_timed(self)
        elif self.exp_type == 'block':
            fu.write_all_headers_block(self)

        #################
        # set constants #
        #################
        self.FRAME_RATE = 30
        self.SCREEN_WIDTH, self.SCREEN_HEIGHT = 1024, 768
        self.BG_COLOR_REG = 70,70,70
        self.BG_COLOR_REG_2 = 110,110,110
        self.BG_COLOR_REG_3 = 40,40,40
        self.SUCCESS_COLOR = 70,170,70
        self.INDICATOR_COLOR = 40,60,40
        self.INDICATOR_COLOR_2 = 30,100,30
        self.GOOD_MSG_COLOR = 160,255,160
        self.BAD_MSG_COLOR = 255,160,160
        self.A_MSG_COLOR = 160,160,255
        self.B_MSG_COLOR = 230,230,160
        self.SENSOR_INPUT_OFFSET = np.array([0.5*self.SCREEN_WIDTH,
                                             0.5*self.SCREEN_HEIGHT])
        self.NEWTONS_2_PIXEL = 200
        self.BLOCK_TIME = CONFIG['block-length']
        self.RESET_HOLD_TIME = 0.5
        self.REACH_SUCCESS_TIME = 2.
        self.NOISE_VAR_GOOD = 0.025
        if not self.playback_bool:
            self.NOISE_VAR_BAD = 10*self.NOISE_VAR_GOOD
        else:
            self.NOISE_VAR_BAD = self.NOISE_VAR_GOOD
        self.SAMPLE_PERIOD = 2.
        self.SAMPLE_FRAMES = self.SAMPLE_PERIOD*self.FRAME_RATE
        self.TRS_SHOW_UPDATE_RATE = 2
        self.TR_LIST = (0.125, .25, 0.5, 1., 2., 4.)
        self.TRS_SAMPLES_DICT = dict((tr, tr/self.SAMPLE_PERIOD)
                                     for tr in self.TR_LIST)
        self.TRS_SUCCESS_DICT = dict((tr, self.REACH_SUCCESS_TIME/tr)
                                     for tr in self.TR_LIST)
        self.BUFFER_DIST = 0.075*self.SCREEN_HEIGHT
        self.START_DIST = self.BUFFER_DIST
        self.GAME_ORIGIN = (0.5*self.SCREEN_WIDTH-0.5*self.SCREEN_HEIGHT,
                            self.SCREEN_HEIGHT)
        self.START_COORDS = np.array([self.GAME_ORIGIN[0]+self.BUFFER_DIST,
                                      self.GAME_ORIGIN[1]-self.BUFFER_DIST])
        self.TARGET_DIST = (0.3*self.SCREEN_HEIGHT,
                            0.8*self.SCREEN_HEIGHT)
        self.ERROR_CUTOFF = self.TARGET_DIST[0] - self.START_DIST
        self.MIN_ERROR_METRIC = 0.1
        self.SS_ERROR_METRIC = 0.9
        self.MIN_SUCCESS_SCORE = 0.7
        self.TARGET_RAD = (self.ERROR_CUTOFF*
                           (1-(self.MIN_SUCCESS_SCORE-self.MIN_ERROR_METRIC)
                            /(self.SS_ERROR_METRIC-self.MIN_ERROR_METRIC)))
        if SENSOR_ACTIVE:
            self.daq = Pydaq('Dev1/ai0:1', self.FRAME_RATE)
        self.VISIBLE_TRIALS = CONFIG['visible-trials']
        self.INVISIBLE_TRIALS = CONFIG['invisible-trials']
        self.NUM_TRIALS = self.VISIBLE_TRIALS
        self.TRIAL_TYPES = 8

        ####################################################
        # start pygame and initialize default game objects #
        ####################################################
        pygame.init()
        pygame.mouse.set_visible(not pygame.mouse.set_visible)
        self.clock = pygame.time.Clock()
        if CONFIG['fullscreen']:
            self.screen = pygame.display.set_mode(
                            (self.SCREEN_WIDTH, self.SCREEN_HEIGHT),
                             pygame.FULLSCREEN)
        else:
            self.screen = pygame.display.set_mode(
                            (self.SCREEN_WIDTH, self.SCREEN_HEIGHT))

        ##################################
        # initialize custom game objects #
        ##################################
        self.cursor = Cursor(self.screen)


        self.target = Target(self.screen,
                             self.FRAME_RATE,
                             self.TARGET_RAD,
                             self.ERROR_CUTOFF,
                             self.MIN_ERROR_METRIC,
                             self.SS_ERROR_METRIC,
                             self.MIN_SUCCESS_SCORE,
                             self.START_COORDS,
                             self.TARGET_DIST)

        self.therm = Thermometer(self.screen,
                                 self.MIN_ERROR_METRIC,
                                 self.MIN_SUCCESS_SCORE,
                                 self.SS_ERROR_METRIC)

        self.INDIC_RAD_MAX = self.START_DIST-self.cursor.RAD-2
        self.target.target_lims = self.TARGET_DIST
        self.timers = {}
        self.init_timers()
        self.set_tr(2.)
        self.trial_count = 0
        self.trial_type_count = 1
        self.next_dof = 1
        self.set_dof(self.next_dof)
        self.next_ir = 'impulse'
        self.next_visible = True
        self.set_trial()

        ######################
        # set game variables #
        ######################
        self.screen_mid = np.array([0.5*self.screen.get_width(),
                                    0.5*self.screen.get_height()])
        self.bg_color = self.BG_COLOR_REG
        self.bg_color_alt = self.BG_COLOR_REG_2
        self.bg_color_alt_2 = self.BG_COLOR_REG_3
        self.indicator_color = self.INDICATOR_COLOR
        self.indicator_rad = 0*self.START_DIST
        self.success_color = self.SUCCESS_COLOR
        self.input_mode = 'mouse'
        self.input_pos = np.array([0.0,0.0])
        self.training_mode = True

        #######################
        # set block variables #
        #######################
        self.NUM_BLOCK_TRIALS = CONFIG['num-block-trials'] 
        self.next_target = 'new'
        self.first_feedback = CONFIG['first-trial-feedback'] 
        self.first_noise = CONFIG['first-trial-noise']
        self.next_feedback = self.first_feedback
        self.next_noise = self.first_noise
        self.set_noise()
        self.BLOCK_TRS = self.BLOCK_TIME/self.tr
        self.block_nfb_buffer = np.zeros(self.BLOCK_TRS)
        self.block_tr_count = 0
        self.total_block_count = 0
        self.trial_block_count = 0

        ##########################
        # set playback variables #
        ##########################
        self.TIME_SHIFT = 6
        self.PLAYBACK_TRS = self.BLOCK_TRS + self.TIME_SHIFT/self.tr
        self.EXTRA_TRS = 2
        self.playback_buffer_length = (self.BLOCK_TIME
                                       + self.EXTRA_TRS)*self.FRAME_RATE
        self.move_counter = 0
        self.reset_playback_buffers()

    def reset_playback_buffers(self):
        self.playback_counter = 0
        self.playback_time_buffer = np.zeros(self.playback_buffer_length)
        self.playback_pos_buffer = np.zeros((2,self.playback_buffer_length))
        self.playback_nfb_buffer = np.zeros(self.playback_buffer_length)
        self.playback_nfb_points = np.zeros(self.PLAYBACK_TRS)


    def get_pos(self):
        if self.input_mode=='mouse' or not(SENSOR_ACTIVE):
            return pygame.mouse.get_pos()
        else:
            f_out = self.daq.get_force()
            return (self.SENSOR_INPUT_OFFSET[0]+self.NEWTONS_2_PIXEL*f_out[0], 
                    self.SENSOR_INPUT_OFFSET[1]+self.NEWTONS_2_PIXEL*f_out[1])


    def set_trial(self):
        self.set_dof(self.next_dof)
        self.target.set_fb_mode(self.next_ir)
        self.set_training_mode(self.next_visible)


    def set_noise(self):
        if self.next_noise == 'good':
            self.noise_var = self.NOISE_VAR_GOOD
        elif self.next_noise == 'bad':
            self.noise_var = self.NOISE_VAR_BAD


    def set_training_mode(self, bool_arg):
        self.training_mode = bool_arg


    def set_tr(self, tr):
        if tr == 0.125:
            self.tr = 0.125
            self.timers['tr'] = self.timers['tr_8hz']
        elif tr == 0.25:
            self.tr = 0.25
            self.timers['tr'] = self.timers['tr_4hz']
        elif tr == 0.5:
            self.tr = 0.5
            self.timers['tr'] = self.timers['tr_2hz']
        elif tr == 1:
            self.tr = 1.
            self.timers['tr'] = self.timers['tr_1hz']
        elif tr == 2:
            self.tr = 2.
            self.timers['tr'] = self.timers['tr_p5hz']
        elif tr == 4:
            self.tr = 4.
            self.timers['tr'] = self.timers['tr_p25hz']


    def init_timers(self):
        self.timers['signal'] = Timer(self.SAMPLE_PERIOD)
        self.timers['tr_8hz'] = Timer(self.TR_LIST[0])
        self.timers['tr_4hz'] = Timer(self.TR_LIST[1])
        self.timers['tr_2hz'] = Timer(self.TR_LIST[2])
        self.timers['tr_1hz'] = Timer(self.TR_LIST[3])
        self.timers['tr_p5hz'] = Timer(self.TR_LIST[4])
        self.timers['tr_p25hz'] = Timer(self.TR_LIST[5])
        self.timers['tr'] = self.timers['tr_2hz']
        self.timers['reach'] = Timer(0)
        self.timers['reach_hold'] = Timer(self.REACH_SUCCESS_TIME)
        self.timers['block'] = Timer(self.BLOCK_TIME)
        self.timers['reset_hold'] = Timer(self.RESET_HOLD_TIME)


    def reset_all_timers(self):
        for k,t in self.timers.iteritems():
            t.reset()


    def check_input(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    self.quit()
                elif event.key == pygame.K_0:
                    self.daq.set_volts_zero()
                elif event.key == pygame.K_f:
                    if self.dof == 1:
                        self.set_dof(2)
                    elif self.dof == 2:
                        self.set_dof(1)
                elif event.key == pygame.K_b:
                    self.target.set_new_target()
                elif event.key == pygame.K_v:
                    self.training_mode = not(self.training_mode)
                elif event.key == pygame.K_c:
                    self.target.set_fb_mode('hrf')
                elif event.key == pygame.K_x:
                    self.target.set_fb_mode('impulse')
                elif event.key == pygame.K_m:
                    if self.input_mode == 'mouse':
                        self.input_mode = 'sensor'
                    elif self.input_mode == 'sensor':
                        self.input_mode = 'mouse'

    def run_timed(self):
        ###########################################
        # main loop for time-to-target experiment #
        ###########################################
        while True:
            time_passed = self.clock.tick_busy_loop(self.FRAME_RATE)
            self.check_input()
            self.input_pos = self.get_pos()
            self.cursor.update(self.input_pos)
            self.target.update(self.cursor.pos)


            if not(self.timers['reset_hold'].time_limit_hit):
                gr.check_in_start(self, time_passed)
                self.target.draw_bool = True
            elif not(self.cursor.has_left):
                gr.check_if_left(self)
                self.target.draw_bool = False
            elif self.training_mode:
                self.target.draw_bool = True
            else:
                self.target.draw_bool = False

            if self.cursor.has_left:
                gr.frame_based_updates_timed(self)
                self.timers['signal'].update(time_passed)
                self.timers['tr'].update(time_passed)
                if self.timers['signal'].time_limit_hit:
                    gr.signal_based_updates(self)
                    if self.timers['tr'].time_limit_hit:
                        gr.tr_based_updates(self)

            self.draw_background()
            self.therm.draw(self.cursor.has_left,
                            self.target.error_metric)
            self.target.draw()
            if (self.trial_count == 0
                    and not self.cursor.has_left):
                self.draw_instructions_timed()
            self.cursor.draw()
            pygame.display.flip()

    def run_block(self):
        ###########################################
        # main loop for block feedback experiment #
        ###########################################
        self.target.draw_bool = False 
        if self.playback_bool:
            self.set_dof(2)
        else:
            self.set_dof(1)
        self.target.set_fb_mode('hrf')

        while True:
            time_passed = self.clock.tick_busy_loop(self.FRAME_RATE)
            self.check_input()
            self.input_pos = self.get_pos()
            self.cursor.update(self.input_pos)
            self.target.update(self.cursor.pos)


            if not(self.timers['reset_hold'].time_limit_hit):
                gr.check_in_start(self, time_passed)
                if self.next_target == 'new':
                    self.target.draw_bool = True
            elif not(self.cursor.has_left):
                gr.check_if_left(self)
                self.target.draw_bool = False
            # debugging
            # self.target.draw_bool = True

            if self.cursor.has_left:
                gr.frame_based_updates_block(self)
                self.timers['signal'].update(time_passed)
                self.timers['tr'].update(time_passed)
                self.timers['block'].update(time_passed)
                if self.timers['signal'].time_limit_hit:
                    gr.signal_based_updates(self)
                    if self.timers['tr'].time_limit_hit:
                        gr.tr_based_updates(self)
                        if self.timers['block'].time_limit_hit:
                            gr.block_based_updates(self)

            self.draw_background()
            therm_draw_bool = ((self.cursor.has_left and
                                self.next_feedback == 'continuous')
                               or (self.total_block_count > 0 
                                   and not self.cursor.has_left))
            score = self.target.error_metric
            self.therm.draw(therm_draw_bool,
                            score)
            self.target.draw()
            if not self.cursor.has_left:
                self.draw_instructions_block()
            else:
                self.therm.set_score_color('norm')
            self.cursor.draw()
            pygame.display.flip()

    def run_playback(self):
        while self.move_counter > 0:
            time_passed = self.clock.tick_busy_loop(self.FRAME_RATE)
            self.check_input()
            self.cursor.update(self.playback_pos_buffer[:,
                                                        self.playback_counter])
            self.indicator_rad = int(self.INDIC_RAD_MAX*(
                                     self.playback_time_buffer[self.playback_counter]
                                     /float(self.timers['block'].MAX_TIME)))
            self.draw_background()
            self.therm.draw(True,
                            self.playback_nfb_buffer[self.playback_counter])
            # debugging
            # self.target.draw()
            self.cursor.draw()
            pygame.display.flip()
            self.move_counter -= 1
            self.playback_counter += 1

    def set_dof(self, dof):
        self.dof = dof
        self.cursor.set_dof(dof)
        self.target.set_dof(dof)

    def draw_background(self):
        self.screen.fill(self.bg_color_alt_2)
        gr.cap_indicator_rad(self)
        self.draw_play_area()
        if self.indicator_rad > 0:
            self.draw_indicator()

    def draw_instructions_block(self):
        if self.next_target == 'new':
            top_msg = 'New target'
            top_color = self.GOOD_MSG_COLOR
        else:
            top_msg = 'Same target'
            top_color = self.BAD_MSG_COLOR

        if self.next_feedback == 'continuous':
            mid_msg = 'Continuous feedback'
            mid_color = self.A_MSG_COLOR
        else:
            mid_msg = 'Intermittent feedback'
            mid_color = self.B_MSG_COLOR

        if self.next_noise == 'good':
            btm_msg = 'Good signal'
            btm_color = self.A_MSG_COLOR
        else:
            btm_msg = 'Bad signal'
            btm_color = self.B_MSG_COLOR

        gg.draw_msg(self.screen, top_msg,
                    color=top_color,
                    center=(self.screen_mid[0],
                            self.screen_mid[1]-75))
        gg.draw_msg(self.screen, mid_msg,
                    color=mid_color,
                    center=(self.screen_mid[0],
                            self.screen_mid[1]))
        if not self.playback_bool:
            gg.draw_msg(self.screen, btm_msg,
                        color=btm_color,
                        center=(self.screen_mid[0],
                                self.screen_mid[1]+75))

    def draw_instructions_timed(self):
        if self.next_visible:
            top_msg = 'Target visible'
            top_color = self.GOOD_MSG_COLOR
        else:
            top_msg = 'Target invisible'
            top_color = self.BAD_MSG_COLOR
        if self.next_ir == 'impulse':
            btm_msg = 'Instant feedback'
            btm_color = self.GOOD_MSG_COLOR
        else:
            btm_msg = 'Delayed feedback'
            btm_color = self.BAD_MSG_COLOR
        gg.draw_msg(self.screen, top_msg,
                    color=top_color,
                    center=(self.screen_mid[0],
                            self.screen_mid[1]-50))
        gg.draw_msg(self.screen, btm_msg,
                    color=btm_color,
                    center=(self.screen_mid[0],
                            self.screen_mid[1]+50))

    def draw_play_area(self):
        if self.dof == 1:
            gg.draw_center_rect(self.screen,
                                self.SCREEN_HEIGHT, self.SCREEN_HEIGHT,
                                self.bg_color,
                                self.screen_mid[0], self.screen_mid[1])

            gg.draw_center_rect(self.screen, 
                                self.TARGET_DIST[1]-self.TARGET_DIST[0],
                                self.SCREEN_HEIGHT,
                                self.bg_color_alt,
                                (self.TARGET_DIST[0]
                                 +0.5*(self.TARGET_DIST[1]
                                       -self.TARGET_DIST[0])
                                 + self.START_COORDS[0]),
                                self.screen_mid[1])

            gg.draw_center_rect(self.screen,
                                2*(self.START_DIST-self.cursor.RAD),
                                self.SCREEN_HEIGHT,
                                self.bg_color_alt_2,
                                self.START_COORDS[0],  self.screen_mid[1])

        elif self.dof == 2:
            gg.draw_center_rect(self.screen,
                                self.SCREEN_HEIGHT, self.SCREEN_HEIGHT,
                                self.bg_color,
                                self.screen_mid[0], self.screen_mid[1])

            gg.draw_filled_aacircle(self.screen,
                                    self.TARGET_DIST[1],
                                    self.bg_color_alt,
                                    self.START_COORDS[0], self.START_COORDS[1])

            gg.draw_filled_aacircle(self.screen,
                                    self.TARGET_DIST[0],
                                    self.bg_color,
                                    self.START_COORDS[0], self.START_COORDS[1])

            gg.draw_center_rect(self.screen,
                                self.SCREEN_HEIGHT, 2*self.BUFFER_DIST,
                                self.bg_color,
                                self.screen_mid[0], self.GAME_ORIGIN[1])
            gg.draw_center_rect(self.screen,
                                2*self.BUFFER_DIST, self.SCREEN_HEIGHT,
                                self.bg_color,
                                self.GAME_ORIGIN[0], self.screen_mid[1])

            gg.draw_filled_aacircle(self.screen,
                                    self.START_DIST-self.cursor.RAD,
                                    self.bg_color_alt_2,
                                    self.START_COORDS[0], self.START_COORDS[1])

    def draw_indicator(self):
        if self.dof == 1:
            gg.draw_center_rect(self.screen,
                                2*self.indicator_rad, self.SCREEN_HEIGHT,
                                self.indicator_color,
                                self.START_COORDS[0], self.screen_mid[1])
        elif self.dof == 2:
            gg.draw_filled_aacircle(self.screen,
                                    self.indicator_rad,
                                    self.indicator_color,
                                    self.START_COORDS[0], self.START_COORDS[1])


    def quit(self):
        sys.exit()
Exemplo n.º 19
0
log("File imports sucessful!")

VERBOSE = True

HOST = "0.0.0.0"
DEVICE_PORT = 24601
ADC_PIN = 0

generate_auth_key_if_not_exists()
"""
Unfortunately micropython on the ESP8266 does not support threading at this point
and so only 1 request can be processed at once, however this should be fine as
request collisions should not occur very often.
"""

thermometer = Thermometer(ADC_PIN)
"""
log() logs the string to a text file ("log.txt") which we can have a look at
incase anything goes wrong or we need to see what requests have been occuring
on the device.
"""

log("Thermometer object instantiated!")

# Connection Manager

sk = socket.socket()
sk.bind((HOST, DEVICE_PORT))
sk.listen(1)

while True:
Exemplo n.º 20
0
    def __init__(self):

        ###############
        # load config #
        ###############
        with open('trainer_config.yaml') as f:
            CONFIG = yaml.load(f)
        self.exp_type = CONFIG['experiment-type']
        self.playback_bool = CONFIG['playback-enabled']
        self.subj_id = CONFIG['subject-id']
        self.subj_dir = 'datasets/' + self.subj_id
        if self.exp_type == 'timed':
            fu.write_all_headers_timed(self)
        elif self.exp_type == 'block':
            fu.write_all_headers_block(self)

        #################
        # set constants #
        #################
        self.FRAME_RATE = 30
        self.SCREEN_WIDTH, self.SCREEN_HEIGHT = 1024, 768
        self.BG_COLOR_REG = 70,70,70
        self.BG_COLOR_REG_2 = 110,110,110
        self.BG_COLOR_REG_3 = 40,40,40
        self.SUCCESS_COLOR = 70,170,70
        self.INDICATOR_COLOR = 40,60,40
        self.INDICATOR_COLOR_2 = 30,100,30
        self.GOOD_MSG_COLOR = 160,255,160
        self.BAD_MSG_COLOR = 255,160,160
        self.A_MSG_COLOR = 160,160,255
        self.B_MSG_COLOR = 230,230,160
        self.SENSOR_INPUT_OFFSET = np.array([0.5*self.SCREEN_WIDTH,
                                             0.5*self.SCREEN_HEIGHT])
        self.NEWTONS_2_PIXEL = 200
        self.BLOCK_TIME = CONFIG['block-length']
        self.RESET_HOLD_TIME = 0.5
        self.REACH_SUCCESS_TIME = 2.
        self.NOISE_VAR_GOOD = 0.025
        if not self.playback_bool:
            self.NOISE_VAR_BAD = 10*self.NOISE_VAR_GOOD
        else:
            self.NOISE_VAR_BAD = self.NOISE_VAR_GOOD
        self.SAMPLE_PERIOD = 2.
        self.SAMPLE_FRAMES = self.SAMPLE_PERIOD*self.FRAME_RATE
        self.TRS_SHOW_UPDATE_RATE = 2
        self.TR_LIST = (0.125, .25, 0.5, 1., 2., 4.)
        self.TRS_SAMPLES_DICT = dict((tr, tr/self.SAMPLE_PERIOD)
                                     for tr in self.TR_LIST)
        self.TRS_SUCCESS_DICT = dict((tr, self.REACH_SUCCESS_TIME/tr)
                                     for tr in self.TR_LIST)
        self.BUFFER_DIST = 0.075*self.SCREEN_HEIGHT
        self.START_DIST = self.BUFFER_DIST
        self.GAME_ORIGIN = (0.5*self.SCREEN_WIDTH-0.5*self.SCREEN_HEIGHT,
                            self.SCREEN_HEIGHT)
        self.START_COORDS = np.array([self.GAME_ORIGIN[0]+self.BUFFER_DIST,
                                      self.GAME_ORIGIN[1]-self.BUFFER_DIST])
        self.TARGET_DIST = (0.3*self.SCREEN_HEIGHT,
                            0.8*self.SCREEN_HEIGHT)
        self.ERROR_CUTOFF = self.TARGET_DIST[0] - self.START_DIST
        self.MIN_ERROR_METRIC = 0.1
        self.SS_ERROR_METRIC = 0.9
        self.MIN_SUCCESS_SCORE = 0.7
        self.TARGET_RAD = (self.ERROR_CUTOFF*
                           (1-(self.MIN_SUCCESS_SCORE-self.MIN_ERROR_METRIC)
                            /(self.SS_ERROR_METRIC-self.MIN_ERROR_METRIC)))
        if SENSOR_ACTIVE:
            self.daq = Pydaq('Dev1/ai0:1', self.FRAME_RATE)
        self.VISIBLE_TRIALS = CONFIG['visible-trials']
        self.INVISIBLE_TRIALS = CONFIG['invisible-trials']
        self.NUM_TRIALS = self.VISIBLE_TRIALS
        self.TRIAL_TYPES = 8

        ####################################################
        # start pygame and initialize default game objects #
        ####################################################
        pygame.init()
        pygame.mouse.set_visible(not pygame.mouse.set_visible)
        self.clock = pygame.time.Clock()
        if CONFIG['fullscreen']:
            self.screen = pygame.display.set_mode(
                            (self.SCREEN_WIDTH, self.SCREEN_HEIGHT),
                             pygame.FULLSCREEN)
        else:
            self.screen = pygame.display.set_mode(
                            (self.SCREEN_WIDTH, self.SCREEN_HEIGHT))

        ##################################
        # initialize custom game objects #
        ##################################
        self.cursor = Cursor(self.screen)


        self.target = Target(self.screen,
                             self.FRAME_RATE,
                             self.TARGET_RAD,
                             self.ERROR_CUTOFF,
                             self.MIN_ERROR_METRIC,
                             self.SS_ERROR_METRIC,
                             self.MIN_SUCCESS_SCORE,
                             self.START_COORDS,
                             self.TARGET_DIST)

        self.therm = Thermometer(self.screen,
                                 self.MIN_ERROR_METRIC,
                                 self.MIN_SUCCESS_SCORE,
                                 self.SS_ERROR_METRIC)

        self.INDIC_RAD_MAX = self.START_DIST-self.cursor.RAD-2
        self.target.target_lims = self.TARGET_DIST
        self.timers = {}
        self.init_timers()
        self.set_tr(2.)
        self.trial_count = 0
        self.trial_type_count = 1
        self.next_dof = 1
        self.set_dof(self.next_dof)
        self.next_ir = 'impulse'
        self.next_visible = True
        self.set_trial()

        ######################
        # set game variables #
        ######################
        self.screen_mid = np.array([0.5*self.screen.get_width(),
                                    0.5*self.screen.get_height()])
        self.bg_color = self.BG_COLOR_REG
        self.bg_color_alt = self.BG_COLOR_REG_2
        self.bg_color_alt_2 = self.BG_COLOR_REG_3
        self.indicator_color = self.INDICATOR_COLOR
        self.indicator_rad = 0*self.START_DIST
        self.success_color = self.SUCCESS_COLOR
        self.input_mode = 'mouse'
        self.input_pos = np.array([0.0,0.0])
        self.training_mode = True

        #######################
        # set block variables #
        #######################
        self.NUM_BLOCK_TRIALS = CONFIG['num-block-trials'] 
        self.next_target = 'new'
        self.first_feedback = CONFIG['first-trial-feedback'] 
        self.first_noise = CONFIG['first-trial-noise']
        self.next_feedback = self.first_feedback
        self.next_noise = self.first_noise
        self.set_noise()
        self.BLOCK_TRS = self.BLOCK_TIME/self.tr
        self.block_nfb_buffer = np.zeros(self.BLOCK_TRS)
        self.block_tr_count = 0
        self.total_block_count = 0
        self.trial_block_count = 0

        ##########################
        # set playback variables #
        ##########################
        self.TIME_SHIFT = 6
        self.PLAYBACK_TRS = self.BLOCK_TRS + self.TIME_SHIFT/self.tr
        self.EXTRA_TRS = 2
        self.playback_buffer_length = (self.BLOCK_TIME
                                       + self.EXTRA_TRS)*self.FRAME_RATE
        self.move_counter = 0
        self.reset_playback_buffers()
Exemplo n.º 21
0
        # Celsius to Fahrenheit button
        self.addButton(text = ">>>>",
                       row = 2, column = 0,
                       command = self.computeFahr)
        # Fahrenheit to Celsius button
        self.addButton(text = "<<<<",
                       row = 2, column = 1,
                       command = self.computeCelsius)

    # The controller methods
    def computeFahr(self):
        """Inputs the Celsius degrees
        and outputs the Fahrenheit degrees."""
        degrees = self.celsiusField.getNumber()
        self.model.setCelsius(degrees)
        self.fahrField.setNumber(self.model.getFahrenheit())

    def computeCelsius(self):
        """Inputs the Fahrenheit degrees
        and outputs the Celsius degrees."""
        degrees = self.fahrField.getNumber()
        self.model.setFahrenheit(degrees)
        self.celsiusField.setNumber(self.model.getCelsius())

# Instantiate the model, pass it to the view, and pop up the window.
if __name__ == "__main__":
    model = Thermometer()
    view = ThermometerView(model)
    view.mainloop()       
Exemplo n.º 22
0
from thermometer import Thermometer

thermometer = Thermometer()

for i in range(5):
    temp, when = thermometer.get_measurement()
    print("{} temperature = {} degrees".format(when.isoformat(), temp))

thermometer.close()
Exemplo n.º 23
0
def build_page(layout, page):
    layout.clear_widgets()
    links.clear()  # TODO: will prevent iframe functionality to work
    for id, item in page.iteritems():  # create instances (ids)
        if item['type'] == 'button':
            wgt = Button()
            if Preferences.theme != 'default':
                wgt.background_normal = os.path.join(util.dir_theme,
                                                     Preferences.theme,
                                                     'btn_normal.png')
                wgt.background_down = os.path.join(util.dir_theme,
                                                   Preferences.theme,
                                                   'btn_down.png')
                wgt.color = Preferences.foreground
                wgt.border = [0, 0, 0, 0]
        elif item['type'] == 'label':
            wgt = Label()
            if Preferences.theme != 'default':
                wgt.color = Preferences.foreground
        elif item['type'] == 'image':
            img_path = os.path.join(util.dir_img, item['source'])
            wgt = Image(source=img_path)
        elif item['type'] == 'textinput':
            wgt = TextInput()
        elif item['type'] == 'var-label':
            wgt = VariableLabel()
        elif item['type'] == 'led':
            wgt = Led()
        elif item['type'] == 'thermometer':
            wgt = Thermometer()
        elif item['type'] == 'manometer':
            wgt = Manometer()
        elif item['type'] == 'edit-grid':
            wgt = EditGrid()
            wgt.set_dimenstion(item['rows'], item['cols'])
        elif item['type'] == 'simul-grid':
            wgt = SimulGrid()
            wgt.set_dimenstion(item['rows'], item['cols'])
            wgt.build_network()
            Simulator.set_grid(wgt)
        elif item['type'] == 'graph':
            wgt = Graph()
        elif item['type'] == 'DatePicker':
            wgt = DatePicker()
        elif item['type'] == 'GraphLabel':
            wgt = GraphLabel()
        else:
            print 'Unknown component ' + item['type']
            return
        wgt.id = id
        layout.add_widget(wgt)
    for id, item in page.iteritems():  # now can use references (id)
        wgt = get_widget(id)
        if 'text' in item:
            wgt.text = item['text']
        if 'font_size' in item:
            wgt.font_size = item['font_size']
        if 'pos' in item:
            wgt.pos = eval(item['pos'])
        if 'size' in item:
            wgt.size = eval(item['size'])
        if 'pos_hint' in item:
            wgt.pos_hint = item['pos_hint']
        if 'size_hint' in item:
            wgt.size_hint = eval(item['size_hint'])
        if 'link' in item:
            links[wgt.id] = item['link']
            wgt.bind(on_press=navigate)
        if 'click' in item:
            wgt.bind(on_press=eval(item['click']))
        if 'halign' in item:
            wgt.halign = item['halign']
        if 'multiline' in item:
            wgt.multiline = item['multiline']
        if 'validate' in item:
            wgt.bind(on_text_validate=eval(item['validate']))
        if 'variable' in item:
            wgt.set_var(item['variable'])
        if 'listener' in item:
            listeners = item['listener'].split(',')
            for listener in listeners:
                wgt.append_listener(get_widget(listener.strip()))
        if 'markup' in item:
            wgt.markup = item['markup']