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

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

532  
Hawk13 прохожий02.04.21 19:24
02.04.21 19:24 

Добрый Вечер,

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


начал один проект и не могу не как законьчить,

планировал сделать Часы на базе LED MATRIX7219 + WemosD1mini и соединить их

с ioBroker через MQTT для показания разной информации.

все собрал, соединение есть и информация высвечиваеться а Часы/Время нет.

в сети много разных примеров но только Время+Погода итд. как минимум 10 штук

протестил не подходит. сам в Arduino мягко говоря слабо разбираюсь,

поэтому обращаюсь к вам за помощью поправить Sketch.

заранее благодарю.

#1 
  moose коренной житель02.04.21 21:02
NEW 02.04.21 21:02 
в ответ Hawk13 02.04.21 19:24, Последний раз изменено 02.04.21 21:04 (moose)

выложите ваш скэтч, только в читабельной форме. может кто и поможет. здесь каждый первый - гуру именно в ардуино.


в грамоте бы вам поднатаскаться. слишком уж напрягает такое изобилие ошибок. если и в скэтче подобное - вряд ли кто станет время тратить. основную тяжесть проеат должен таки автор нести.

#2 
Hawk13 прохожий02.04.21 21:25
NEW 02.04.21 21:25 
в ответ moose 02.04.21 21:02

Спасибо большое за теплый прием!

что касается ошибок то старался как мог.

#3 
  moose коренной житель02.04.21 22:08
NEW 02.04.21 22:08 
в ответ Hawk13 02.04.21 21:25, Последний раз изменено 02.04.21 22:11 (moose)

другое дело! умеете если хотите! давайте скотч.

под читабельной формой я имел ввиду , что нужно не так:

void foo (void){

int a = 0;

int b = a;

}

, а так:


void foo (void){
   int a = 0;
   int b = a;
}
#4 
AlexNek патриот02.04.21 22:59
AlexNek
NEW 02.04.21 22:59 
в ответ Hawk13 02.04.21 19:24
все собрал, соединение есть и информация высвечивается

ну тогда проблема, похоже только в коде.


А из этих примеров всё работает?

https://www.makerguides.com/max7219-led-dot-matrix-display...

#5 
Hawk13 прохожий03.04.21 08:56
NEW 03.04.21 08:56 
в ответ 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();

}

#6 
Hawk13 прохожий03.04.21 09:06
NEW 03.04.21 09:06 
в ответ AlexNek 02.04.21 22:59

спасибо за ссылку, полезная информация.

#7 
Бесконечный цикл посетитель03.04.21 12:00
NEW 03.04.21 12:00 
в ответ Hawk13 03.04.21 08:56
(так выставлять можно?)



#8 
AlexNek патриот03.04.21 15:39
AlexNek
NEW 03.04.21 15:39 
в ответ Hawk13 03.04.21 08:56

Для кода здесь используется недокументированный тэг pre и самая первая кнопочка с угловыми скобками.

  1. Печатаете пару любых букв
  2. Переходите в редактор
  3. Заменяете p на pre
  4. Вставляете код


#9 
AlexNek патриот03.04.21 15:43
AlexNek
NEW 03.04.21 15:43 
в ответ Hawk13 03.04.21 08:56

но еще лучше прикрепить готовый файл

#10 
AlexNek патриот03.04.21 15:50
AlexNek
NEW 03.04.21 15:50 
в ответ Hawk13 03.04.21 08:56

Ну качество кода комментировать не буду смущ


Но вообще откуда берётся time_value?

И хорошо бы добавить строку

Serial.println(MatrixText);

printMatrix();

#11 
  moose коренной житель03.04.21 22:04
NEW 03.04.21 22:04 
в ответ Hawk13 03.04.21 08:56
(так выставлять можно?)

нет

#12