
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ
рдпрд╣ рдЪреАрдЬ рдорд┐рд▓реА рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯреЗрдиреНрд╕реА рдПрдирд╛рд▓реЙрдЧ рдЗрдирдкреБрдЯреНрд╕ (рдЬреЛ, рд╡реИрд╕реЗ, 8 рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ) рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рдХрд▓реНрдкрдирд╛ рдХреАред
рдирд┐рд░реНрдорд╛рддрд╛ Teensy рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ - C, AVR-GCC рдпрд╛ Arduino IDE рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдЯреЗрдиреЗрд╕реА рдкреНрд▓рдЧрдЗрдиред AVR-GCC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдмрдбрд╝реЗ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА Arduino IDE рдкрд░ рдмрд╕ рдЧрдпрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ
рдпрд╣рд╛рдБ рд╕реЗ Arduino рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЖрдкрдХреЛ udev рдореЗрдВ Teensy рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЖрдк рдЗрд╕реЗ
рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
sudo cp 49-teensy.rules /etc/udev/rules.d/
рдлрд┐рд░ рдЖрдкрдХреЛ
рдпрд╣рд╛рдВ рд╕реЗ Teensyduino рдкреНрд▓рдЧрдЗрди рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рд╣реИ ред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ - рдпрд╣ рдЦреЗрдд рдореЗрдВ рдХрд╛рдо рдЖрдПрдЧрд╛ :)ред
рдЙрд╕рдХреЗ рдмрд╛рдж, Arensino IDE рдореЗрдВ Teensy рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдПрдирд╛рд▓реЙрдЧ рдЗрдирдкреБрдЯреНрд╕ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпреВрдПрд╕рдмреА рд╕реАрд░рд┐рдпрд▓ рдореЗрдВ рднреЗрдЬ рджреЗрдЧрд╛ред
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); }
рдХреЛрдб рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ - рд╕реЗрдЯрдЕрдк рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд▓реВрдк рдореЗрдВ рд╣рдо рдЗрдирдкреБрдЯреНрд╕ рдкрд░ рд╡реИрд▓реНрдпреВрдЬрд╝ рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреЛрд░реНрдЯ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЕрдкрдиреЗ рдмреЛрд░реНрдб рдХреЛ рдЯреВрд▓ рдореЗрдиреВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреЛрд░реНрдб рдХреЗ рдореЙрдбрд▓ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ Teensy ++ 2.0 рд╣реИ) рдФрд░ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (I have it / 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
рдЕрдм рдЖрдк рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрдерди + рдкрд╛рдпрдХрдЯ + рдкрд╛рдЗрд░реЗрд╢рд┐рдпрд▓ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред
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_()
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдЖрда рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд┐рдВрд╕ рдкрд░ рдореВрд▓реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд▓реЙрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдзрд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓рдЧрд╛рддрд╛рд░ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рд╣реА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред