Teensy ++アナログ入力から信号を読み取り、表示する方法

画像





最近、私はこのものを得 、それで遊んでみたかったです。 LEDの標準的な例が十分になかったため、Teensyアナログ入力(ちなみに8個)から値を読み取って、何らかの方法で視覚化することにしました。



クリエイターは、Teensyプログラミングの2つの選択肢を提供しています-AVR-GCCを使用したCまたはTeensyプラグインをインストールしたArduino IDE。 AVR-GCCを介したプログラミングは素晴らしい機会を提供するかもしれませんが、初心者にとってはずっと簡単であるため、私はまだArduino IDEに落ち着いています。



そのため、まずここから Arduinoをダウンロードする必要があります

Linuxで作業している場合(udevでTeensyのルールを追加する必要があります)、 ここで見つけることができます。 次のようになります。

sudo cp 49-teensy.rules /etc/udev/rules.d/







次に、ここから Teensyduinoプラグインインストーラーをダウンロードする必要があります 。 インストール中に、インストールするモジュールを選択できます(すべてをインストールしました-ファームで便利になります:)。



その後、Arduino IDEにTeensyサポートが表示されます。



次に、アナログ入力から値を読み取り、USBシリアルに送信するコードを記述する必要があります。



 void setup() { Serial.begin(9600); } int pins[] = {0, 1, 2, 3, 4, 5, 6, 7}; int val; int i; void loop() { for (i = 0 ; i < 8 ; i++) { val = analogRead(pins[i]); Serial.print("p"); Serial.print(i); Serial.print(":"); Serial.print(val); Serial.print("\n"); } delay(100); }
      
      





コードは非常に一般的です-セットアップメソッドでは、シリアルポートを初期化し、ループで入力の値をチェックし、ポートに書き込みます。



Toolsメニューでプログラムをボードにデプロイする前に、ボードのモデル(私の場合はTeensy ++ 2.0)とシリアルポート(私は/ dev / ttyACM0)を選択する必要があります。 プログラムがシリアルポートを正しく使用するには、sudoからIDEを実行する必要がありました

プログラムのコンパイルと起動は、[検証]ボタン(左上隅のチェックマーク)を押すことで実行されます。 その後、Teensy Loaderダイアログが表示され、ボード上のボタンをクリックする必要があることを示します。 クリック-ウィンドウに再起動が表示され、ファームウェアが展開されます。

画像



再起動後、デバイスはシリアルポートに直接スパムを送信し始めます:)

結論は非常に陳腐だと見ることができます:

sudo cat /dev/ttyACM0





のようなものがあるはずです

 p0:294 p1:290 p2:286 p3:275 p4:272 p5:274 p6:273 p7:270
      
      







これで、転送されるデータの視覚化を開始できます。

ビジュアライザーとして、たくさんのPython + PyQt + pySerialを使用しました。

 import serial as Serial import re import random import thread import time import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class Fetcher(QThread): def __init__(self, parent = None): QThread.__init__(self, parent) def run(self): pinRe = re.compile("\d+") pinValues = [0, 0, 0, 0, 0, 0, 0, 0] serial = Serial.Serial('/dev/ttyACM0', 9600, timeout = 0.1) while True: pinString = serial.readline() pinParseResult = pinRe.findall(pinString) if (len(pinParseResult) == 2): pinValues[int(pinParseResult[0])] = int(pinParseResult[1]) self.emit(SIGNAL("pinupdate"), pinValues) serial.close() class Form(QDialog): MAX_VALUE = 1200 pins = [0, 0, 0, 0, 0, 0, 0, 0] pinInfos = [0, 0, 0, 0, 0, 0, 0, 0] def __init__(self, parent=None): super(Form, self).__init__(parent) for key in range(8): self.pins[key] = QProgressBar() self.pins[key].setOrientation(Qt.Vertical) self.pins[key].setValue(35) self.pinInfos[key] = QLabel() mainLayout = QVBoxLayout() topLayout = QHBoxLayout() bottomLayout = QHBoxLayout() for key in range(len(self.pins)): if key % 4 == 0 and key / 4 == 1: topLayout.addItem(QSpacerItem(100, 10)) if key % 4 == 2 and key / 4 == 1: bottomLayout.addItem(QSpacerItem(100, 10)) if key % 4 == 0 or key % 4 == 1: topLayout.addWidget(self.pinInfos[key]) topLayout.addWidget(self.pins[key]) topLayout.addItem(QSpacerItem(40, 10)) else: bottomLayout.addWidget(self.pinInfos[key]) bottomLayout.addWidget(self.pins[key]) bottomLayout.addItem(QSpacerItem(40, 10)) mainLayout.addLayout(topLayout) mainLayout.addLayout(bottomLayout) self.setLayout(mainLayout) self.setWindowTitle("Pin display") def connectSlots(self, fetcher): self.connect(fetcher, SIGNAL('pinupdate'), self.updateBars) def updateBars(self, values): valuesNormalised = map(lambda x: (float(x) / self.MAX_VALUE) * 100, values) for key in range(len(values)): self.pins[key].setValue(valuesNormalised[key]) self.pinInfos[key].setText("Pin %i, Value: %4i" % (key, values[key])) app = QApplication(sys.argv) form = Form() form.show() fetcher = Fetcher() fetcher.start() form.connectSlots(fetcher) app.exec_()
      
      





要するに、8つのプログレスバーを持つフォームが作成され、ピンの値を更新するためのスロットが指定され、ストリームが起動され、シリアルポートからデータを継続的に受信し、フォームについて通知します。



この結果は、記事の冒頭で見ることができます。



All Articles