Hello. I try to flash the LED at the same time and output information to the LED matrix on the basis of Max7219. But nothing happens, the diode changes its state after the entire line of text is displayed on the LED matrix. How to make it so that you can perform some other task during the output of the line on the LED matrix, in this case the LED blinks?
#include "DHT.h"
#include "U8glib.h"
#include <MQ135.h>
#include <Adafruit_GFX.h>
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <DS1302.h>
#include <Thread.h>
#include <Max72xxPanel.h>
#define GRBLED_PIN_R 6
#define GRBLED_PIN_G 5
#define GRBLED_PIN_B 9
#define DHTPIN 12
#define MATRIX_PIN_CS 8 //CS = 8, DIN = 51, CLK = 52
#define MATRIX_HORIZONTAL_DISPLAYS 1
#define MATRIX_VERTICAL_DISPLAYS 8
#define BUZZER 7
#define LED_1 23
#define LED_2 25
#define LED_3 27
#define LED_4 29
#define RELAY_1 31
#define RELAY_2 33
#define RELAY_3 35
#define PHOTO_1 A0
#define PHOTO_2 A1
#define PHOTO_3 A2
#define POT_1 A3
#define POT_2 A4
#define POT_3 A5
#define POT_4 A7
#define POT_5 A8
int PinOut[4] {22, 24, 26, 28};
int PinIn[4] {30, 32, 34, 36};
const char value[4][4]
{ {'1', '2', 'A', '3'},
{'4', '5', 'B', '6'},
{'7', '8', 'C', '9'},
{'*', '0', 'D', '#'}
};
int rgbled_r = 255;
int rgbled_g = 255;
int rgbled_b = 255;
int ph1;
int ph2;
int ph3;
int p1;
int p2;
int p3;
int p4;
int p5;
int gas1 = A10;
int gas2 = A9;
String tape = "";
int wait = 40;
int spacer = 1; //Ширина шрифта 5 пикселей
DS1302 rtc(2, 3, 4); //RST 2, DAT 3, CLK 4
Max72xxPanel matrix = Max72xxPanel(MATRIX_PIN_CS, 1, 8);
DHT dht(DHTPIN, DHT22);
Adafruit_BMP085 bmp;
MQ135 gasSensor = MQ135(gas1);
U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE);
Thread potentiometrThread = Thread();
Thread ledmatrixThread = Thread();
int ledState = LOW;
void draw(int x, int y, char *text)
{
u8g.setFont(u8g_font_unifont);
u8g.drawStr(x, y, text);
}
void keypad()
{
for (int i = 1; i <= 4; i++)
{
digitalWrite(PinOut[i - 1], LOW);
for (int j = 1; j <= 4; j++)
{
if (digitalRead(PinIn[j - 1]) == LOW)
{
// value[i - 1][j - 1];
tone (BUZZER, 2500, 250);
delay(175);
}
}
digitalWrite(PinOut[i - 1], HIGH);
}
}
void setup()
{
matrix.setIntensity(4);
matrix.setRotation(matrix.getRotation() + 3);
bmp.begin();
dht.begin();
ledThread.onRun(potentiometr);
ledThread.setInterval(100);
ledmatrixThread.onRun(ledmatrix);
ledmatrixThread.setInterval(wait);
pinMode(LED_1, OUTPUT);
/*rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(TUESDAY);
rtc.setTime(22, 22, 0);
rtc.setDate(15, 8, 2017);
*/
}
void loop()
{
if (ledThread.shouldRun())
ledThread.run();
if (ledmatrixThread.shouldRun())
ledmatrixThread.run();
}
void led()
{
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(LED_1, ledState);
}
void ledmatrix()
{
String hh = (String)rtc.getTime().hour;
String mm = (String)rtc.getTime().min;
String dd = (String)rtc.getTime().date;
String MM = (String)rtc.getTime().mon;
String ww = (String)rtc.getTime().dow;
String yyyy = (String)rtc.getTime().year;
float pressure = bmp.readPressure() / 133.3;
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float ppm = gasSensor.getPPM();
if (rtc.getTime().hour < 10 && rtc.getTime().hour > 0)
hh = "0" + hh;
else hh = hh;
if (rtc.getTime().min < 10)
mm = "0" + mm;
else mm = mm;
switch (ww.toInt()) {
case 1:
ww = "Montag";
break;
case 2:
ww = "Dienstag";
break;
case 3:
ww = "Mittwoch";
break;
case 4:
ww = "Donnerstag";
break;
case 5:
ww = "Freitag";
break;
case 6:
ww = "Samstag";
break;
case 7:
ww = "Sonntag";
break;
}
switch (MM.toInt()) {
case 1:
MM = "Januar";
break;
case 2:
MM = "Februar";
break;
case 3:
MM = "Marz";
break;
case 4:
MM = "April";
break;
case 5:
MM = "Maei";
break;
case 6:
MM = "Juni";
break;
case 7:
MM = "Juli";
break;
case 8:
MM = "August";
break;
case 9:
MM = "September";
break;
case 10:
MM = "Oktober";
break;
case 11:
MM = "November";
break;
case 12:
MM = "Dezember";
break;
}
tape = "Datum: " + ww + " " + dd + " " + MM + " " + yyyy + " Zeit: " + hh + ":" + mm + " Lufttemperatur: " + String(temperature) + " C Luftfeuchtigkeit: " + String(humidity) + "% Luftdruck: " + String(pressure) + " mmHg Konzentration CO2: " + ppm + " ppm";
for (int i = 0; i < width * tape.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;
while (x + width - spacer >= 0 && letter >= 0) {
if (letter < tape.length()) {
matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
}
letter--;
x -= width;
}
matrix.write();
}
}