Hey liebe µC Gemeinde,
ich habe eine Beamersteuerung mit dem Arduino Nano gebaut. Vorher lief die Steuerung schon an Casio Beamern und jetzt muss ich sie auf einen Nec P525UL anpassen. Die ON/OFF Funktion funktioniert schon. Meine Frage ist was habe ich bei den Befeheln für Input Umschalten und Mute ON/OFF falsch bzw anders gemacht? Die Befehle funktionieren nicht und ich bin der Meinung, dass ich es genauso gemacht habe wie bei dem ON/OFF Befehlen.
Befehle laut Anleitung:
Beamer AN: [02][00][00][00][00][02]
Beamer AUS: [02][01][00][00][00][03]
HDMI 1: [02][03][00][00][02][01][A1][A9]
VGA: [02][03][00][00][02][01][01][09]
Picture Mute ON: [02][10][00][00][00][12]
Picture Mute OFF: [02][11][00][00][00][13]
/*
* Steuerung für NEC P525UL
* Zur Umsetzung wird ein Arduino Nano verwändet
* Der Umsetzer für die RS232 Schnittstelle ist ein MAX232ECPE
*/
#include <Bounce2.h>
// Pinbelegung -> Konstante Belegung
int OnOff = 3; //Pin 2 dem OnOff Taster zugewiesen
int Video = 4; //Pin 3 dem Video Input Taster zugewiesen
int RGB = 5; //Pin 4 dem RGB Input Taster zugewiesen
int HDMI = 6; //Pin 5 dem HDMI Input Taster zugewiesen
int Mute = 7; //Pin 6 dem Mute Taster zugewiesen
int LED = 2; //Pin 7 ist für die Satus LED (soll leuchten wenn Taster gedrückt wird)
//welcher Pin entprellt wird wird hier defeniert
Bounce PinOnOff = Bounce();
Bounce PinVideo = Bounce();
Bounce PinRGB = Bounce();
Bounce PinHDMI = Bounce();
Bounce PinMute = Bounce();
//Vriabelen für AN und Aus
int OnOffStatus = 0; //Variabele zum abfragen des Taster Status
int OnOffZaehler = 0; //Variabele um zu Zählen ob Taster On oder Off schalten soll
int OnOffletzterStatus = 0; //Variabele die den letzten Status des Tasters speichert (On oder Off)
//Variabelen für die Mutefunktion
int MuteStatus = 0; //Variabele zum abfragen des Taster Status
int MuteZaehler = 0; //Variabele um zu Zählen ob Taster Mute oder NO Mute schalten soll
int MuteletzterStatus = 0; //Variabele die den letzten Status des Taasters speichert (Bildschirm gemutet oder nicht)
//Array definieren
const byte ON [] = {0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
const byte OFF [] = {0x02, 0x01, 0x00, 0x00, 0x00, 0x03};
const byte InputHDMI [] = {0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1, 0xA9};
const byte InputRGB [] = {0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x09};
const byte MuteON [] = {0x02, 0x10, 0x00, 0x00, 0x00, 0x12};
const byte MuteOFF [] = {0x02, 0x11, 0x00, 0x00, 0x00, 0x13};
void setup()
{ // put your setup code here, to run once:
pinMode(LED, OUTPUT); //LED Pin als Ausgang deklariert
pinMode(LED_BUILTIN, OUTPUT); //interne LED für testzweke aktiviert
PinOnOff.attach (OnOff, INPUT_PULLUP); //defenierte Taster werden den entprell Variabelen zugewiesen
PinOnOff.interval (100); //Entprellzeit des Tatsers definiert
PinVideo.attach (Video, INPUT_PULLUP); //defenierte Taster werden den entprell Variabelen zugewiesen
PinVideo.interval (100); //Entprellzeit des Tatsers definiert
PinRGB.attach (RGB, INPUT_PULLUP); //defenierte Taster werden den entprell Variabelen zugewiesen
PinRGB.interval (100); //Entprellzeit des Tatsers definiert
PinHDMI.attach (HDMI, INPUT_PULLUP); //defenierte Taster werden den entprell Variabelen zugewiesen
PinHDMI.interval (100); //Entprellzeit des Tatsers definiert
PinMute.attach (Mute, INPUT_PULLUP); //defenierte Taster werden den entprell Variabelen zugewiesen
PinMute.interval (100); //Entprellzeit des Tatsers definiert
Serial.begin(9600); //Die Baudrate (Seriele Übertragungsgeschwindigkeit) für den Seriellen Monitor am PC und Initialisierung der Seriellen Schnitstelle
Serial.println("Verbindungs Test"); //Verbingung zum Seriellen Monitor wird getestet
}
void loop()
{
//Die entprellten Pinne müssen neu geladen werden
PinOnOff.update(); //Damit die Bounce Bibliothek einwandfrei läuft
PinVideo.update(); //müss am Anfang des Programmes (loop)
PinRGB.update(); //alle zu entprellenen Taster einmal abgerufen werden,
PinHDMI.update(); //damit keine falschen Zustände eingelesen werden
PinMute.update();
//Festgelegt wo welcher Status abgerufen wird
OnOffStatus = digitalRead(OnOff); //die Variabele wir durch den Zustand des Tasters definiert, dafür wird einfach der passende Taster abgefragt
MuteStatus = digitalRead(Mute);
//Ablauf Ein- & Ausschalten
if (PinOnOff.fallingEdge()) //if Abfrage ob Pin On Off gedrückt wird
{
digitalWrite(LED, HIGH); //wenn Taster gedrückt -> LED wird angeschaltet
if (OnOffStatus == OnOffletzterStatus) //if Abfrage ob der jetzige Zustand des Tasters dem letzten gespeicherten Zustand entspricht
{
Serial.write(ON, sizeof(ON)); //wenn beide Zustände gleich sind wird der Beamer eingeschaltet
OnOffletzterStatus++; //der letzte Taster Status wird mit 1 addiert
}
else
{
Serial.write(OFF, sizeof(OFF)); //sind die Zustände nicht gleich wird der Beamer ausgeschaltet
OnOffletzterStatus--; //letzter Taster Status wird mit 1 subtraiert
}
}
if (PinOnOff.risingEdge()) //if Abfrage ob Pin On Off losgelassen wird
{
digitalWrite(LED, LOW); //wenn dies der fall ist wird die LED ausgeschaltet
}
/*Input Video
if (PinVideo.fallingEdge()) //if Abfrage ob Video Pin gedrückt wird
{
digitalWrite(LED, HIGH); //ist das der Fall wir die LED angeschaltet
Serial.println("(SRC2)"); //und der Input wechselt zu Video
}
if (PinVideo.risingEdge()) //if Abfrage ob Video Pin losgelassen wird
{
digitalWrite(LED, LOW); //wenn ja, schaltet sich die LED wieder aus
}
*/
//Input RGB
if (PinRGB.fallingEdge()) //if Abfrage ob RGB Pin gedrückt wird
{
digitalWrite(LED, HIGH); //wenn ja, Schaltet sich die led an
Serial.write(InputRGB, sizeof(InputRGB)); //und der Beamer wechselt auf Input: RGB
}
if (PinRGB.risingEdge()) //if Abfrage ob RGB losgelassen wird
{
digitalWrite(LED, LOW); //wenn ja, geht die LED wieder aus
}
//Input HDMI
if (PinHDMI.fallingEdge()) //if Abfrage ob Pin HDMI gedrückt wird
{
digitalWrite(LED, HIGH); //wenn ja, schaltet sich die LED an
Serial.write(InputHDMI, sizeof(InputHDMI)); //und der Beamer auf Input: HDMI
}
if (PinHDMI.risingEdge()) //if Abfrage ob HDMI Pin losgelassen wird
{
digitalWrite(LED, LOW); //wenn ja, schaltet sich die LED aus
}
//Mutefunktion
if (PinMute.fallingEdge()) //if Abfrage ob Pin Mute gedrückt wird
{
digitalWrite(LED, HIGH); //wenn Taster gedrückt -> LED wird angeschaltet
if (MuteStatus == MuteletzterStatus) //if Abfrage ob der jetzige Zustand des Tasters dem letzten gespeicherten Zustand entspricht
{
Serial.write(MuteON, sizeof(MuteON)); //wenn beide Zustände gleich sind wird die Mutefunktion aktiviert
MuteletzterStatus++; //der letzte Taster Status wird mit 1 addiert
}
else
{
Serial.write(MuteOFF, sizeof(MuteOFF)); //sind die Zustände nicht gleich wird die Mutefunktion deaktiviert
MuteletzterStatus--; //letzter Taster Status wird mit 1 subtraiert
}
}
if (PinMute.risingEdge()) //if Abfrage ob Pin Mute losgelassen wird
{
digitalWrite(LED, LOW); //wenn dies der fall ist wird die LED ausgeschaltet
}
}
LG Jacky