Free Your Model Train (FYMT)
Tester für Infrarot-Fernbedienungen

Das Konzept von FYMT

Dokumentation zu 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

Infrarotanalyzer Steckplatine

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):

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.

Infrarotanalyzer Platine

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:

Das Konzept von FYMT

Dokumentation zu FYMT