Hier is der Code da mein EIngangspost wohl zu lang war:
#define FASTLED_ALLOW_INTERRUPTS 0
#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Keypad.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
//wifi connection
#define MY_SSID "artnet_box"
#define MY_PASS "artnettest"
#define LISTEN_PORT 6454
WiFiUDP Udp;
IPAddress multicastAddress(226, 1, 1, 1);
unsigned int multicastPort = 6454;
//local LEDs
int NUM_GROUPS = 170;
int LEDS_PER_GROUP = 6;
int NUM_LEDS = NUM_GROUPS * LEDS_PER_GROUP;
#define LED_PIN 3
CRGB leds[700];
//Keypad setting - Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 3; //3 Zeilen
//Die Ziffern/Zeichen:
char hexaKeys[ROWS][COLS] = {
{'#', '*', '7'},
{'6', '5', '4'},
{'3', '2', '1'}
};
byte colPins[COLS] = { 8, 7, 6 }; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = { 5, 4, 0 };//Definition der Pins für die 3 Zeilen
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//Display Settings
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
unsigned long displaytime;
int display_state = 1;
unsigned long pixel_auswahl_wert = 0;
int anzahl_digits = 0;
int test_state = 0;
int menu_auswahl_state = 0;
int pixel_auswahl_state = 0;
unsigned long menu_auswahl_wert = 0;
int confirm_state = 0;
unsigned long confirm_auswahl_wert = 0;
unsigned long menu_taste_wert = 0;
void setup()
{
//cennect to WiFi network
WiFi.begin(MY_SSID, MY_PASS);
delay(500);
// Udp.beginPacketMulticast(LISTEN_PORT);
//Udp.beginPacketMulticast(ipMulti, portMulti,WiFi.localIP());
Udp.beginMulticast(WiFi.localIP(), multicastAddress, multicastPort);
//start LED port
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
//start serial port
//Serial.begin(9600);
//init Display
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x64, I2C_ADDRESS);
oled.setFont(TimesNewRoman16_bold); // Auswahl der Schriftart
oled.setCursor(0, 0);
oled.println (F("Node started"));
oled.println (F("Pixelgruppierung"));
oled.println (F(""));
oled.print (LEDS_PER_GROUP);
oled.print (F(" Pixel"));
delay(3000);
oled.clear();
/* Wert aus eeprom laden und aktualisieren */
}
void loop()
{
unsigned int menu_taste = customKeypad.getKey();
if (menu_taste) {
menu_taste_wert = menu_taste_wert * 10 + (menu_taste - 48) ;
if (menu_taste == 65523 || menu_taste == 65530)
{
menu_taste_wert = 0;
test_state = 1;
}
else
{
menu_taste_wert = 0;
}
}
if (test_state == 1)
{
oled.setCursor(0, 0);
oled.println(F("Hauptmenu"));
oled.println(F(""));
oled.println(F("1 = Pixelgruppierung"));
oled.print(F("#/* = Verlassen"));
menu_auswahl_state = 1;
test_state = 0;
}
if (menu_auswahl_state == 1)
{
unsigned int menu_auswahl = customKeypad.getKey();
if (menu_auswahl) {
menu_auswahl_wert = menu_auswahl_wert * 10 + (menu_auswahl - 48) ;
if (menu_auswahl_wert == 65523 || menu_auswahl_wert == 65530 || menu_auswahl_wert == 1 )
{
if (menu_auswahl_wert == 1)
{
oled.clear();
oled.setCursor(0, 0);
oled.println(F("Pixelgruppierung"));
oled.println(F("Bitte Anzahl Pixel"));
oled.println(F("eingeben"));
oled.print(F("Max. Anzahl 172!"));
pixel_auswahl_state = 1;
menu_auswahl_wert = 0;
menu_auswahl_state = 0;
}
else
{
oled.clear();
oled.setCursor(0, 1);
oled.println(F("Menu verlassen!"));
oled.println(F("LED Gruppierung:"));
oled.print(LEDS_PER_GROUP);
oled.print(F(" Pixels"));
delay(3000);
menu_auswahl_wert = 0;
menu_auswahl_state = 0;
}
}
else
{
oled.clear();
oled.setCursor(0, 1);
oled.println(F("Ungueltige"));
oled.println(F("Eingabe!!!"));
delay(3000);
oled.clear();
menu_auswahl_wert = 0;
test_state = 1;
}
}
}
if (pixel_auswahl_state == 1)
{ oled.clear();
oled.setCursor(0, 1);
oled.println(F("Amount Pixel:"));
unsigned int pixel_auswahl = customKeypad.getKey();
if (anzahl_digits < 3) {
if (pixel_auswahl) {
pixel_auswahl_wert = pixel_auswahl_wert * 10 + (pixel_auswahl - 48) ;
anzahl_digits ++;
oled.print(pixel_auswahl_wert);
if (anzahl_digits == 3)
{
if (pixel_auswahl_wert <= 170)
{
oled.clear();
oled.setCursor(0, 0);
oled.print(pixel_auswahl_wert);
oled.println(F(" Pixel als Gruppe"));
oled.println(F("uebernehmen?"));
oled.println(F("1=JA | 2=Nein"));
confirm_state = 1;
anzahl_digits = 0;
pixel_auswahl_state = 0;
}
else
{
oled.clear();
oled.setCursor(0, 0);
oled.print(pixel_auswahl_wert);
oled.println(F(" ungueltig!"));
oled.println(F("Wert muss <170 sein!"));
oled.print(F("Wert erneut eingeben!"));
delay(3000);
anzahl_digits = 0;
pixel_auswahl_wert = 0;
}
}
}
}
}
if (confirm_state == 1)
{
unsigned int confirm_auswahl = customKeypad.getKey();
if (confirm_auswahl) {
confirm_auswahl_wert = confirm_auswahl_wert * 10 + (confirm_auswahl - 48) ;
if (confirm_auswahl_wert == 1 || confirm_auswahl_wert == 2)
{
if (confirm_auswahl_wert == 1)
{
oled.clear();
oled.setCursor(0, 0);
oled.print(pixel_auswahl_wert);
oled.println(F(" Pixel als Gruppe"));
oled.println(F("uebernommen!"));
oled.println(F("Wert in Speicher"));
oled.print(F("geschrieben"));
LEDS_PER_GROUP = pixel_auswahl_wert;
pixel_auswahl_wert = 0;
confirm_state = 0;
}
else
{
oled.clear();
oled.setCursor(0, 0);
oled.print(pixel_auswahl_wert);
oled.println(F(" Pixel als Gruppe"));
oled.println(F("abgelehnt!"));
oled.println(F("Menu wird beendet"));
oled.print(F("3.."));
delay(1000);
oled.print(F("2.."));
delay(1000);
oled.print(F("1.."));
delay(1000);
oled.clear();
pixel_auswahl_wert = 0;
confirm_state = 0;
}
}
else
{
oled.clear();
oled.setCursor(0, 1);
oled.println(F("Ungueltige"));
oled.println(F("Eingabe!!!"));
delay(3000);
oled.clear();
oled.setCursor(0, 0);
oled.print(pixel_auswahl_wert);
oled.println(F(" Pixel als Gruppe"));
oled.println(F("uebernehmen?"));
oled.println(F("1=JA | 2=Nein"));
confirm_auswahl_wert = 0;
}
}
}
*/
//get Art-Net
RecieveUdp();
//wait a spell
delay(1);
}
//process incoming UDP message
void RecieveUdp()
{
byte packet[18 + (NUM_GROUPS * 3)];
//test if a packet has been recieved
if (Udp.parsePacket() > 0)
{
//read-in packet and get length
int len = Udp.read(packet, 18 + (NUM_GROUPS * 3));
//discard unread bytes
Udp.flush();
//test for empty packet
if (len < 1)
return;
//test for Art-Net DMX packet
//(packet[14] & packet[15] are the low and high bytes for universe)
if (packet[9] == 0x50)
{
int dmx = 18;
//copy dmx data to leds
for (int n = 0; n < NUM_GROUPS; n++) {
int dmx1 = dmx++;
int dmx2 = dmx++;
int dmx3 = dmx++;
for (int m = n * LEDS_PER_GROUP; m < n * LEDS_PER_GROUP + LEDS_PER_GROUP; m++) {
leds[m] = CRGB(packet[dmx1], packet[dmx2], packet[dmx3]);
}
}
//push led data
FastLED.show();
}
}
}
Gruß Dennis.