Adding pages, moving values back and forth and displaying, fixed voltage display
This commit is contained in:
		| @@ -35,7 +35,9 @@ float speed = 0; | ||||
| uint8_t sendTemperature = 0; | ||||
| uint8_t sendTemperatureDecimals = 0; | ||||
| uint8_t sendVoltage = 0; | ||||
| uint8_t sendSpeed = 0; | ||||
| uint8_t sendVoltageDecimals = 0; | ||||
| uint8_t sendRPMupper = 1; | ||||
| uint8_t sendRPMlower = 2; | ||||
|  | ||||
| //#define pairingMode | ||||
| #define CONNECTION_TIMEOUT 300 | ||||
| @@ -71,7 +73,8 @@ void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) { | ||||
|   Serial.print("Last Packet Recv Data: "); Serial.println(recData[0]); Serial.print(" "); Serial.print(recData[1]); Serial.print(" len:");  Serial.println(data_len); | ||||
|  | ||||
| // Answer with response | ||||
|   const uint8_t respData[] = { sendTemperature, sendTemperatureDecimals, sendVoltage }; // sendSpeed | ||||
|  | ||||
|   const uint8_t respData[] = { sendVoltage, sendVoltageDecimals, sendTemperature, sendTemperatureDecimals, sendRPMupper, sendRPMlower }; | ||||
|   Serial.print("Sending RESPONSE.... "); | ||||
|   esp_err_t result = esp_now_send(mac_addr, respData, sizeof(data)); | ||||
|   if (result == ESP_OK) { | ||||
| @@ -187,8 +190,8 @@ void checkTemperature() { | ||||
|   Serial.println(temperature); | ||||
|   if(temperature < 35) digitalWrite(fanRelais, LOW); | ||||
|   if(temperature > 40) digitalWrite(fanRelais, HIGH); | ||||
|   sendTemperature = (uint16_t) temperature; | ||||
|   sendTemperatureDecimals = (uint16_t)(temperature - sendTemperature) *100; | ||||
|   sendTemperature = abs(floor(temperature)); | ||||
|   sendTemperatureDecimals = (temperature - sendTemperature) * 100; | ||||
| } | ||||
|  | ||||
| void setup() { | ||||
|   | ||||
							
								
								
									
										229
									
								
								src/remote.cpp
									
									
									
									
									
								
							
							
						
						
									
										229
									
								
								src/remote.cpp
									
									
									
									
									
								
							| @@ -11,12 +11,24 @@ | ||||
|  | ||||
| #include "accel.h" | ||||
|  | ||||
| #define B_VOLT    0 | ||||
| #define B_VOLT_D  1 | ||||
| #define B_TEMP    2 | ||||
| #define B_TEMP_D  3 | ||||
| #define B_SPEED   4 | ||||
| #define B_SPEED_D 5 | ||||
|  | ||||
| uint8_t boardData[6] = {0, 0, 0, 0, 0, 0}; | ||||
|  | ||||
| bool connected = false; | ||||
|  | ||||
| // Defining variables for OLED display | ||||
| U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R2, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16); | ||||
| U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2 (U8G2_R2, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16); | ||||
| char displayBuffer[20]; | ||||
| String displayString; | ||||
| short displayData = 0; | ||||
| unsigned long lastSignalBlink; | ||||
| bool signalBlink = false; | ||||
| unsigned long lastDataRotation; | ||||
|  | ||||
| // Defining variables for Settings menu | ||||
| @@ -36,9 +48,12 @@ byte hallCenterMargin = 5; | ||||
| byte currentSetting = 0; | ||||
| const byte numOfSettings = 11; | ||||
|  | ||||
| const float minVoltage = 3.2; | ||||
| const float minVoltage = 3.25; | ||||
| const float maxVoltage = 4.1; | ||||
| const float refVoltage = 3.3; | ||||
| // Resistors in Ohms | ||||
| const float deviderR1 = 1500; | ||||
| const float deviderR2 = 22000; | ||||
|  | ||||
|  | ||||
| // Global copy of board | ||||
| @@ -61,17 +76,8 @@ esp_now_peer_info_t board; | ||||
| // ESPNOW functions ############################## | ||||
| // Scan for boards in AP mode | ||||
|  | ||||
| void configDeviceAP(bool hidden) { | ||||
|   bool result = WiFi.softAP("ESK8Remote", "ESK8_Password+vD8z2YAvoDBW?Zx", CHANNEL, hidden); | ||||
|   if (!result) { | ||||
|     Serial.println("AP Config failed."); | ||||
|   } else { | ||||
|     Serial.println("AP Config Success. Broadcasting with AP: " + String("ESK8")); | ||||
|   } | ||||
| } | ||||
|  | ||||
| #ifdef pairingMode | ||||
| void ScanForboard() { | ||||
| void ScanForBoard() { | ||||
|   int8_t scanResults = WiFi.scanNetworks(); | ||||
|   // reset on each scan | ||||
|   bool boardFound = 0; | ||||
| @@ -241,7 +247,14 @@ void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { | ||||
|   snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", | ||||
|            mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); | ||||
|   Serial.print("Last Packet Sent to: "); Serial.println(macStr); | ||||
|   Serial.print("Last Packet Send Status: "); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail"); | ||||
|   Serial.print("Last Packet Send Status: "); | ||||
|   if(status == ESP_NOW_SEND_SUCCESS) { | ||||
|     connected = true; | ||||
|     Serial.println("Delivery Success"); | ||||
|   } else { | ||||
|     connected = false; | ||||
|     Serial.println("Delivery Fail"); | ||||
|   } | ||||
| } | ||||
|  | ||||
| // callback when data is recv from board | ||||
| @@ -249,10 +262,10 @@ void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) { | ||||
|   char macStr[18]; | ||||
|   snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", | ||||
|            mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); | ||||
|   Serial.print("#######################Last Response Recv from: "); Serial.println(macStr); | ||||
|   uint8_t recData[3]; | ||||
|   memcpy(recData, data, data_len); | ||||
|   Serial.print("Last Response Recv Data: "); Serial.println(recData[0]); Serial.print(" "); Serial.print(recData[1]); Serial.print(" len:");  Serial.println(data_len); | ||||
|   Serial.print("Last Response Recv from: "); Serial.println(macStr); | ||||
|   memcpy(boardData, data, data_len); | ||||
|   Serial.print("Recieved data! len: "); | ||||
|   Serial.println(data_len); | ||||
| } | ||||
|  | ||||
| //############ End ESP Now | ||||
| @@ -278,6 +291,7 @@ void calculateThrottlePosition() { | ||||
|     total += analogRead(leverPin); | ||||
|   } | ||||
|   hallMeasurement = total / 10; | ||||
|   Serial.print("HAL: "); | ||||
|   Serial.println(hallMeasurement); | ||||
|   //DEBUG_PRINT( (String)hallMeasurement ); | ||||
|  | ||||
| @@ -300,8 +314,10 @@ float batteryVoltage() { | ||||
|   for (int i = 0; i < 10; i++) { | ||||
|     total += analogRead(batteryMeasurePin); | ||||
|   } | ||||
|  | ||||
|   batteryVoltage = (refVoltage / 4096.0) * ((float)total / 10.0); | ||||
|   batteryVoltage = (refVoltage / 4095.0) * ((float)total / 10.0); | ||||
|   // Now we have the actual Voltage, lets calculate the value befor the devider | ||||
|   batteryVoltage = batteryVoltage / ( deviderR1 / (deviderR1 + deviderR2)); | ||||
|   Serial.print("Batt: "); | ||||
|   Serial.println(batteryVoltage); | ||||
|   return batteryVoltage; | ||||
| } | ||||
| @@ -323,6 +339,7 @@ int batteryLevel() { | ||||
| int getStrength(int points){ | ||||
|   long rssi = 0; | ||||
|   long averageRSSI=0; | ||||
|   if (points == 1) return WiFi.RSSI(); | ||||
|  | ||||
|   for (int i=0; i < points; i++) { | ||||
|     rssi += WiFi.RSSI(); | ||||
| @@ -330,6 +347,8 @@ int getStrength(int points){ | ||||
|   } | ||||
|  | ||||
|   averageRSSI=rssi/points; | ||||
|   Serial.print("RSSI: "); | ||||
|   Serial.println(averageRSSI); | ||||
|   return averageRSSI; | ||||
| } | ||||
|  | ||||
| @@ -383,14 +402,13 @@ void drawThrottle() { | ||||
| void drawSignal() { | ||||
|   // Position on OLED | ||||
|   int x = 114; int y = 17; | ||||
| /* | ||||
|    if (connected == true) { | ||||
|   if (connected == true) { | ||||
|     if (triggerActive()) { | ||||
|       u8g2.drawXBM(x, y, 12, 12, signal_transmitting_bits); | ||||
|     } else { | ||||
|       u8g2.drawXBM(x, y, 12, 12, signal_connected_bits); | ||||
|     } | ||||
|    } else { | ||||
|   } else { | ||||
|     if (millis() - lastSignalBlink > 500) { | ||||
|       signalBlink = !signalBlink; | ||||
|       lastSignalBlink = millis(); | ||||
| @@ -401,8 +419,7 @@ void drawSignal() { | ||||
|     } else { | ||||
|       u8g2.drawXBM(x, y, 12, 12, signal_noconnection_bits); | ||||
|     } | ||||
|    } | ||||
|  */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| void drawTitleScreen(String title) { | ||||
| @@ -415,13 +432,55 @@ void drawTitleScreen(String title) { | ||||
|   delay(1500); | ||||
| } | ||||
|  | ||||
| void drawBoardVoltage() { | ||||
|  | ||||
|  | ||||
| void drawPage() { | ||||
|   int decimals; | ||||
|   String suffix; | ||||
|   String prefix; | ||||
|  | ||||
|   int first, last; | ||||
|  | ||||
|   int x = 0; | ||||
|   int y = 16; | ||||
|   String suffix = "V"; | ||||
|   String prefix = "BATTERY"; | ||||
|   float value = 0.0; // TODO: No info this yet, measure in the board | ||||
|  | ||||
|   // Rotate the realtime data each 4s. | ||||
|   if ((millis() - lastDataRotation) >= 4000) { | ||||
|  | ||||
|     lastDataRotation = millis(); | ||||
|     displayData++; | ||||
|  | ||||
|     if (displayData > 2) { | ||||
|       displayData = 0; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   switch (displayData) { | ||||
|   case 0: | ||||
|     //value = ratioRpmSpeed * data.rpm; | ||||
|     first = boardData[B_TEMP]; | ||||
|     last = boardData[B_TEMP_D]; | ||||
|     suffix = "C"; | ||||
|     prefix = "BOX TEMP"; | ||||
|     decimals = 2; | ||||
|     break; | ||||
|   case 1: | ||||
|     //value = ratioPulseDistance * data.tachometerAbs; | ||||
|     // TODO : check how that will work once hal is wired | ||||
|     first = boardData[B_SPEED]; | ||||
|     last = boardData[B_SPEED_D]; | ||||
|     suffix = "KM"; | ||||
|     prefix = "DISTANCE"; | ||||
|     decimals = 2; | ||||
|     break; | ||||
|   case 2: | ||||
|     first = boardData[B_VOLT]; | ||||
|     last = boardData[B_VOLT_D]; | ||||
|     suffix = "V"; | ||||
|     prefix = "BATTERY"; | ||||
|     decimals = 2; | ||||
|     break; | ||||
|   } | ||||
|  | ||||
|   // Display prefix (title) | ||||
|   displayString = prefix; | ||||
| @@ -429,15 +488,13 @@ void drawBoardVoltage() { | ||||
|   u8g2.setFont(u8g2_font_profont12_tr); | ||||
|   u8g2.drawStr(x, y - 1, displayBuffer); | ||||
|  | ||||
|   // Split up the float value: a number, b decimals. | ||||
|   int first = abs(floor(value)); | ||||
|   int last = value * pow(10, 3) - first * pow(10, 3); | ||||
|  | ||||
|   // Add leading zero | ||||
|   if (first <= 9) { | ||||
|     displayString = "0" + (String)first; | ||||
|     if(connected) displayString = "0" + (String)first; | ||||
|     else displayString = "XX"; | ||||
|   } else { | ||||
|     displayString = (String)first; | ||||
|     if(connected) displayString = (String)first; | ||||
|     else displayString = "XX"; | ||||
|   } | ||||
|  | ||||
|   // Display numbers | ||||
| @@ -446,8 +503,17 @@ void drawBoardVoltage() { | ||||
|   u8g2.drawStr(x + 55, y + 13, displayBuffer); | ||||
|  | ||||
|   // Display decimals | ||||
|   displayString = "." + (String)last; | ||||
|   displayString.toCharArray(displayBuffer, 3); | ||||
|   // Add leading zero | ||||
|   if (last <= 9) { | ||||
|     if(connected) displayString = ".0" + (String)last; | ||||
|     else displayString = ".XX"; | ||||
|   } else { | ||||
|     if(connected) displayString = "." + (String)last; | ||||
|     else displayString = ".XX"; | ||||
|   } | ||||
|  | ||||
|   // Display decimals | ||||
|   displayString.toCharArray(displayBuffer, decimals + 2); | ||||
|   u8g2.setFont(u8g2_font_profont12_tr); | ||||
|   u8g2.drawStr(x + 86, y - 1, displayBuffer); | ||||
|  | ||||
| @@ -456,6 +522,7 @@ void drawBoardVoltage() { | ||||
|   displayString.toCharArray(displayBuffer, 10); | ||||
|   u8g2.setFont(u8g2_font_profont12_tr); | ||||
|   u8g2.drawStr(x + 86 + 2, y + 13, displayBuffer); | ||||
|  | ||||
| } | ||||
|  | ||||
| void drawSettingsMenu() { | ||||
| @@ -483,6 +550,58 @@ void drawSettingsMenu() { | ||||
|      } | ||||
|    */ | ||||
| } | ||||
| void controlSettingsMenu() { | ||||
|   /* | ||||
|      if (triggerActive()) { | ||||
|      if (settingsChangeFlag == false) { | ||||
|  | ||||
|       // Save settings to EEPROM | ||||
|       if (changeSelectedSetting == true) { | ||||
|         updateEEPROMSettings(); | ||||
|       } | ||||
|  | ||||
|       changeSelectedSetting = !changeSelectedSetting; | ||||
|       settingsChangeFlag = true; | ||||
|      } | ||||
|      } else { | ||||
|      settingsChangeFlag = false; | ||||
|      } | ||||
|  | ||||
|      if (hallMeasurement >= (remoteSettings.maxHallValue - 150) && settingsLoopFlag == false) { | ||||
|      // Up | ||||
|      if (changeSelectedSetting == true) { | ||||
|       int val = getSettingValue(currentSetting) + 1; | ||||
|  | ||||
|       if (inRange(val, settingRules[currentSetting][1], settingRules[currentSetting][2])) { | ||||
|         setSettingValue(currentSetting, val); | ||||
|         settingsLoopFlag = true; | ||||
|       } | ||||
|      } else { | ||||
|       if (currentSetting != 0) { | ||||
|         currentSetting--; | ||||
|         settingsLoopFlag = true; | ||||
|       } | ||||
|      } | ||||
|      } | ||||
|      else if (hallMeasurement <= (remoteSettings.minHallValue + 150) && settingsLoopFlag == false) { | ||||
|      // Down | ||||
|      if (changeSelectedSetting == true) { | ||||
|       int val = getSettingValue(currentSetting) - 1; | ||||
|  | ||||
|       if (inRange(val, settingRules[currentSetting][1], settingRules[currentSetting][2])) { | ||||
|         setSettingValue(currentSetting, val); | ||||
|         settingsLoopFlag = true; | ||||
|       } | ||||
|      } else { | ||||
|       if (currentSetting < (numOfSettings - 1)) { | ||||
|         currentSetting++; | ||||
|         settingsLoopFlag = true; | ||||
|       } | ||||
|      } | ||||
|      } else if (inRange(hallMeasurement, remoteSettings.centerHallValue - 50, remoteSettings.centerHallValue + 50)) { | ||||
|      settingsLoopFlag = false; | ||||
|      }*/ | ||||
| } | ||||
|  | ||||
| void drawSettingNumber() { | ||||
|   // Position on OLED | ||||
| @@ -509,7 +628,7 @@ void updateMainDisplay() { | ||||
|       drawSettingNumber(); | ||||
|     } else { | ||||
|       drawThrottle(); | ||||
|       drawBoardVoltage(); | ||||
|       drawPage(); | ||||
|       drawBatteryLevel(); | ||||
|       drawSignal(); | ||||
|     } | ||||
| @@ -527,7 +646,7 @@ void drawStartScreen() { | ||||
|     u8g2.setFont(u8g2_font_helvR10_tr  ); | ||||
|     u8g2.drawStr(34, 22, displayBuffer); | ||||
|   } while ( u8g2.nextPage() ); | ||||
|   delay(1500); | ||||
|   delay(800); | ||||
| } | ||||
|  | ||||
| //############ End Drawing Functions | ||||
| @@ -544,6 +663,8 @@ void setup() { | ||||
|   delay(50); | ||||
|   digitalWrite(16, HIGH); | ||||
|  | ||||
|   analogSetPinAttenuation(batteryMeasurePin, ADC_6db); | ||||
|  | ||||
|   // setup other pins | ||||
|   pinMode(triggerPin, INPUT_PULLUP); | ||||
|  | ||||
| @@ -569,12 +690,10 @@ void setup() { | ||||
|     ESP.restart(); | ||||
|   } | ||||
|  | ||||
|   //configDeviceAP(true); | ||||
|  | ||||
|   // Once ESPNow is successfully Init, we will register for Send CB to | ||||
|   // get the status of Trasnmitted packet | ||||
|   esp_now_register_send_cb(OnDataSent); | ||||
|   //ScanForboard(); | ||||
|   //ScanForBoard(); | ||||
|  | ||||
|   // Once ESPNow is successfully Init, we will register for recv CB to | ||||
|   // get recv packer info. | ||||
| @@ -590,11 +709,15 @@ void setup() { | ||||
| } | ||||
|  | ||||
| void loop() { | ||||
|   // Call function to update display and LED | ||||
|   updateMainDisplay(); | ||||
|  | ||||
|   calculateThrottlePosition(); | ||||
|   readAccel(); | ||||
|   Serial.print("Accel Values: "); | ||||
|   Serial.print(AcX); | ||||
|   Serial.print(" "); | ||||
|   Serial.println(GyX); | ||||
|  | ||||
|   calculateThrottlePosition(); | ||||
|   if (changeSettings == true) { | ||||
|     // Use throttle and trigger to change settings | ||||
|     //controlSettingsMenu(); | ||||
| @@ -614,34 +737,14 @@ void loop() { | ||||
|       // Add board as peer if it has not been added already | ||||
|       bool isPaired = manageBoard(); | ||||
|       if (isPaired) { | ||||
|         // pair success or already paired | ||||
|         // Send data to device | ||||
|  | ||||
|         sendData(); | ||||
|         /* update Value | ||||
|            char buf[10]; | ||||
|            sprintf(buf, "%i", map(analogRead(leverPin), HAL_MIN, HAL_MAX, TRIM_LOW, TRIM_HIGH)); | ||||
|            u8g2.firstPage(); | ||||
|            do { | ||||
|            u8g2.setFont(u8g2_font_10x20_tr ); | ||||
|            u8g2.drawStr(0, 20, buf); | ||||
|            } while ( u8g2.nextPage() ); | ||||
|          */ | ||||
|       } else { | ||||
|         // board pair failed | ||||
|  | ||||
|         Serial.println("board not found / paired!"); | ||||
|       } | ||||
|     } | ||||
|     else { | ||||
|       // No board found to process | ||||
|     } | ||||
|  | ||||
|     delay(20); | ||||
|   } | ||||
|  | ||||
|   readAccel(); | ||||
|   Serial.print(AcX); | ||||
|   Serial.print(" "); | ||||
|   Serial.println(GyX); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user