Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

есть в форуме кто разбираеться в Arduino?

03.04.21 08:56
Re: есть в форуме кто разбираеться в Arduino?
 
Hawk13 прохожий
в ответ moose 02.04.21 22:08

Доброе утро,

вот один из вариантов,

(так выставлять можно?)


#include

#include

#include

#include

#include

#include

#define MQTT_USER "MQTTxxx"

#define MQTT_PASSWORD "VCxxx"

// Belegung

//DOT Matrix: ESP8266 NodeMCU:

//VCC 5V (VUSB)

//GND GND

//DIN D7 (GPIO13)

//CS D8 (GPIO15)

//CLK D5 (GPIO14)

int pinCS = 15;

int numberOfHorizontalDisplays = 4; //Anzahl der Module Horizontal

int numberOfVerticalDisplays = 1; //Anzahl der Module Vertikal

const byte buffer_size = 45;

char time_value[buffer_size];

const char* ssid = "LITExxx";

const char* password = "505xxx";

const char* mqtt_server = "192.168.xxx.xx";

int timeswitch = 1;

WiFiClient espClient;

PubSubClient client(espClient);

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

int wait = 70; // In milliseconds

int ScrollWait = 25; // Zeit in ms für Scroll Geschwindigkeit

int helligkeit = 5; // Helligkeit des DisplaysDefault Helligkeit 0 bis 15

int spacer = 1; // Länge eines Leerzeichens

int width = 5 + spacer; // Schriftgröße

String MatrixText = "";

int modus = 0; // Modus 0 = Marquee, 1 = static

void setup_wifi() {

delay(10);

// Wifi Verbindung

Serial.println();

Serial.print("Verbinde mit ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi verbunden :)");

Serial.println("IP Addresse: ");

Serial.println(WiFi.localIP());

}

void MQTTCallback(char* topic, byte* payload, unsigned int length) {

String PayloadString = "";

for (int i = 0; i < length; i++) { PayloadString = PayloadString + (char)payload; }

Serial.println("Eingehender Befehl");

Serial.println(topic);

Serial.println(PayloadString);

if(strcmp(topic, "LEDMatrix/text") == 0) {

Serial.println("Neuer Text wurde gesetzt");

timeswitch = 0;

modus = 0;

MatrixText = PayloadString;

}

if(strcmp(topic, "LEDMatrix/intensity") == 0) {

Serial.println("Neue Helligkeit wurde gesetzt");

helligkeit = PayloadString.toInt();

matrix.setIntensity(helligkeit);

}

if(strcmp(topic, "LEDMatrix/scrollwait") == 0) {

Serial.println("Neue Scrollgeschwindigkeit wurde gesetzt");

ScrollWait = PayloadString.toInt();

}

if(strcmp(topic, "LEDMatrix/time") == 0) {

Serial.println("Time aktiviert");

timeswitch = PayloadString.toInt();

}

if(strcmp(topic, "LEDMatrix/modus") == 0) {

Serial.println("set new Modus");

modus = PayloadString.toInt();

}

}

void reconnect() {

while (!client.connected()) {

// Client ID generieren

String clientId = "LEDMatrix-";

clientId += String(random(0xffff), HEX);

// Verbindung

if (client.connect(clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {

Serial.println("Mit MQTT verbunden :)");

client.subscribe("LEDMatrix/text");

client.subscribe("LEDMatrix/intensity");

client.subscribe("LEDMatrix/scrollwait");

client.subscribe("LEDMatrix/time");

client.subscribe("LEDMatrix/modus");

}

else

{

Serial.print("Fehler, :(");

Serial.print(client.state());

Serial.println(" neuer Versuch in 2 Sekunden");

delay(5000);

}

}

}

void setup() {

//delay(1000);

matrix.setIntensity(helligkeit);

for (int matrixIndex=0 ; matrixIndex < numberOfHorizontalDisplays ; matrixIndex++ )

{

matrix.setRotation(matrixIndex, 1); //Erste DOT Matrix Drehen

}

Serial.begin(115200);

Serial.println("Starte LEDMatrix...");

setup_wifi();

client.setServer(mqtt_server, 1883);

client.setCallback(MQTTCallback);

configTime(0 * 3600, 0, "pool.ntp.org", "time.nist.gov");

// See https://github.com/nayarsystems/posix_tz_db/blob/master/zo... for Timezone codes for your region

setenv("TZ", "CET-1CEST,M3.5.0/02,M10.5.0 / 3",1);

}

void printMatrix() {

switch (modus) {

case 0:

for ( int i = 0 ; i < width * MatrixText.length() + matrix.width() - 1 - spacer; i++ ) {

matrix.fillScreen(LOW);

int letter = i / width;

int x = (matrix.width() - 1) - i % width;

int y = (matrix.height() - 8) / 2; //Zentrieren des Textes Vertikal

while ( x + width - spacer >= 0 && letter >= 0 ) {

if ( letter < MatrixText.length() ) {

matrix.drawChar(x, y, MatrixText[letter], HIGH, LOW, 1);

}

letter--;

x -= width;

client.loop();

}

matrix.write();

delay(ScrollWait);

}

break;

case 1:

matrix.fillScreen(LOW);

int letter = 15;

int x = 128;

int y = (matrix.height() - 8) / 2; //Zentrieren des Textes Vertikal

while ( x + width - spacer >= 0 && letter >= 0 ) {

if ( letter < MatrixText.length() ) {

matrix.drawChar(x, y, MatrixText[letter], HIGH, LOW, 1);

}

letter--;

x -= width;

client.loop();

}

matrix.write();

delay(ScrollWait);

break;

}

}

String get_time(){

time_t now;

time(&now);

char time_output[buffer_size];

// See http://www.cplusplus.com/reference/ctime/strftime/ for strftime functions

// Desired format: ( Sun ,Jul 21 2019 ) ( AM 10:03:20 )

strftime(time_output, buffer_size, "%T", localtime(&now));

return String(time_output); // returns ( Sat 20-Apr-19) ( AM 12:31:45 )

}

void loop() {

if (!client.connected()) {

reconnect();

}

client.loop();

delay(100);

if (timeswitch == 1) {

modus = 1;

MatrixText = get_time();

MatrixText.trim();

Serial.println(MatrixText);

MatrixText.substring(23,28).toCharArray(time_value, 20);

Serial.println("HH:MM");

Serial.println(time_value);

}

printMatrix();

}

 

Перейти на