Verbinden und Steuern eines Arduino Boards mit Cascades, Teil II

IMG_20140220_124315Im zweiten Teil will ich erklären, wie es möglich ist einen Arduino über ein Z30 zu steuern. Bevor das getan werden kann muss der Arduino vom Gerät erkannt werden. Die notwendigen Schritte sind hier im ersten Teil dokumentiert.

Nachdem der Arduino verbunden ist, muss zunächst der Pfad geöffnet werden, der in der Klasse Peripheral gespeichert ist (Siehe blog Teil I). Ich benutze einen Button um die Kommunikation zu öffnen, weil der Arduino etwas Zeit zum Starten braucht und ich es einfach halten möchte :-) Falls versucht wird den Pfad zu früh zu öffnen, kann es sein, dass es nicht funktionieren.

Wenn der Button gedrückt wird, wird eine Funktionen aufgerufen, die die Kommunikation beginnt. Die Variable m_serial wird dazu genutzt um zu überprüfen, ob bereits eine serielle Kommunikation geöffnet ist und verhindert, dass der Pfad jedesmal geöffnet wird, wenn der Button gedrückt wird. In diesem Fall wird die Funktion beendet. Anderenfalls wird der Pfad ausgelesen und im read/write Modus mit open() geöffnet. Vergiss nicht zu überprüfen, ob der Pfad gültig ist.

Die nächsten Zeilen sind dazu nötig, die Attribute für die Kommunikation festzulegen: Die Bauderrate und der Mode, die im struct termios gespeichert sind. Die Bauderate legt die Übertragungsgeschwindigkeit fest und muss die selbe sein wie für den Arduino. Schau nach welche im Arduinoprogramm verwendet wurde (hier 9600). Anderenfalls wird es nicht funktionieren. Der TRANSNOW Modus ist dafür da, die Nachricht sofort zu senden:

Um zu sehen, ob wir erfolgreich waren wird der erste Befehl zum einschalten der LED gesendet:

Die Variable m_value legt die Intensität fest und sollte zwischen 0 und 255 liegen (0 bedeutet aus). m_lastWrite beinhaltet den letzten Wert, der an den Arduino gesendeten wurde. Auf diese Weise vermeiden wir unnötige neue Sendungen mit dem selben Wert.

Jetzt benötigen wir etwas mehr UI (außer den Button), um die Intensität der LED zu ändern. Ich habe dafür eine Radio Group verwendet, um verschiedene Helligkeiten wählen zu können (an, halb an, aus). Erstelle diese in der qml-Datei und benutzte eine invoke Funktion wenn das Signal onSelectedIndexChanged() empfangen wird:

Jedes mal wenn der Nutzer die Auswahl ändert, wird  writeSerial() aufgerufen. In dieser Funktion muss zunächst überprüft werden welcher Index gewählt wurde und die Intensität dementsprechend eingestellt werden. Ich habe das über eine switch-case-Anweisung getan und die Helligkeit manuell geändert.

Da wir den Wert nur an den Arduino senden wollen, wenn dieser verbunden ist und der Pfad geöffnet ist, muss die Variable m_serial überprüft werden. In Teil I dieses Blogs wird die Variable im Konstruktor auf -1 gesetzt. Ebenso wenn der Arduino getrennt wird. Wenn der Arduino verbunden ist senden wir den neuen Wert indem wir write() aufrufen.

Jetzt hast du gelernt, wie man einen Arduino an ein BlackBerry 10 Gerät anschließen und steuern kann. Damit kann ein eigenes kleines Protokoll geschrieben werden, was der Arduino interpretiert. Weiter Informationen können hier auf der Website gefunden werden.

Hier ist das gesamte Projekt.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">