а в чем разница? - не вижуНе так ?
if ((millis() - Timer <= 5000) && (key ==0))
{
TimeToArray();FastLED.show();key++;
}
а в чем разница? - не вижуНе так ?
if ((millis() - Timer <= 5000) && (key ==0))
{
TimeToArray();FastLED.show();key++;
}
да, после вызова функции идет ее показ, теоретически можно попробовать вынести ее в сами функции, а не в loopПолучается что key всегда увеличивается и FastLED.show(); происходит 4 раза за цикл ?
хорошо, попробую завтраПосмотри отметки времени
в мониторе не часто выводит, вроде 2 раза, проверюкоторая в промежуток между 0-5 секундой вызывается опять же с бешеной частотой.
а есть ли разница? я думаю нет?Не так ?
Разбери этот код, что бы было понятно все, сначала подумай что будет выведено, потом сравни с тем, что выведет монитор порта.а есть ли разница? я думаю нет?
void setup() {
Serial.begin(115200);
bool f = false;
int key = 0;
if (f)
TimeToArray(); Serial.println("-1111-"); key++;
if (f)
{
TimeToArray(); Serial.println("-2222-"); key++;
}
f = true;
if (f)
TimeToArray(); Serial.println("-3333-"); key++;
if (f)
{
TimeToArray(); Serial.println("-4444-"); key++;
}
Serial.println(key);
}
void loop() {
}
void TimeToArray()
{
Serial.println("TimeToArray");
}
а, ну даРазбери этот код, что бы было понятно все, сначала подумай что будет выведено, потом сравни с тем, что выведет монитор порта.
снова миллисы, ок)точки включили - засекли миллис.
ну это не мой косяк, это было в чьем-то готовом скетче) если с delay, то все показывает исправно, но есть минусы)я на правки, что туда новички вносят - уже смотреть не могу
добавил, буду разбираться с loop...Сделай внутри проверку на то, что бы прошло какое то время с последней проверки.
void setup() {
Serial.begin(115200);
}
void loop() {
uint32_t tmrall=millis()%14000/1000;
String out_str;
static String old_out_str;
switch (tmrall)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
{
out_str="Время:"+String(tmrall);
}
break;
case 6:
case 7:
{
out_str="Температура:"+String(tmrall);
}
break;
case 8:
case 9:
{
out_str="Улица:"+String(tmrall);
}
break;
case 10:
case 11:
{
out_str="Давление:"+String(tmrall);
}
break;
case 12:
case 13:
{
out_str="Что то еще:"+String(tmrall);
}
break;
}
if (old_out_str!=out_str)
{
Serial.println(out_str);
old_out_str=out_str;
}
}
void Dots_on() {
leds[56] = ledColor;
leds[57] = ledColor;
static uint32_t last_dot = millis();
if ((millis() - last_dot) > 1000);
last_dot = millis();
Dots_off();
}
void Dots_off() {
leds[56] = 0x000000;
leds[57] = 0x000000;
}
мне вообще не понравились эти switch и case, у bort вроде код на них, такая каша, как по мне и весь код в loop)Я захотел использовать switch, т.к. на мой взгляд это более наглядно и менее запутано
почему-то не выводит TimeToArray в первый раз)Разбери этот код
uint32_t sec = millis() / 1000ul;
int timeSecs = (sec % 3600ul) % 60ul;
Dot = second % 2; //из GetTime()
boolean Dots = true;
if (Dot == 0) Dots = false; else Dots = true;
if (Dots){leds[56] = ledColor;
leds[57] = ledColor;}
else {leds[56] = 0x000000;
leds[57] = 0x000000;}
мне вообще не понравились эти switch и case, у bort вроде код на них, такая каша,
byte mode;
switch (mode){
case 0:{
uint32_t Timer_Time;
Timer_Time = millis();
if (millis() - Timer_Time <=5000)
Timer_Time = millis();
TimeToArray();
break;
}
case 1:{
uint32_t Timer_Temp;
Timer_Temp = millis();
if (millis() - Timer_Temp <=2000)
TempToArray();
break;
}
case 2:{
uint32_t Timer_TempS;
Timer_TempS = millis();
if (millis() - Timer_TempS <=2000)
TempStreetToArray();
break;
}
case 3:{
uint32_t Timer_Press;
Timer_Press = millis();
if (millis() - Timer_Press <=2000)
PressToArray();
break;
}
}
FastLED.show();
for (mode = 0; mode <=3; mode++)
ASMmin и max меняешь местами, посмотрел код, закомментировано немного не то)
в конце видео отчетливо заметны точки, которые передержались)
может тогда запихнуть вызов в функцию с датчиками или часами?
byte mode;
uint32_t Timer_Time,Timer_Temp,Timer_TempS,Timer_Press;
for (mode = 0; mode <= 3; mode++) { //выводим по порядку
switch (mode) {
case 0:
Timer_Time = millis(); //сбросим счетчик
if (millis() - Timer_Time <= 5000) { //выводим в течении 5 секунд
TimeToArray(); //показания часов
}
break;
case 1:
Timer_Temp = millis(); //сбросим счетчик
if (millis() - Timer_Temp <= 2000) { //выводим в течении 2 секунд
TempToArray(); //показания датчика
}
break;
case 2:
Timer_TempS = millis(); //сбросим счетчик
if (millis() - Timer_TempS <= 2000) { //выводим в течении 2 секунд
TempStreetToArray(); //показания датчика
}
break;
case 3:
Timer_Press = millis(); //сбросим счетчик
if (millis() - Timer_Press <= 2000) { //выводим в течении 2 секунд
PressToArray(); //показания датчика
}
break;
}
}
FastLED.show();
void setup() {
Serial.begin(115200);
}
void loop() {
uint32_t tmrall = millis() % 12000 / 1000;
static uint32_t tmrall_old = 10000;
if (tmrall_old != tmrall)
{
tmrall_old = tmrall;
if (tmrall < 6)
{
Serial.println("Заносим время в матрицу");
//TimeToArray();
} else if (tmrall < 8)
{
Serial.println("Заносим темепературу в матрицу");
//TempToArray();
}
else if (tmrall < 10)
{
Serial.println("Заносим уличную темепературу в матрицу");
//TempStreetToArray();
}
else
{
Serial.println("Заносим давление в матрицу");
//PressToArray();
}
};
/*
if (tmrall_old != tmrall)
{
tmrall_old = tmrall;
switch (tmrall)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
{
Serial.println("Заносим время в матрицу");
//TimeToArray();
}
break;
case 6:
case 7:
{
Serial.println("Заносим темепературу в матрицу");
//TempToArray();
}
break;
case 8:
case 9:
{
Serial.println("Заносим уличную темепературу в матрицу");
//TempStreetToArray();
}
break;
case 10:
case 11:
{
Serial.println("Заносим давление в матрицу");
//PressToArray();
}
break;
}
Serial.println("Обновление!");
// тут надо фастледшоу раз в секунду
}*/
}
uint32_t tmrall = millis() % 12000 / 1000;
static uint32_t tmrall_old = 10000;
if (tmrall_old != tmrall)
{
tmrall_old = tmrall;
if (tmrall < 6)
{
TimeToArray(); FastLED.show();
}
else if (tmrall < 8)
{
TempToArray(); FastLED.show();
}
else if (tmrall < 10)
{
TempStreetToArray(); FastLED.show();
}
else
{
PressToArray(); FastLED.show();
}
};
13:08:53.676 -> 13:9:28
13:08:54.660 -> 13:9:29
13:08:55.692 -> 13:9:30
13:08:56.675 -> 13:9:31
13:08:57.658 -> 13:9:32
13:08:58.690 -> 13:9:33
13:09:00.174 -> 23
13:09:01.206 -> 23
13:09:01.672 -> 2
13:09:02.696 -> 2
13:09:04.198 -> 744
13:09:05.183 -> 744
нет, спасибо, все понятно, на этом участке кода не так заметно, что хотел показать, я про мс интервалы.Или еще что то странное и непонятное есть ?
это про что? вроде все исправно...А надо еще корректировать часы
void loop ()
{
static bool f1=true; // флаг для температуры в помещении
static bool f2=true;// флаг для температуры на улице
...
if (tmrall < 6)
{
TimeToArray(); [S]FastLED.show();[/S]
f1=true;
f2=true;
}
...
else if (tmrall < 8)
{
if (f1)
{
TempToArray();
f1=false;
}
...
}
[CODE]
То частота запросов времени будет 2 раза в секунду, а запросы температур будут только при 1-ом выводе и все. И давления туда же.
ДА! И только что заметил! Уберите на FastLED.show(); из каждого if и поставьте в одном месте, в куске кода между 21 и 22 строкой в посте 342
кнопки есть, но корректировка времени происходит раз в несколько месяцев, добавляю не более 2 минут)Кнопки то есть какие ?
развивая эту идею - можно по этому целому числу выбирать что показывать с помощью switch()Вот смотри
uint32_t tmrall = millis() % 12000 / 1000;
тут 12000 это полный цикл в секундах. При получении остатка от него у нас будут числа от 0 до 11999. Далее делю на 1000 и получаю целое число в диапазоне от 0 до 11.
надо, но часы на ардуино, все датчики припаяны) Может кто-то соберет пока для одних часов, чтобы можно было потом добавить другие датчики и перепаять)на ESP8266 надо разрабатывать