Professional Documents
Culture Documents
Temp
Temp
//RTC Added
//Box IO remaining
//Buzzer Remaining
//MODBUS remaining
String payload="";
String subpayload[]={"","","","",""};
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘ SETUP ◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
void setup() {
//▒▒▒ BASIC ▒▒▒
Serial.begin(9600);
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘ LOOP ◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
void loop() {
//myRTC.updateTime ();
get_clientdata();
updatestage();
Serial.print("Stage=");Serial.println(stage);
Serial.print("prev="); Serial.println(prev);
if (stage!=prev){
tft_tank();
}
else{
}
prev=stage;
delay(2000);
}
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘ USER FUNCTIONS ◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
void SDbegin(){
//Serial.print(F("Initializing SD card..."));
if (!SD.begin(SD_CS)) {
//Serial.println(F("failed!"));
return;
}
//Serial.println(F("OK!"));
}
void tft_sethome(){
tft.fillScreen(WHITE);
tft.setRotation(0);
bmpDraw("logo2.bmp", 0, 0);
delay(1000);
tft.drawCircle(13, 13, 9, RED);
tft.setTextColor(BLACK);
tft.setCursor(30, 7);
tft.setTextSize(2);
tft.println("WIFI NA");
tft_updatetime();
}
void tft_tank(){
//Serial.println("Level="+level);
if (level>=95 && level<=100){
bmpDraw("tank100.bmp",40,90);
}
else if (level>=85 && level<95){
bmpDraw("tank80.bmp",40,90);
}
else if (level>=40 && level<70){
bmpDraw("tank60.bmp",40,90);
}
else if (level>=20 && level<40){
bmpDraw("tank40.bmp",40,90);
}
else if (level>=15 && level<20){
bmpDraw("tank20.bmp",40,90);
}
else if (level<15){
bmpDraw("tank0.bmp",40,90);
}
}
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘ SYSTEM FUNCTIONS ◘◘◘◘◘◘◘◘◘◘
//◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘◘
// This function opens a Windows Bitmap (BMP) file and
// displays it at the given coordinates. It's sped up
// by reading many pixels worth of data at a time
// (rather than pixel by pixel). Increasing the buffer
// size takes more of the Arduino's precious RAM but
// makes loading a little faster. 20 pixels seems a
// good balance.
#define BUFFPIXEL 20
File bmpFile;
int bmpWidth, bmpHeight; // W+H in pixels
uint8_t bmpDepth; // Bit depth (currently must be 24)
uint32_t bmpImageoffset; // Start of image data in file
uint32_t rowSize; // Not always = bmpWidth; may have padding
uint8_t sdbuffer[3*BUFFPIXEL]; // pixel in buffer (R+G+B per pixel)
uint16_t lcdbuffer[BUFFPIXEL]; // pixel out buffer (16-bit per pixel)
uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer
boolean goodBmp = false; // Set to true on valid header parse
boolean flip = true; // BMP is stored bottom-to-top
int w, h, row, col;
uint8_t r, g, b;
uint32_t pos = 0, startTime = millis();
uint8_t lcdidx = 0;
boolean first = true;
//Serial.println();
//Serial.print(F("Loading image '"));
//Serial.print(filename);
//Serial.println('\'');
// Open requested file on SD card
if ((bmpFile = SD.open(filename)) == NULL) {
//Serial.println(F("File not found"));
return;
}
bmpFile.close();
if(!goodBmp); //Serial.println(F("BMP format not recognized."));
}
// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.
uint16_t read16(File f) {
uint16_t result;
((uint8_t *)&result)[0] = f.read(); // LSB
((uint8_t *)&result)[1] = f.read(); // MSB
return result;
}
uint32_t read32(File f) {
uint32_t result=0;
((uint8_t *)&result)[0] = f.read(); // LSB
((uint8_t *)&result)[1] = f.read();
((uint8_t *)&result)[2] = f.read();
((uint8_t *)&result)[3] = f.read(); // MSB
return result;
}
//◘◘◘◘◘◘◘◘◘◘ RTC ◘◘◘◘◘◘◘◘
void print_datetime(){
// Print the details in serial monitor
//Serial.print("Data"); // Call the routine that prints the day of the week
dayofWeek (myRTC.dayofweek);
//Serial.print (",");
//Serial.print (myRTC.dayofmonth);
//Serial.print ("/");
//Serial.print (myRTC.month);
//Serial.print ("/");
//Serial.print (myRTC.year);
//Serial.print ("");
//Serial.print("Time"); // Adds a 0 if the time value is <10
if (myRTC.hours <10)
{//Serial.print ("0");}
//Serial.print (myRTC.hours);
//Serial.print (":"); // Adds a 0 if the value of the minutes is <10
if (myRTC.minutes <10)
{//Serial.print ("0");}
//Serial.print (myRTC.minutes);
//Serial.print (":"); // Adds a 0 if the value of the latter is <10
if (myRTC.seconds <10)
{//Serial.print ("0");}
//Serial.println (myRTC.seconds);
}
void get_clientdata(){
if (Serial.available() > 0){
payload = Serial.readString();
//Serial.println(payload);
subpayload[0]= getValue(payload,',',0);
subpayload[1]= getValue(payload,',',1);
subpayload[2]= getValue(payload,',',2);
subpayload[3]= getValue(payload,',',3);
subpayload[4]= getValue(payload,',',4);
//Serial.print("SUBPAYLOAD 0="); //Serial.println(subpayload[0]);
//Serial.print("SUBPAYLOAD 1="); //Serial.println(subpayload[1]);
//Serial.print("SUBPAYLOAD 2="); //Serial.println(subpayload[2]);
//Serial.print("SUBPAYLOAD 3="); //Serial.println(subpayload[3]);
//Serial.print("SUBPAYLOAD 4="); //Serial.println(subpayload[4]);
// timestamp = subpayload[0].toDouble;
level = subpayload[1].toInt();
LSVal = subpayload[2].toInt();
motor = subpayload[3].toInt();
errorcode = subpayload[4].toInt();
//Serial.print("timestamp="); //Serial.println(timestamp);
//Serial.print("level="); //Serial.println(level);
//Serial.print("LSVal="); //Serial.println(LSVal);
//Serial.print("motor="); //Serial.println(motor);
//Serial.print("errorcode="); //Serial.println(errorcode);
//if (levelstr!=""){
//level = levelstr.toInt();
////Serial.println();
////Serial.print("Level=");
////Serial.println(level);
//}
}
}
// https://stackoverflow.com/questions/9072320/split-string-into-string-array
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
////Serial.print("maxIndex"); //Serial.println(maxIndex);
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
////Serial.print("Found="); //Serial.println(found);
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
////Serial.print("index0="); //Serial.println(strIndex[0]);
////Serial.print("index1="); //Serial.println(strIndex[1]);
}
}
////Serial.print("return data=");
//Serial.println(data.substring(strIndex[0],strIndex[1]));
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void updatestage(){
if (level>=95 && level<=100){
stage=5;
}
else if (level>=85 && level<95){
stage=4;
}
else if (level>=40 && level<70){
stage=3;
}
else if (level>=20 && level<40){
stage=2;
}
else if (level>=15 && level<20){
stage=1;
}
else if (level<15){
stage=0;
}