#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <Adafruit_BMP280.h>
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"воскр", "понед", "вторн", "среда", "четвг", "пятн", "субот"};
Adafruit_BMP280 bmp280;
int mm;
int pinCS = 10; // Uno or Duemilanove DIN 11 (MOSI) CLK 13 (SCK)
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 7; // число матриц
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "";
int wait = 15; // скорость
int spacer = 2; // Промежуток между символами (кол-во точек)
int width = 5 + spacer; // Ширина шрифта 5 пикселей
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
String Serial_Read() {
unsigned char c; // переменная для чтения сериал порта
String Serial_string = ""; // Формируемая из символов строка
while (Serial.available() > 0) { // Если в сериал порту есть символы
c = Serial.read(); // Читаем символ
//Serial.print(c,HEX); Serial.print(" "); Serial.print(c);
if (c == '\n') { // Если это конец строки
return Serial_string; // Возвращаем строку
}
if (c == 0xB8) c = c - 0x01; // Коррекция кодов символа под таблицу ???? так как русские символы в таблице сдвинуты относительно стандартной кодировки utf на 1 символ
if (c >= 0xBF && c <= 0xFF) c = c - 0x01;
Serial_string = Serial_string + String(char(c)); //Добавить символ в строку
}
return Serial_string;
}
String chas;
String myn;
//String mesyc = "";
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280"));
//==================================== часы
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
//====================================
while (!bmp280.begin(BMP280_ADDRESS - 1)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
delay(2000);
}
matrix.setIntensity(3); // Используйте значение между 0 и 15 для яркости
matrix.setRotation(matrix.getRotation()+3); //1 - 90 2 - 180 3 - 270
//a=a+1;
}
void loop() {
DateTime now = rtc.now();
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1014.7);
mm = pressure/133.322;// тут вычисляем мм ртутного столба
//======================================= корекция цыфр времени ноль перед числом
chas ="";
myn = "";
if (now.hour() < 10) {
chas = '0';
}
if (now.minute() < 10) {
myn = ('0');
}
//=======================================
tape = utf8rus((String)+daysOfTheWeek[now.dayOfTheWeek()]+" время "+chas +now.hour()+":"+myn+now.minute()+" температура = "+temperature +"^С время " +chas +now.hour()+":"+myn+now.minute()+ " давление = "+ mm +" мм/рт.ст.");
if (Serial.available()){
tape=Serial_Read();
}
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(); // Отправить картинку для отображения
delay(wait);
}
}
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
2. ....<тут было матом>...
Спасибо, давно так не ржал. :)))))
Над тем, что я запятую перед "если" пропустил? ;))
Спасибо злой кот. почитал, не чего не понял кроме здрасти.На забугорном форуме написали что не хватает памяти для каких то там переменных и предложили несколько вариантов для решения этой проблемы. реализовал как смог.А на счет той строчки над которой ты потешался они написали что все ОК.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <Adafruit_BMP280.h>
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][24] = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "субота"};
//char monthe[12][24] = { "Декабрь","январь","Февраль", "Март", "апрель", "Май", "Июнь", "июль", "Август", "Сентябрь", "Октябрь", "Ноябрь"};
Adafruit_BMP280 bmp280;
int mm;
int pinCS = 10; // Uno or Duemilanove DIN 11 (MOSI) CLK 13 (SCK)
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 7;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "";
int wait = 15; // скорость
int spacer = 2; // Промежуток между символами (кол-во точек)
int width = 5 + spacer; // Ширина шрифта 5 пикселей
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
String Serial_Read() {
unsigned char c; // переменная для чтения сериал порта
String Serial_string = ""; // Формируемая из символов строка
while (Serial.available() > 0) { // Если в сериал порту есть символы
c = Serial.read(); // Читаем символ
//Serial.print(c,HEX); Serial.print(" "); Serial.print(c);
if (c == '\n') { // Если это конец строки
return Serial_string; // Возвращаем строку
}
if (c == 0xB8) c = c - 0x01; // Коррекция кодов символа под таблицу ???? так как русские символы в таблице сдвинуты относительно стандартной кодировки utf на 1 символ
if (c >= 0xBF && c <= 0xFF) c = c - 0x01;
Serial_string = Serial_string + String(char(c)); //Добавить символ в строку
}
return Serial_string;
}
String chas;
String myn;
//String mesyc = "";
int stroka = 0;//переменая строки
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280"));
//==================================== часы
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
//====================================
while (!bmp280.begin(BMP280_ADDRESS - 1)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
delay(2000);
}
matrix.setIntensity(3); // Используйте значение между 0 и 15 для яркости
matrix.setRotation(matrix.getRotation()+3); //1 - 90 2 - 180 3 - 270
//a=a+1;
}
void loop() {
DateTime now = rtc.now();
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1014.7);
mm = pressure/133.322;
//======================================= корекция цыфр времени ноль перед числом
chas ="";
myn = "";
if (now.hour() < 10) {
chas = '0';
}
if (now.minute() < 10) {
myn = ('0');
}
//=======================================
if (stroka == 0) {
tape = utf8rus((String)" "+daysOfTheWeek[now.dayOfTheWeek()]+"");
}
if (stroka == 1) {
tape = utf8rus((String)" время "+chas +now.hour()+":"+myn+now.minute()+" температура = "+temperature +"^С давление = "+ mm +" мм/рт.ст.");
}
stroka += 1;
if (stroka == 2) {
stroka = 0;
}
if (Serial.available()){
tape=Serial_Read();
}
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(); // Отправить картинку для отображения
delay(wait);
}
}
Спасибо злой кот. почитал, не чего не понял кроме здрасти.На забугорном форуме написали что не хватает памяти для каких то там переменных и предложили несколько вариантов для решения этой проблемы. реализовал как смог.А на счет той строчки над которой ты потешался они написали что все ОК.
так я и не потешался, я хотел шаг за шагом тебя по твоему же коду провести за ручку (заняться от неча делать коррекционной педагогикой). Но, если ты это так воспринимаешь, я этова делать не буду.
кстати, массив дней недели, так как он у тебя обьявлен, жрёть 168 байт ОЗУ, а так как у меня - меньше, 117 всего. Чуешь разность на ровном месте?
строка Бога))
ты устанавливаешь температуру и давление среды, совершаешь побитовые операции с температурой и миллиметры делишь на ртутный столб))
я бы сделал через двоеточия, слова писал-бы с Большой Буквы, десятичные через запятую, нарисовал знак градусов ° и давление написал по человечески "мм рт. ст."
Пятница Температура: 27,1°С Давление: 748 мм рт. ст.
и т.д...
но это дело личное, кому как нравится)
ЗЫ: я кодер, но воспитывали меня дизайнеры)) шутка)
начнем, помолясь, с самого начала. Хто тебя вот этому научил?
в этот массив больше 5 символов не залазит.
в этот массив больше 5 символов не залазит.
Но вопрос другой был. Где ты это увидел, или кто тебя научил такому?
а че там не так.
в этот массив больше 5 символов не залазит.
что за бред?
А у меня залазит
выдает ошибку, слишком длинная строка.
initializer-string for array of chars is too long [-fpermissive]
тогда тебе надо чонить за UTF-8 почитать
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
2. ....<тут было матом>...
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
2. ....<тут было матом>...
Спасибо, давно так не ржал. :)))))
1. Это раздел "Проекты", а не "Творчество душевнобольных", поэтому нужно перенести в "Песочницу", и уже там заниматься "коррекционной педагогикой" если кому-то требуется соответствующий скилл-ап.
2. ....<тут было матом>...
Спасибо, давно так не ржал. :)))))
Над тем, что я запятую перед "если" пропустил? ;))
Над тем, что я запятую перед "если" пропустил? ;))
Нет, над меткими характеристиками происходящего
Спасибо злой кот. почитал, не чего не понял кроме здрасти.На забугорном форуме написали что не хватает памяти для каких то там переменных и предложили несколько вариантов для решения этой проблемы. реализовал как смог.А на счет той строчки над которой ты потешался они написали что все ОК.
Спасибо злой кот. почитал, не чего не понял кроме здрасти.На забугорном форуме написали что не хватает памяти для каких то там переменных и предложили несколько вариантов для решения этой проблемы. реализовал как смог.А на счет той строчки над которой ты потешался они написали что все ОК.
так я и не потешался, я хотел шаг за шагом тебя по твоему же коду провести за ручку (заняться от неча делать коррекционной педагогикой). Но, если ты это так воспринимаешь, я этова делать не буду.
кстати, массив дней недели, так как он у тебя обьявлен, жрёть 168 байт ОЗУ, а так как у меня - меньше, 117 всего. Чуешь разность на ровном месте?
кому интересно посмотреть как работает. вот видео.
https://www.youtube.com/watch?v=zJDg0822uLs
А чо даты полной нету ?
А как на счёт датчика BME280?
ты устанавливаешь температуру и давление среды, совершаешь побитовые операции с температурой и миллиметры делишь на ртутный столб))
и т.д...
но это дело личное, кому как нравится)
ЗЫ: я кодер, но воспитывали меня дизайнеры)) шутка)