Nuova sezione libri disponibile!

Implementiamo un subscriber con un interruttore

Gabriele Ermacora

1 min min read

Ora utilizziamo un po' di più l'hardware! Configuriamo un pin di input per dare il segnale ad un led per accendersi. Il codice a questo punto è molto semplice. Importiamo un messaggio nuovo che è Input. Questo è il messaggio che pubblicherà l'interruttore quando verrà premuto. Quindi abbiam un subscriber che rimane in ascolto, e ogni volta che l'interruttore viene premuto il subscriber richiamerà la funzione on_input. Dentro questa funzione in fine c'è un publisher che farà accendere i led a frequenze diverse. C'è un trick inoltre che è led_msg.led1 = self.cnt % 2 == 1. Questa è la versione compatta del if-then-else che abbiamo visto prima per cambiare continuamente stato al lede da true a false. La sintassi in modo compatto è dividi self.cnt per 2 se da resto 0 allora o (False) se no è 1 (True).

import dotbot_ros
from dotbot_msgs.msg import Input, Led
import sys

class Node(dotbot_ros.DotbotNode):
    node_name = 'input_node'
    def setup(self):
        self.cnt = 0
        dotbot_ros.Subscriber('input', Input, self.on_input)
        self.led_pub = dotbot_ros.Publisher('led', Led)
        print 'Input Node Started'
        sys.stdout.flush()

    def on_input(self, msg):
        if msg.input1 == True:
            self.cnt += 1
            led_msg = Led()
            led_msg.led1 = self.cnt % 2 == 1
            led_msg.led2 = (self.cnt/2) % 2 == 1
            led_msg.led3 = (self.cnt/4) % 2 == 1
            self.led_pub.publish(led_msg)
            print "pressed"
            sys.stdout.flush()

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di più sulla mia Privacy Policy.