// v5: Serial - Arduino, Serial1 - Nextion // v6: // v7: // v8: ( , , ) // v9: DHT.h Adafruit // v10: , // v11: CO2/PM2.5 // v12: , reDraw statusBoolean = true // ToDo: 40 , , ( ) #include <DHT.h> #include <RCSwitch.h> // http://code.google.com/p/rc-switch/ #include <MQ135.h> // CO2 #define measurePin A1 // analog #define ledPower 12 // digital #define samplingTime 280 #define deltaTime 40 #define sleepTime 9680 float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; float ppm = 0; #define analogPin A0 // MQ135 A0 Arduino MQ135 gasSensor = MQ135(analogPin); // // #define tempInX 10 #define tempOutX 380 // 415 #define humidityInX 320 //325 #define humidityOutX 410 #define pressureX 20 // 10 #define ppmX 20 #define pmX 370 #define Y0 0 // #define Y1 5 // , #define Y2 125 // #define Y3 230 // ppm&pm #define dotY 125 // #define minusY 115// // #define minusXOut 380 // #define minusXIn 10 // #define minusH 3 // #define minusPicID 2 #define symbolID 1 // #define statusTimeOut 2200000 // "" (, ) 900000 #define updateTimeOut 300000 // 60000 (300000) #define historyTimeOut 1800000 // (1800000) #define selectionTimeOut 5000 // #define backLightTimeOut 300000 // #define waveLimit 254 int parameterS[7]; // . : tempIn, tempOut, humidityIn, humidityOut, pressure, ppm, pm byte statusS[7]; // ( / ) boolean statusBoolean[7]; // /* // int coordinateX[7] = {tempInX, tempOutX, humidityInX, humidityOutX, pressureX, ppmX, pmX}; int coordinateY[7] = {Y2, Y2, Y1, Y1, Y1, Y3, Y3}; */ // // : tempIn, tempOut, humidityIn, humidityOut, pressure, ppm, pm int historyArray[7][48]; // 7 48 boolean drawArray[7]; // int arrayMax; // int arrayMin; byte waveShift; // waveform 0 - 255 float arrayNorm; // byte count=0; // byte arrayCounter; // byte waveCount; // int splitData[4]; // [, , , ] byte thousands, hundreds, tens, ones; // int tempIn, tempOut, humidityIn, humidityOut, pressure; // int tempIn, tempOut, humidityIn, humidityOut, pressure, ppm, pm; int symbolX0; int posX; // X byte tempInStatus, tempOutStatus, humidityInStatus, humidityOutStatus, pressureStatus, ppmStatus, pmStatus; // StatusTimeOut byte symbolCount, symbolWidth; boolean minusIn = false; // boolean minusOut = false; byte i = 0; // unsigned long statusTime, updateTime, historyTime, selectionTime, backLightTime; String stringToNextion; byte historyCount; boolean backLight; // int weatherData = 0; int dht22Humidity = 0; //CLICKER VARIABLE SECTION byte buffer[30]; // buffer for bytes coming from HMI. byte waveCounter = 0; // // boolean drawArray[7]; // boolean allClear; byte currentPage = 0; // byte searchTarget, searchNumber, searchCounter, pageNum, drawCounter, channelToDraw; // int historyArray[7][48]; // 7 48 // int arrayMax; // // int arrayMin; // byte waveShift; // waveform 0 - 255 // float arrayNorm; // byte iconCounter = 0; // int splitData[4]; // [, , , ] // int posX; // X // byte count = 0; // // String stringToNextion; // int symbolX0; // byte symbolCount; // #define minusH 3 // #define minusPicID 2 // int axisX[5][7] = {{10, 380, 320, 410, 20, 20, 370}, // 0 {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}; // 1-4 int axisY[5][7] = {{115, 115, 5, 5, 5, 230, 230}, // 0 {145,0, 0, 0, 0, 0, 0}, // 1 {63, 226, 0, 0, 0, 0, 0}, // 2 {37, 145, 253, 0, 0, 0, 0 }, // 3 {25, 105, 185, 265, 0, 0, 0}}; // 4 byte symbolW[5][11] = {{25, 15, 30, 25, 30, 30, 25, 30, 25, 30, 5}, {11, 6, 12, 12, 14, 13, 12, 13, 12, 12, 3}, {11, 6, 12, 12, 14, 13, 12, 13, 12, 12, 3}, {11, 6, 12, 12, 14, 13, 12, 13, 12, 12, 3}, {11, 6, 12, 12, 14, 13, 12, 13, 12, 12, 3}};// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 // {13, 7, 15, 13, 17, 15, 13, 14, 14, 14, 5} 25 Comfortaa Light byte numberPic[5] = {1, 3, 3, 3, 3}; // ID byte symbolH[5] = {60, 18, 18, 18, 18}; // 25 25 Comfortaa Light // CLICKER VARIABLE SECTION ENDS // TREND VARIABLE SECTION #define x2 70 // int trendArray[3][6] = {{0, 0, 0, 0, 0, 0}, // {-5, -3, -1, 1, 3, 5}, {0, 0, 0, 0, 0, 0}}; int sumY, sumXY; byte trendCount; int trend; // TREND VARIABLE SECTION ENDS #define DHTPIN 7 #define DHTTYPE DHT22 // Setup a DHT22 instance DHT dht(DHTPIN, DHTTYPE); // Setup RC-Switch RCSwitch mySwitch = RCSwitch(); void sendToNextion() { Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } // void drawMark(byte mark, byte markNum) { int markX; // if (allClear == true) { allClear = false; } markX = axisX[0][markNum]; if (markNum == 1 || markNum == 3 || markNum == 6) { markX = 475; } if (markNum == 0 || markNum == 4 || markNum == 5) { markX = 0; } if (markNum == 2) { markX = markX - 15; } stringToNextion = String("fill "); stringToNextion = stringToNextion + String(markX); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(axisY[0][markNum]+30); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("5"); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("30"); stringToNextion = stringToNextion + String(","); if (mark == 1) { stringToNextion = stringToNextion + String("RED"); // 0, 0 // Serial2.println("Mark set"); } if (mark == 0) { stringToNextion = stringToNextion + String("BLACK"); // 0, 0 // Serial2.println("Mark clear"); } // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); } // : void clearSelection() { for (byte jj = 0; jj < 7; jj++) { if (drawArray[jj] == true) { drawArray[jj] = false; drawMark(0, jj); } } allClear = true; // waveCounter = 0; } void updateHistory() { mySwitch.disableReceive(); // , - , for (arrayCounter = 0; arrayCounter < 7; arrayCounter++) { // Serial2.print("StatusBoolean for array #");// Serial2.print(arrayCounter);// Serial2.print(" = "); // Serial2.println(statusBoolean[arrayCounter]); if (statusBoolean[arrayCounter] == true) { // for (i = 47; i > 0; i--) { historyArray[arrayCounter][i] = historyArray[arrayCounter][i-1]; // } historyArray[arrayCounter][0] = parameterS[arrayCounter]; // } // statusBoolean[arrayCounter] = false; // , } for (arrayCounter = 0; arrayCounter < 7; arrayCounter++) { for (i = 0; i < 47; i++) { // Serial2.print(historyArray[arrayCounter][i]);// Serial2.print(", "); } // Serial2.println(); } // Serial2.println(); mySwitch.enableReceive(0); } void drawTrend(byte arrayToTrend) { int markX; markX = axisX[0][arrayToTrend]; // X if (arrayToTrend == 1 || arrayToTrend == 3 || arrayToTrend == 6) { markX = 472; } if (arrayToTrend == 0 || arrayToTrend == 4 || arrayToTrend == 5) { markX = 0; } if (arrayToTrend == 2) { markX = markX - 15; } stringToNextion = String("xpic "); stringToNextion = stringToNextion + String(markX); // X stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(axisY[0][arrayToTrend]); // Y stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("8"); // 7x18 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("18"); // stringToNextion = stringToNextion + String(","); if (trend > 0) { stringToNextion = stringToNextion + String("0"); // 0 stringToNextion = stringToNextion + String(","); // stringToNextion = stringToNextion + String("0"); // Y 0 } if (trend < 0) { stringToNextion = stringToNextion + String("8"); // 5 stringToNextion = stringToNextion + String(","); // stringToNextion = stringToNextion + String("0"); // Y 0 } if (trend == 0) { stringToNextion = stringToNextion + String("16"); // 10 stringToNextion = stringToNextion + String(","); // stringToNextion = stringToNextion + String("0"); // Y 0 } stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("5"); // ID // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); } void splitRoutine(int input) { input = abs(input); // , for (count = 0; count < 4; count++) { splitData[count] = 0; // } count = 0; if (input > 9999) { // count = 5; } else { if (input > 999) { // 9999 splitData[3] = input/1000; input = input - splitData[3]*1000; count = 4; /* Serial.print("SplitData Count 4:"); Serial.println(splitData[3]); */ } if (input > 99) { // 999 splitData[2] = input/100; input = input - splitData[2]*100; if (count == 0) { count = 3; /* Serial.print("SplitData Count 3:"); Serial.println(splitData[2]); */ } } if (input > 9) { // 99 splitData[1] = input/10; input = input - splitData[1]*10; if (count == 0) { count = 2; /* Serial.print("SplitData Count 2:"); Serial.println(splitData[1]); */ } } if (input < 10) { splitData[0] = input; if (count == 0) { count = 1; /* Serial.print("SplitData Count 1:"); Serial.println(splitData[0]); */ } } } /* Serial.print("Input = "); Serial.println(input); Serial.print("Count = "); Serial.println(count); */ } void drawRoutine(byte page, int value, byte type, int drawX, int drawY) { mySwitch.disableReceive(); // page - ; value = ; type = ; drawX X, drawY - Y boolean minusSign = false; splitRoutine(value); if (page == 0) { // // ( pm25) ( 470 = 480 - 10) if (type == 1) { // drawX = 470 - count*30 - 5; // 10 , 30 + 5 if (count == 1) { drawX = drawX - 30; // 0, } } if (type == 6) { // pm25 drawX = 470 - count*30 - 5; // 20 , 30 if (count == 1) { drawX = drawX - 30; } } } int posX = drawX; if (value < 0) { minusSign = true; } if (count < 5) { // 9999 if ((count == 1) && ((type == 0) || (type == 1) || (type == 6))) { // pm2.5 0, 0 // xpic X, Y, , , X, Y, // stringToNextion = String("xpic "); stringToNextion = stringToNextion + String(drawX); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(drawY); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolW[page][0]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolH[page]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String("0"); // 0, 0 stringToNextion = stringToNextion + String(","); // 0, 0 stringToNextion = stringToNextion + String("0"); // 0, 0 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(numberPic[page]); // // Serial2.println("Temp leading zero"); // // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); drawX = drawX + symbolW[page][0]; // 0 } // count = 1 for (byte ii = count; ii > 0; ii--) { // , if ((ii == 1) && ((type == 0) || (type == 1) || (type == 6))) { // , stringToNextion = String("xpic "); stringToNextion = stringToNextion + String(drawX); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(drawY); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolW[page][10]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolH[page]); stringToNextion = stringToNextion + String(","); if (page == 0) { stringToNextion = stringToNextion + String("265"); // 265 } else { stringToNextion = stringToNextion + String("118"); // 135 Comfortaa Light 25 } stringToNextion = stringToNextion + String(","); // stringToNextion = stringToNextion + String("0"); // Y 0 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(numberPic[page]); // // Serial2.println("Temp decimal dot"); // // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); drawX = drawX + symbolW[page][10]; // } // ii == 1 && type == 0 || type == 1 // symbolX0 = 0; // for (symbolCount = 0; symbolCount < (splitData[ii-1]);symbolCount++) { // X ( ) symbolX0 = symbolX0 + symbolW[page][symbolCount]; } stringToNextion = String("xpic "); stringToNextion = stringToNextion + String(drawX); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(drawY); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolW[page][splitData[ii-1]]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolH[page]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(symbolX0); // 0, 0 stringToNextion = stringToNextion + String(","); // 0, 0 stringToNextion = stringToNextion + String("0"); // 0, 0 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(numberPic[page]); // // Serial2.print("Symbol: "); // Serial2.println(splitData[ii-1]); // // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); drawX = drawX + symbolW[page][splitData[ii-1]]; } if (minusSign == true) { /* symbolX0 = 0; // for (byte ii = count; ii > 0; ii--) { symbolX0 = symbolX0 + symbolW[page][splitData[ii-1]]; } */ stringToNextion = String("xpic "); stringToNextion = stringToNextion + String(posX); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(drawY-8); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(drawX - posX); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(minusH); // stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(0); // 0, 0 stringToNextion = stringToNextion + String(","); // 0, 0 stringToNextion = stringToNextion + String("0"); // 0, 0 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(minusPicID); // // Serial2.print("Symbol: "); // Serial2.println(splitData[ii-1]); // // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); } } // if count < 5 9999 mySwitch.enableReceive(0); } // ( ) void getMinMax(byte arrayToMax, byte maxCount) { byte getMaxCount = 0; arrayMax = historyArray[arrayToMax][getMaxCount]; // arrayMin = historyArray[arrayToMax][getMaxCount]; // for (byte getMaxCount = 0; getMaxCount < maxCount; getMaxCount++) { // maxCount 47 , 6 if (historyArray[arrayToMax][getMaxCount+1] > arrayMax){ arrayMax = historyArray[arrayToMax][getMaxCount+1]; } if (arrayMin > historyArray[arrayToMax][getMaxCount+1]){ arrayMin = historyArray[arrayToMax][getMaxCount+1]; } } } void getTrend(byte arrayToTrend) { mySwitch.disableReceive(); getMinMax(0, 6); // for (trendCount = 0; trendCount < 6; trendCount++) { if (arrayMin < 0) { trendArray[0][trendCount] = historyArray[arrayToTrend][5-trendCount] + abs(arrayMin); // } else { trendArray[0][trendCount] = historyArray[arrayToTrend][5-trendCount]; } } sumY = 0; sumXY = 0; // , XY for (trendCount = 0; trendCount < 7; trendCount++) { sumY = sumY + trendArray[0][trendCount]; sumXY = sumXY + trendArray[0][trendCount]*trendArray[1][trendCount]; } trend = (int) (sumY/10 + (sumXY/x2)*trendArray[1][5]) - (sumY/10 + (sumXY/x2)*trendArray[1][0])+0.5; // Serial2.print("Trend: "); // Serial2.println(trend); drawTrend(arrayToTrend); mySwitch.enableReceive(0); } void reDraw() { mySwitch.disableReceive(); // Serial2.println("Redraw main page"); /* for (i = 0; i < 7; i++) { parameterS[i] = random(255); statusS[i] = 1; } */ Serial.print("page 0"); sendToNextion(); // Serial.print("pic 0,0,6"); // sendToNextion(); for (i = 0; i < 7; i++) { // Serial2.print("StatusBoolean on reDraw for item "); // Serial2.print(i); // Serial2.print(" is "); // Serial2.println(statusBoolean[i]); if (statusBoolean[i] == true) { // " " drawRoutine(currentPage, parameterS[i], i, axisX[currentPage][i], axisY[currentPage][i]); // Serial2.print("Redraw, ");// Serial2.print(i); // Serial2.print(": "); // Serial2.println(parameterS[i]); if (historyCount > 5) { getTrend(i); } } } mySwitch.enableReceive(0); } void getNorm() { arrayNorm = 1.00; // 1:1 arrayNorm = abs(arrayMax - arrayMin); arrayNorm = waveLimit/arrayNorm; // } void drawHistory(byte arrayCounter, byte waveCount){ mySwitch.disableReceive(); byte tC01 = 0; byte tC02 = 0; int interPoint, lineMulti; int justPoint; byte channelCount = 0; // , (ID = 0), getMinMax(arrayCounter, 47); // 47 , 39, , // // Serial2.print("arrayMax: "); // Serial2.println(arrayMax); // // Serial2.print("arrayMin: "); // Serial2.println(arrayMin); getNorm(); if (currentPage == 2) { arrayNorm = arrayNorm*0.5; } if (currentPage == 3) { arrayNorm = arrayNorm*0.3; } if (currentPage == 4) { arrayNorm = arrayNorm*0.2; } // // Serial2.print("arrayNorm: "); // Serial2.println(arrayNorm); // stringToNextion = String("add "); // stringToNextion = stringToNextion + String(waveCount); // ID stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(channelCount); // 0, 1, 2 3 stringToNextion = stringToNextion + String(","); if (arrayMin < 0) { justPoint = (int) (historyArray[arrayCounter][tC01] + abs(arrayMin))*arrayNorm + 0.5; stringToNextion = stringToNextion + String(justPoint); // } else { justPoint = (int) historyArray[arrayCounter][tC01]*arrayNorm + 0.5; stringToNextion = stringToNextion + String(justPoint); // } Serial.print(stringToNextion); // // Serial2.print("First point, original");// Serial2.println(historyArray[arrayCounter][tC01]); // // Serial2.print("First point: "); // Serial2.println(stringToNextion); sendToNextion(); for (tC01 = 0; tC01 < 46; tC01++) { // 37 46 lineMulti = (historyArray[arrayCounter][tC01+1] - historyArray[arrayCounter][tC01])/9; // if (arrayMin < 0) { justPoint = (int) historyArray[arrayCounter][tC01] + abs(arrayMin) + lineMulti+0.5; interPoint = justPoint; } else { justPoint = (int) historyArray[arrayCounter][tC01] + lineMulti + 0.5; interPoint = justPoint; } for (tC02 = 0; tC02 < 7; tC02++) { // , , 9 stringToNextion = String("add "); // stringToNextion = stringToNextion + String(waveCount); // (1, 2, 3 4 ) stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(channelCount); // 0, 1, 2 3 stringToNextion = stringToNextion + String(","); justPoint = (int) interPoint*arrayNorm; stringToNextion = stringToNextion + String(justPoint); interPoint = (int) interPoint + lineMulti; Serial.print(stringToNextion); // // Serial2.print("Connecting point: "); // Serial2.println(stringToNextion); sendToNextion(); } stringToNextion = String("add "); // stringToNextion = stringToNextion + String(waveCount); // (1, 2, 3 4 ) stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(channelCount); // 0, 1, 2 3 stringToNextion = stringToNextion + String(","); if (arrayMin < 0) { justPoint = (int) (historyArray[arrayCounter][tC01+1] + abs(arrayMin))*arrayNorm + 0.5; stringToNextion = stringToNextion + String(justPoint); // } else { justPoint = (int) historyArray[arrayCounter][tC01+1]*arrayNorm + 0.5; stringToNextion = stringToNextion + String(justPoint); // } Serial.print(stringToNextion); // // Serial2.print("Next/Last point, original: ");// Serial2.println(historyArray[arrayCounter][tC01+1]); // // Serial2.print("Next/Last point: "); // Serial2.println(stringToNextion); sendToNextion(); } mySwitch.enableReceive(0); } void drawIcon(int where, byte what) { //// Serial2.print("Where: "); // Serial2.println(where); //// Serial2.print("What: "); // Serial2.println(what); stringToNextion = String("xpic "); stringToNextion = stringToNextion + String("0"); // String(axisX[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(where-3); // String(axisY[page, type]); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(80); // stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(30); stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(what*80); // X = 80* stringToNextion = stringToNextion + String(","); // stringToNextion = stringToNextion + String("0"); // Y 0 stringToNextion = stringToNextion + String(","); stringToNextion = stringToNextion + String(4); //// Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); } void toPage(byte pageNum) { mySwitch.disableReceive(); currentPage = pageNum; /* // stringToNextion = String("ref page"); stringToNextion = stringToNextion + String(pageNum); Serial.print(stringToNextion); sendToNextion(); */ // String stringToNextion = String("page "); stringToNextion = stringToNextion + String(pageNum); // // Serial2.print("Switch to: "); // Serial2.println(stringToNextion); Serial.print(stringToNextion); sendToNextion(); if (pageNum == 0) { clearSelection(); reDraw(); } // if (pageNum > 0) { if (pageNum == 1 && waveCounter > 1) { // // // Serial2.print("Draw single, searchCounter-1: "); // Serial2.println(searchCounter-1); getMinMax(searchCounter-1, 47); // // // Serial2.print("arrayMax: "); // Serial2.println(arrayMax); // // Serial2.print("arrayMin: "); // Serial2.println(arrayMin); drawRoutine(pageNum, arrayMax, searchCounter-1, 0, 117); // 115 drawIcon(145, searchCounter-1); drawRoutine(pageNum, arrayMin, searchCounter-1, 0, 185); // 175 drawHistory(searchCounter-1, 1); // : } else { // iconCounter = 0; for (drawCounter = 0; drawCounter < 7; drawCounter++) { if (drawArray[drawCounter] == true) { // // Serial2.print("pageNum: "); // Serial2.println(pageNum); // // Serial2.print("iconCounter: "); // Serial2.println(iconCounter); // // Serial2.print("drawCounter: "); // Serial2.println(drawCounter); getMinMax(drawCounter, 39); // 39 47 // // Serial2.print("arrayMax: "); // Serial2.println(arrayMax); // // Serial2.print("arrayMin: "); // Serial2.println(arrayMin); drawRoutine(pageNum, arrayMax, drawCounter, 0, axisY[pageNum][iconCounter]-22); // -30 drawIcon(axisY[pageNum][iconCounter], drawCounter); drawRoutine(pageNum, arrayMin, drawCounter, 0, axisY[pageNum][iconCounter]+35); // +30 iconCounter++; } } channelToDraw = 1; // , , - for (drawCounter = 0; drawCounter < 7; drawCounter++) { // " " if (drawArray[drawCounter] == true) { drawHistory(drawCounter, channelToDraw); // // Serial2.print("drawCounter / channelToDraw "); // Serial2.print(drawCounter); // Serial2.print(" | "); // Serial2.println(channelToDraw); channelToDraw++; } } } } mySwitch.enableReceive(0); } void setup() { pinMode(ledPower,OUTPUT); // pinMode(measurePin, INPUT); pinMode(4, OUTPUT); digitalWrite(4, HIGH); currentPage = 0; allClear = true; historyCount = 0; // backLight = true; // , false // // . : tempIn, tempOut, humidityIn, humidityOut, pressure, ppm, pm for (i = 0; i < 7; i++) { parameterS[i] = 0; statusS[i] = 1; } // for (arrayCounter = 0; arrayCounter < 7; arrayCounter++) { for (i = 0; i<48; i++) { historyArray[arrayCounter][i]=0; } } statusTime = millis(); updateTime = millis(); historyTime = millis(); backLightTime = millis(); Serial.begin(9600); Serial.print("baud=57600"); sendToNextion(); Serial.end(); Serial.begin(57600); Serial.print("baud=57600"); sendToNextion(); // Serial2.begin(115200); dht.begin(); mySwitch.enableReceive(0); delay(2000); Serial.print("page 0"); sendToNextion(); // Serial2.println("Ready"); reDraw(); } void loop() { // if (mySwitch.available()) { // int value = mySwitch.getReceivedValue(); if (value != 0) { // Serial2.print("RC-Switch: "); // Serial2.println(mySwitch.getReceivedValue()); // if (mySwitch.getReceivedValue() / 100000 == 161) { weatherData = mySwitch.getReceivedValue() - 16100000; if (weatherData > 10000) { // parameterS[3] = (weatherData - 10000)/10; statusS[3] = statusS[3]+1; statusBoolean[3] = true; } else { // if (weatherData > 1000) { // parameterS[1] = -(weatherData - 1000); minusOut = true; } else { // parameterS[1] = weatherData; minusOut = false; } } statusS[1] = statusS[1]+1; statusBoolean[1] = true; } // if (mySwitch.getReceivedValue() / 10000 == 1210) { parameterS[4] = (mySwitch.getReceivedValue() - 12100000) / 1.33; // statusS[4] = statusS[4]+1; statusBoolean[4] = true; // Serial2.print("Pressure: "); // Serial2.println(parameterS[4]); } if (mySwitch.getReceivedValue() / 100000 == 131) { weatherData = mySwitch.getReceivedValue() - 13100000; if (weatherData > 1000) { // parameterS[0] = -(weatherData - 1000); minusIn = true; } else { // parameterS[0] = weatherData; minusIn = false; } statusS[0] = statusS[0]+1; statusBoolean[0] = true; } // if (mySwitch.getReceivedValue() / 10000 == 1212) { parameterS[2] = (mySwitch.getReceivedValue() - 12120000); // statusS[2] = statusS[2]+1; statusBoolean[2] = true; // Serial2.print("HumidityIn: "); // Serial2.println(parameterS[2]); } // CO2 PPM if (mySwitch.getReceivedValue() / 10000 == 1213) { parameterS[5] = (mySwitch.getReceivedValue() - 12130000); // CO2 statusS[5] = statusS[5]+1; statusBoolean[5] = true; // Serial2.print("CO2 PPM: "); // Serial2.println(parameterS[5]); } // PM2.5 if (mySwitch.getReceivedValue() / 10000 == 1214) { parameterS[6] = (mySwitch.getReceivedValue() - 12140000); // PM2.5 statusS[6] = statusS[6]+1; statusBoolean[6] = true; // Serial2.print("PM2.5: "); // Serial2.println(parameterS[6]); } } mySwitch.resetAvailable(); // mySwitch.enableReceive(0); // RC Switch } // if (currentPage == 0) { if ((millis() - selectionTime) > selectionTimeOut) { if (allClear == false) { clearSelection(); } } } if (Serial.available()) { bool moretocome = true; int endcount = 0; int bytesread = 0; byte inbyte; //bool isascii = false; while (moretocome) { inbyte = Serial.read(); delay(2); if (inbyte == 0xFF) { endcount++; if (endcount == 3) { moretocome = false; // Serial2.println(""); } } else { endcount = 0; } buffer[bytesread] = inbyte; bytesread++; } for (int x = 0; x < bytesread; x++) { // Serial2.print(buffer[x], HEX); // Serial2.print(" "); } //// Serial2.println(bytesread, DEC); // Serial2.println(""); } if (buffer[0] == 101) { // backLightTime = millis(); // if (backLight == false) { // , // Serial2.println("Backlight 50%"); Serial.print("dim=100"); // sendToNextion(); backLight = true; // } else { // if (buffer[1] == 0) { // selectionTime = millis(); if (buffer[2] < 8) { // if (waveCounter < 4) { // 4 if (drawArray[buffer[2]-1] == false) { // drawArray[buffer[2]-1] = true; // , drawMark(1, buffer[2]-1); waveCounter = waveCounter + 1; // // // Serial2.print("Set button: "); // Serial2.println(buffer[2]); // // Serial2.print("Total buttons: "); // Serial2.println(waveCounter); } else { drawArray[buffer[2]-1] = false; // drawMark(0, buffer[2]-1); if (waveCounter > 0) { waveCounter = waveCounter - 1; } // // Serial2.print("Clear button: "); // Serial2.println(buffer[2]); // // Serial2.print("Total buttons: "); // Serial2.println(waveCounter); } } else { // if (drawArray[buffer[2]-1] == true) { // , drawArray[buffer[2]-1] = false; // drawMark(0, buffer[2]-1); waveCounter = waveCounter - 1; // // // Serial2.print("Clear button: "); // Serial2.println(buffer[2]); // // Serial2.print("Total buttons: "); // Serial2.println(waveCounter); } } } else { // currentPage = waveCounter; toPage(waveCounter); } } else { if (currentPage > 1) { // , ID = 5 0 if (buffer[2] == 5) { toPage(0); } } if (currentPage == 1) { // 1 , ID = 5 0 if (buffer[2] == 5) { if (waveCounter == 1) { toPage(0); } else { toPage(waveCounter); // } } } if (currentPage == 1) { // 1 ID = 6 - if (buffer[2] == 6) { toPage(0); } } // if (currentPage > 1) { // 1, . 1 if (buffer[2] > 5) { // ID > 2, .. // // Serial2.print("Buffer[2]: "); // // Serial2.println(buffer[2]); // // Serial2.print("Normalized button: "); searchTarget = buffer[2] - 5; // "" , , : 1 - - true drawarray 1 searchNumber = 0; searchCounter = 0; // // Serial2.println(searchTarget); while ((searchCounter < 7) && (searchNumber < searchTarget)) { if (drawArray[searchCounter] == true) { searchNumber++; } searchCounter++; } // // Serial2.print("searchCounter: "); // Serial2.println(searchCounter); toPage(1); // } } } } } buffer[0] = 0; // *Status 1 // // : , 9 if ((millis() - statusTime) > statusTimeOut) { for (i = 0; i < 7; i++) { // // Serial2.print("Status of "); // Serial2.print(i); // Serial2.print(" is: "); // Serial2.println(statusS[i]); if (statusS[i] == 0) {statusBoolean[i] = false; // Serial2.print("As StatusS "); // Serial2.print(i); // Serial2.print(" is "); // Serial2.print(statusS[i]); // Serial2.println(" StatusBoolean set to false"); } statusS[i] = 0; // } statusTime = millis(); } if (currentPage == 0) { // // if ((millis() - updateTime) > updateTimeOut) { reDraw(); updateTime = millis(); } } // if ((millis() - backLightTime) > backLightTimeOut) { if (backLight == true) { backLight = false; // Serial2.println("Backlight 15%"); //Serial.print("page 0"); // sendToNextion(); currentPage = 0; clearSelection(); reDraw(); Serial.print("dim=15"); sendToNextion(); } } // if ((millis() - historyTime) > historyTimeOut) { updateHistory(); historyCount++; // Serial2.print("History Q: "); // Serial2.println(historyCount); historyTime = millis(); } }
Source: https://habr.com/ru/post/399409/