Сб дек 12, 2020 20:19:59
Вс дек 13, 2020 05:29:22
Вс дек 13, 2020 10:28:10
Вс дек 13, 2020 15:41:24
Вс дек 13, 2020 16:17:06
Вс дек 13, 2020 16:56:35
void convert() { //готовить пиксели к зажиганию
uint8_t pix;
uint16_t tripix;
if (obnovitTablo) {
obnovitTablo = false;
pereliv = true;
//сначала заполняем табло посегментно
#ifdef _b612
for (razryad = 0; razryad < 4; razryad++) //переберём разряды
#endif //#ifdef _b612
#ifdef _Mishany
for (razryad = 0; razryad < 6; razryad++) //переберём разряды
#endif //#ifdef _Mishany
{ razryadx21 = razryad * _LEDNASEGMENT * 7; //чтобы 21 раз не перемножать, перемножимо 1 раз и сохраним в переменную
switch (rejin) { //в зависимости от режима
case AdjChasy://VremyaToDIG();
case AdjMinuty://VremyaToDIG();
case ChasyMinuty: {
VremyaToDIG();
break;
}
case AdjDenNedeli://DayToDIG();
case DenMesyzaINedeli: {
DayToDIG();
break;
}
case AdjSekundy://VremyaMMSSToDIG();
case MinutyISekundy: {
VremyaMMSSToDIG();
break;
}
case AdjGod://YearToDIG();
case God: {
YearToDIG();
break;
}
#ifdef _BMPBME
case Davlenie: {
Davlenie_ToDIG();
break;
}
#ifdef _BME280
case Vlajnost: {
VlajnostToDIG();
break;
}
#endif//#ifdef _BME280
#endif//#ifdef _BMPBME
case RejOsveshennost: {
Osveshennost_ToDIG();
break;
}
case AdjDenMesyza://DateToDIG();
case AdjMesyz://DateToDIG();
case MesyazIDenMesyaza: {
DateToDIG();
break;
}
case RejinSettingsIndex:
case RejinSettings: {
Set_ToDIG();
break;
}
case Temperatura0:
case Temperatura1:
case Temperatura2:
case Temperatura3:
case Temperatura4: {
TermToDIG();
break;
}
case AdjAvtomat: {
A_ToDIG();
break;
}
#ifdef _Budilniki
case AdjBudilnikIndex: {
BudilnikIndex_ToDIG();
break;
}
case AdjBudilnikChasy://{BudilnikVremya_ToDIG();break;}
case AdjBudilnikMinuty: {
BudilnikVremya_ToDIG();
break;
}
case AdjBudilnikWDIndex:
case AdjBudilnikWD: {
BudilnikWD_ToDIG();
break;
}
#endif//#ifdef _Budilniki
#ifdef _Timer
case RejTimer: {
Timer_ToDIG();
break;
}
#endif//#ifdef _Timer
default: {
;
}
}
//if ((rejin >= Temperatura0) && (rejin <= Temperatura9)) {TermToDIG();}
// Serial.print("rejim.");
// Serial.println(rejin,DEC);
// Serial.print("cvet.");
// Serial.println(Cvet,DEC);
#ifdef _Mishany
//добавим смещение, возникающее из за точек
if (razryad >= 2) {
razryadx21 = razryadx21 + 2;
}
if (razryad >= 4) {
razryadx21 = razryadx21 + 2;
}
#endif //#ifdef _Mishany
for (uint8_t segment = 0; segment < 7; segment++) {//переберём сегменты
segmentx3 = segment * _LEDNASEGMENT; //перемножим и сохраним, чтобы потом 7 раз не перемножать
tagmask = pgm_read_byte(&digits[(DIG * 7) + 6 - segment]) * Cvet;
for (pix = 0; pix < _LEDNASEGMENT; pix++) //переберём пиксели в сегментах
{
Tag[razryadx21 + segmentx3 + pix] = tagmask;
//pixels.setPixelColor(razryadx21+segmentx3+pix, r,g,b);
}
}
}
//потушим прибамбасные (не сегментные) пиксели
#ifdef _b612
for (pix = pixTochkaVerh; pix < NUMPIXELS; pix++) {
Tag[pix] = 0;
}
#endif //#ifdef _b612
#ifdef _Mishany
Tag[pixTochkaVerh23] = 0;
Tag[pixTochkaNiz23] = 0;
Tag[pixTochkaVerh45] = 0;
Tag[pixTochkaNiz45] = 0;
#endif //#ifdef _Mishany
//дорабатываем поточечно
switch (rejin) { //в зависимости от режима
case AdjChasy://VremyaPix();
case AdjMinuty://VremyaPix();
case ChasyMinuty: {
VremyaPix();
break;
}
case AdjDenNedeli:{
DayToPix(CvetBelyj);
break;
}
case DenMesyzaINedeli: {
DayToPix(CvetDnyaNedeli);
break;
}
case AdjSekundy://VremyaMMSSToPix();
case MinutyISekundy: {
VremyaMMSSToPix();
break;
}
case AdjGod://YearToPix();
case God: {
YearToPix();
break;
}
case RejOsveshennost: {
Osveshennost_ToPix();
break;
}
case AdjDenMesyza://DateToPix();
case AdjMesyz://DateToPix();
case MesyazIDenMesyaza: {
DateToPix();
break;
}
case RejinSettingsIndex:
case RejinSettings: {
Set_ToPix();
break;
}
#ifdef _BMPBME
case Davlenie: {
Davlenie_ToPix();
break;
}
#endif//#ifdef _BMPBME
case Temperatura0:
case Temperatura1:
case Temperatura2:
case Temperatura3:
case Temperatura4:
{
TermToPix();
break;
}
#ifdef _DublScrToUART
case AdjAvtomat: {
A_ToPix();
break;
}
#endif//#ifdef _DublScrToUART
#ifdef _Budilniki
case AdjBudilnikIndex: {
BudilnikIndex_ToPix();
break;
}
case AdjBudilnikChasy: {
BudilnikVremya_ToPix();
break;
}
case AdjBudilnikMinuty: {
BudilnikVremya_ToPix();
break;
}
case AdjBudilnikWDIndex:
case AdjBudilnikWD: {
BudilnikWD_ToPix();
break;
}
#endif//#ifdef _Budilniki
#ifdef _Timer
case RejTimer: {
Timer_ToPix();
break;
}
#endif//#ifdef _Timer
default: {
;
}
}
#ifdef _DublScrToUART
if (tabloToUART)
{ for (uint8_t i = 0; i <= 6; i++)
{
Serial.write(DIGstr[i]);
}
Serial.write(0x0D);
}
#endif//#ifdef _DublScrToUART
}//obnovitTablo
//приблизим на шаг старую картинку к новой
LocalFlajok = true;//сбрасывается при любом непоследнем сдвиге
for (pix = 0; pix < NUMPIXELS; pix++) {
if ((!VremennoNeSpim) & Spim & (VsegdaDen | (!DenNoch)) ) //будем спать когда пора если всегда день или темно
//соответственно если пора спать но датчик активен и светло, то не спим
{ //если спим то любой базовый цвет будет черный CvetChernyj
basColorR = 0;
basColorG = 0;
basColorB = 0;
}
else
{
basColorR = Palitra[Tag[pix]][0];
basColorG = Palitra[Tag[pix]][1];
basColorB = Palitra[Tag[pix]][2];
}
switch (DelitelYarkosti)//в зависимости от режима
{
case 8: {
basColorR = basColorR / 256;
basColorG = basColorG / 256;
basColorB = basColorB / 256;
//spd = 1;
break;
}
case 7: {
basColorR = basColorR / 128;
basColorG = basColorG / 128;
basColorB = basColorB / 128;
//spd = 1;
break;
}
case 6: {
basColorR = basColorR / 64;
basColorG = basColorG / 64;
basColorB = basColorB / 64;
//spd = 1;
break;
}
case 5: {
basColorR = basColorR / 32;
basColorG = basColorG / 32;
basColorB = basColorB / 32;
//spd = 1;
break;
}
case 4: {
basColorR = basColorR / 16;
basColorG = basColorG / 16;
basColorB = basColorB / 16;
//spd = 1;
break;
}
case 3: {
basColorR = basColorR / 8;
basColorG = basColorG / 8;
basColorB = basColorB / 8;
//spd = 3;
break;
}
case 2: {
basColorR = basColorR / 4;
basColorG = basColorG / 4;
basColorB = basColorB / 4;
//spd = 5;
break;
}
case 1: {
basColorR = basColorR / 2;
basColorG = basColorG / 2;
basColorB = basColorB / 2;
//spd = 10;
break;
}
}
xTag[1] = basColorR;
xTag[0] = basColorG;
xTag[2] = basColorB;
//переберём цвета (RGB)
#ifdef __NeoPixel
tripix = pix * 3;
CurPix = Cur + tripix;
for (uint8_t i = 0; i < 3; i++)
{ if ((CurPix[i]) < (xTag[i])) //определимся надо уменьшать или увеличивать
//если до цели больше чем один шаг, делаем шаг
{ if (((xTag[i]) - (CurPix[i])) > (shagx[i])) {
CurPix[i] = (CurPix[i]) + (shagx[i]);
LocalFlajok = false;
}
//если до цели меньше чем один шаг, приравниваемся к цели
else if (((xTag[i]) - (CurPix[i])) > 0) {
CurPix[i] = xTag[i];
}
}
else
//если до цели больше чем один шаг, делаем шаг
{ if (((CurPix[i]) - (xTag[i])) > shagx[i]) {
(CurPix[i]) = (CurPix[i]) - (shagx[i]);
LocalFlajok = false;
}
//если до цели меньше чем один шаг, приравниваемся к цели
else if (((CurPix[i]) - (xTag[i])) > 0) {
CurPix[i] = xTag[i];
}
}
}
//перенесём в табло
//pixels.setPixelColor(pix, CurPix[1], CurPix[0], CurPix[2]);
#endif
}
if (LocalFlajok) {
pereliv = false; //перелив закончился
}
#ifdef _Zajcy
//зайчики
if (ZajcyOnOFF != 0)
{
//зайцы бегают только когда день и не спим
if (!Spim && DenNoch)
{
uint8_t yark;//яркость зайца
for (pix = 0; pix < 3; pix++) //переберём трёх зайцев
{ if (Tag[zayats[pix][0]] != 0) {
yark = 35; //если бежит по включенному яркоссть одна
}
else {
yark = 6; //если бежит по выключенному яркость другая
}
//Запомним цвет полянки на которой будет сидеть заяц
PolyankaIsporxhena = true;
CurPix = Cur + ((zayats[pix][0]) * 3);
zayats[pix][2] = CurPix[0];
zayats[pix][3] = CurPix[1];
zayats[pix][4] = CurPix[2];
zayats[pix][5] = zayats[pix][0];
switch (pix)
{
case 0: {
#ifdef __NeoPixel
pixels.setPixelColor(zayats[pix][0], yark * 2, 0, 0); //красный
#endif
//spd = spd * 2;
break;
}
case 1: {
#ifdef __NeoPixel
pixels.setPixelColor(zayats[pix][0], 0, yark, 0); //зеленый
#endif
//spd = spd * 3;
break;
}
case 2: {
#ifdef __NeoPixel
pixels.setPixelColor(zayats[pix][0], 0, 0, yark); //синий
#endif
//spd = spd * 4;
break;
}
}
}
}
}
#ifdef __NeoPixel
pixels.show();
#endif
//после того как вывели массив в реальные светики
//восстановим исходные цвета всех полянок
if (PolyankaIsporxhena)
{ for (pix = 0; pix < 3; pix++) //переберём трёх зайцев
{ CurPix = Cur + ((zayats[pix][5]) * 3);
CurPix[0] = zayats[pix][2];
CurPix[1] = zayats[pix][3];
CurPix[2] = zayats[pix][4];
}
PolyankaIsporxhena = false;
}
#else//#ifdef _Zajcy
#ifdef __NeoPixel
pixels.show();
#endif
#endif//#ifdef _Zajcy
}
#ifdef _Zajcy
Сб июн 11, 2022 13:05:10