Guten Abend,
irgendwie bekomme ich es nicht zustande, zwei IR Signale (eins NEC das andere RC5) mit einem Delay hintereinander zu senden.
Einzeln senden funktioniert jedoch, nur wenn ich einen Delay dazwischen hinzufüge, wird nur der jeweils erste gesendet :o
Hier der gesamte Code:
// Steuerung des Flamingo Switch Sets (SF-501) + Led-Strip mit RF-Empfänger via 433Mhz Modul & Led-Kette via IR-LED
//Programmiert für Esp8266
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#include <RCSwitch.h>
#include <NewRemoteTransmitter.h>
#define WIFI_SSID "xxxxxxxx"
#define WIFI_PASS "xxxxxxxxxxxxx"
#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#define SERIAL_BAUDRATE 115200
fauxmoESP fauxmo;
NewRemoteTransmitter transmitter(5917696, 2, 267, 3);
IRsend irsend(4); // IR-LED wird via GPIO-Pin 4 gesteuert (D2)
RCSwitch mySwitch = RCSwitch();
void rc_setup() {
mySwitch.enableTransmit(2);
// Optionale Puls-Länge
mySwitch.setPulseLength(470);
pinMode(13,OUTPUT);
}
// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------
void wifiSetup() {
WiFi.mode(WIFI_STA);
// Connect
Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
// Wait
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
// Connected!
Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
}
void callback(uint8_t device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
if ( (strcmp(device_name, "Fernseher") == 0) ) {
if (state) {
irsend.sendRC5(0xC,12);
delay(5000);
irsend.sendNEC(0x80BF3BC4, 32);
} else {
irsend.sendRC5(0x80C,12);
delay(5000);
irsend.sendNEC(0x80BF3BC4, 32);
}
}
// Ein und Ausschalten der Funksteckdose via 433Mhz Sender
if ( (strcmp(device_name, "Schlafecke") == 0) ) {
if (state) {
transmitter.sendUnit(4, true);
} else {
transmitter.sendUnit(4, false);
}
}
// Ein und Ausschalten der Funksteckdose via 433Mhz Sender
if ( (strcmp(device_name, "Stehlampe") == 0) ) {
if (state) {
transmitter.sendUnit(7, true);
} else {
transmitter.sendUnit(7, false);
}
}
//Ein und Ausschalten des LED-Strips (Tisch!) via IR-LED
if ( (strcmp(device_name, "tischLampe") == 0) ) {
if (state) {
irsend.sendNEC(0xF7C03F, 32);
} else {
irsend.sendNEC(0xF740BF, 32);
}
}
//Ein und Ausschalten des LED-Strips (Poster!) via 433Mhz Sender
if ( (strcmp(device_name, "poster") == 0) ) {
if (state) {
mySwitch.send("001000111000111000000100"); //An
} else {
mySwitch.send("001000111000111000000100"); //Aus
}
}
if ( (strcmp(device_name, "gameMode") == 0) ) {
if (state) {
irsend.sendNEC(0xF7C03F, 32); //Tischbeleuchtung An
delay(40);
irsend.sendNEC(0xF720DF, 32); // Tischbeleuchtung auf Rot
delay(40);
mySwitch.send("001000111000111000000100"); //Poster An
delay(40);
} else {
irsend.sendNEC(0xF740BF, 32); //Tischbeleuchtung aus
}
}
}
void setup() {
Serial.begin(SERIAL_BAUDRATE);
Serial.println();
Serial.println();
Serial.println("FauxMo demo sketch");
Serial.println("After connection, ask Alexa/Echo to 'turn pixels on' or 'off' or 'turn relay on' or 'off'");
irsend.begin();
// Wifi
wifiSetup();
// Fauxmo
fauxmo.addDevice("Fernseher"); //Switch => Steckleiste
fauxmo.addDevice("Schlafecke"); //Switch => Drucker
fauxmo.addDevice("Stehlampe"); //Unbenutzt
fauxmo.addDevice("tischLampe"); //LED-Strip an Tisch befestigt
fauxmo.addDevice("poster"); //LED-Strip im Posterrahmen
fauxmo.onMessage(callback);
//Rc-Switch
rc_setup();
}
void loop() {
fauxmo.handle();
}
Und um diese Stelle geht es:
void callback(uint8_t device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
if ( (strcmp(device_name, "Fernseher") == 0) ) {
if (state) {
irsend.sendRC5(0xC,12);
delay(5000);
irsend.sendNEC(0x80BF3BC4, 32);
} else {
irsend.sendRC5(0x80C,12);
delay(5000);
irsend.sendNEC(0x80BF3BC4, 32);
}
}
Wahrscheinlich ist es nur ein dummer Anfängerfehler, aber ich weiß echt nicht weiter
Danke