Das Konzept von FYMT
Thema
Wenn die "geFYMTeten" Lokomotiven mittels IR-Fernbedienungen gesteuert werden sollen, ist es notwendig, die von den einzelnen Fernbedienungen versandten Codes festzustellen. Die festgestellten Codes können dann im Sketch, dessen Kompilat auf den in der Lok verbauten Arduino aufgespielt wird, verwendet werden.
Auch zu dieser Ermittlung wird ein Arduino verwendet.
Hardware
Gebraucht werden neben dem Arduino lediglich ein Infrarotsensor. Der Arduino wird mittels USB-Kabel mit einem Rechner verbunden.
Der IR-Sensor hat folgende Pin-Belegung (von vorne):
- links: Daten — Kabelfarbe: gelb
- Mitte: 5 V Stromversorgung — Kabelfarbe: rot
- rechts: Erde (GND — ground) — Kabelfarbe: schwarz
Das Datenkabel (gelb) verbindet den Daten-Pin des IR-Sensors mit Pin D11 des Arduino (im Code: IR_RECEIVER_PIN = 11).
Bei IR-Sensoren mit abweichender Pin-Belegung ist die Schaltung ensprechend anzupassen.
Software
Das Auslesen der vom IR-Sensor gelieferten Daten basiert auf Schmidt Maik, Arduino (dpunkt.verlag 2. aktualisierte Auflage S. 215).
Quellcode
/* * Copyright 2018 Mechtilde Stehmann* basierend auf * Schmidt Maik, Arduino, dpunkt.verlag 2. aktualisierte Auflage S. 215 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. * */ #include <irremote.h> String VERSION = "1.0"; String NAME = "IR-Signale auslesen"; String AUTHOR = "Mechtilde"; String DATE = "2018-12-23"; const unsigned int IR_RECEIVER_PIN = 11; const unsigned int BAUD_RATE = 9600; unsigned int COUNT = 0; IRrecv ir_receiver(IR_RECEIVER_PIN); decode_results results; void setup() { Serial.begin(BAUD_RATE); ir_receiver.enableIRIn(); } void dump(const decode_results* results) { const int protocol = results->decode_type; Serial.print("Protocol: "); switch(protocol) { case NEC : Serial.println("NEC"); break; case SONY : Serial.println("SONY"); break; case RC5 : Serial.println("RC5"); break; case RC6 : Serial.println("RC6"); break; case DISH : Serial.println("DISH"); break; case SHARP : Serial.println("SHARP"); break; case JVC : Serial.println("JVC"); break; case SANYO : Serial.println("SANYO"); break; case MITSUBISHI : Serial.println("MITSUBISHI"); break; case SAMSUNG : Serial.println("SAMSUNG"); break; case LG : Serial.println("LG"); break; default : Serial.println("not recognized."); } Serial.print("Value: "); Serial.print(results->value, HEX); Serial.print(" ("); Serial.print(results->bits, DEC); Serial.println(" bits)"); } void printinfo() { Serial.print("Name des Programms: "); Serial.println(NAME); Serial.print("Version: "); Serial.println(VERSION); Serial.print("Author: "); Serial.println(AUTHOR); Serial.print("Datum der letzten Aenderung: "); Serial.println(DATE); } void loop() { if (ir_receiver.decode(&results)) { dump(&results); ir_receiver.resume(); } if (Serial.available() > 0) { String COMMAND = Serial.readString(); Serial.print(COMMAND); if (COUNT == 0) { printinfo(); Serial.println("Type 'vvv' to repeat information"); Serial.println(""); } if (COMMAND == "vvv") { Serial.println(""); printinfo(); } } }
Der Code kann unter IRAnalyzer.ino heruntergeladen werden.
Erläuterungen:
- Leider gehören IRremote.h (und IRremoteInt.h) nicht zur Grundausstattung; daher gibt es eine Beschreibung des Downloads und der Installation.
- Die ermittelten Werte werden auf der Konsole des Rechners ausgegeben.
- Auch dieser Sketch teilt bei der Eingabe von "vvv" auf der Konsole des Rechners mit, welches Programm in welcher Version auf dem Arduino gerade läuft.
Das Konzept von FYMT