├── library.properties ├── README.md ├── library.json ├── examples ├── RoverC_M5StickC │ ├── RunningRoverC │ │ └── RunningRoverC.ino │ └── JoyC_&_RoverC │ │ ├── Master │ │ └── Master.ino │ │ └── Remote │ │ ├── Remote.ino │ │ └── icon.c ├── RoverC_M5StickCPlus │ ├── RunningRoverC │ │ └── RunningRoverC.ino │ └── JoyC_&_RoverC │ │ ├── Master │ │ └── Master.ino │ │ └── Remote │ │ ├── Remote.ino │ │ └── icon.c ├── RunningRoverC │ └── RunningRoverC.ino └── RoverC_JoyC_Remote │ ├── Master │ └── Master.ino │ └── Remote │ ├── Remote.ino │ └── icon.c ├── LICENSE └── src ├── M5_RoverC.h └── M5_RoverC.cpp /library.properties: -------------------------------------------------------------------------------- 1 | name=M5-RoverC 2 | version=0.0.1 3 | author=M5Stack 4 | maintainer=M5Stack 5 | sentence=Library for M5Stack RoverC & RoverC-Pro 6 | paragraph=See more on https://docs.m5stack.com/en/hat/hat_roverc_pro 7 | category=Device Control 8 | url=https://github.com/m5stack/M5_RoverC 9 | architectures=esp32 10 | includes=M5_RoverC.h -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # M5-RoverC 2 | 3 | ## Overview 4 | 5 | ### SKU:K036-B 6 | 7 | Contains the driver of the M5Stack RoverC series to realize the movement of the RoverC trolley and the control of the steering gear. 8 | 9 | ## Related Link 10 | 11 | [Document & Datasheet - RoverC-Pro](https://docs.m5stack.com/en/hat/hat_roverc_pro) 12 | 13 | ## License 14 | 15 | [M5_RoverC - MIT](LICENSE) 16 | -------------------------------------------------------------------------------- /library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "M5-RoverC", 3 | "description": "Library for M5Stack RoverC & RoverC-Pro", 4 | "keywords": "M5Stack RoverC", 5 | "authors": { 6 | "name": "M5Stack", 7 | "url": "http://www.m5stack.com" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/m5stack/M5-RoverC.git" 12 | }, 13 | "version": "0.0.1", 14 | "frameworks": "arduino", 15 | "platforms": "espressif32" 16 | } -------------------------------------------------------------------------------- /examples/RoverC_M5StickC/RunningRoverC/RunningRoverC.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include "M5_RoverC.h" 3 | 4 | TFT_eSprite canvas = TFT_eSprite(&M5.Lcd); 5 | 6 | M5_RoverC roverc; 7 | 8 | void setup() { 9 | M5.begin(); 10 | roverc.begin(); 11 | 12 | M5.Lcd.setRotation(1); 13 | canvas.createSprite(160, 80); 14 | canvas.setTextColor(ORANGE); 15 | roverc.setSpeed(0, 0, 0); 16 | 17 | canvas.setTextDatum(MC_DATUM); 18 | canvas.drawString("RoverC TEST", 80, 40, 4); 19 | canvas.pushSprite(0, 0); 20 | } 21 | 22 | void loop() { 23 | // roverc.setServoAngle(uint8_t pos, uint8_t angle) 24 | roverc.setServoAngle(0, 30); 25 | roverc.setServoAngle(1, 30); 26 | delay(1000); 27 | roverc.setServoAngle(0, 10); 28 | roverc.setServoAngle(1, 10); 29 | delay(1000); 30 | // roverc.setSpeed(int8_t x, int8_t y, int8_t z) 31 | roverc.setSpeed(100, 0, 0); 32 | delay(1000); 33 | roverc.setSpeed(0, 100, 0); 34 | delay(1000); 35 | roverc.setSpeed(0, 0, 100); 36 | delay(1000); 37 | roverc.setSpeed(0, 0, 0); 38 | delay(1000); 39 | } 40 | -------------------------------------------------------------------------------- /examples/RoverC_M5StickCPlus/RunningRoverC/RunningRoverC.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include "M5_RoverC.h" 3 | 4 | TFT_eSprite canvas = TFT_eSprite(&M5.Lcd); 5 | M5_RoverC roverc; 6 | 7 | void setup() { 8 | M5.begin(); 9 | roverc.begin(); 10 | 11 | M5.Lcd.setRotation(1); 12 | canvas.createSprite(160, 80); 13 | canvas.setTextColor(ORANGE); 14 | roverc.setSpeed(0, 0, 0); 15 | 16 | canvas.setTextDatum(MC_DATUM); 17 | canvas.drawString("RoverC TEST", 80, 40, 4); 18 | canvas.pushSprite(0, 0); 19 | } 20 | 21 | void loop() { 22 | // roverc.setServoAngle(uint8_t pos, uint8_t angle) 23 | roverc.setServoAngle(0, 30); 24 | roverc.setServoAngle(1, 30); 25 | delay(1000); 26 | roverc.setServoAngle(0, 10); 27 | roverc.setServoAngle(1, 10); 28 | delay(1000); 29 | // roverc.setSpeed(int8_t x, int8_t y, int8_t z) 30 | roverc.setSpeed(100, 0, 0); 31 | delay(1000); 32 | roverc.setSpeed(0, 100, 0); 33 | delay(1000); 34 | roverc.setSpeed(0, 0, 100); 35 | delay(1000); 36 | roverc.setSpeed(0, 0, 0); 37 | delay(1000); 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 M5Stack 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/M5_RoverC.h: -------------------------------------------------------------------------------- 1 | /*! 2 | * @brief A Digital Ambient Light Sensor From M5Stack 3 | * @copyright Copyright (c) 2022 by M5Stack[https://m5stack.com] 4 | * 5 | * @Links [RoverC-Pro](https://docs.m5stack.com/en/hat/hat_roverc_pro) 6 | * @version V0.0.1 7 | * @date 2022-07-012 8 | */ 9 | #ifndef _M5_ROVERC_H_ 10 | #define _M5_ROVERC_H_ 11 | 12 | #include 13 | #include 14 | 15 | #define ROVER_ADDRESS 0x38 16 | 17 | class M5_RoverC { 18 | private: 19 | uint8_t _addr; 20 | TwoWire *_wire; 21 | uint8_t _sda; 22 | uint8_t _scl; 23 | void writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length); 24 | void readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length); 25 | 26 | public: 27 | bool begin(TwoWire *wire = &Wire, uint8_t sda = 0, uint8_t scl = 26, 28 | uint8_t addr = ROVER_ADDRESS); 29 | void setPulse(uint8_t pos, int8_t width); 30 | void setAllPulse(int8_t width0, int8_t width1, int8_t width2, 31 | int8_t width3); 32 | void setSpeed(int8_t x, int8_t y, int8_t z); 33 | void setServoAngle(uint8_t pos, uint8_t angle); 34 | void setServoPulse(uint8_t pos, uint16_t width); 35 | }; 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /examples/RunningRoverC/RunningRoverC.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD 3 | * 4 | * SPDX-License-Identifier: MIT 5 | * 6 | * @Dependent Library: 7 | * M5GFX: https://github.com/m5stack/M5GFX 8 | * M5Unified: https://github.com/m5stack/M5Unified 9 | * M5-RoverC: https://github.com/m5stack/M5-RoverC 10 | */ 11 | 12 | #include "M5Unified.h" 13 | #include "M5_RoverC.h" 14 | 15 | M5_RoverC roverc; 16 | 17 | void view_test(void); 18 | void setup() 19 | { 20 | M5.begin(); 21 | roverc.begin(); 22 | view_test(); 23 | } 24 | 25 | void loop() 26 | { 27 | // Servo Control 28 | // roverc.setServoAngle(uint8_t pos, uint8_t angle) 29 | roverc.setServoAngle(0, 90); 30 | roverc.setServoAngle(1, 90); 31 | delay(1000); 32 | roverc.setServoAngle(0, 10); 33 | roverc.setServoAngle(1, 10); 34 | delay(1000); 35 | // Car Control 36 | // roverc.setSpeed(int8_t x, int8_t y, int8_t z) 37 | roverc.setSpeed(100, 0, 0); 38 | delay(1000); 39 | roverc.setSpeed(0, 100, 0); 40 | delay(1000); 41 | roverc.setSpeed(0, 0, 100); 42 | delay(1000); 43 | roverc.setSpeed(0, 0, 0); 44 | delay(1000); 45 | } 46 | void view_test(void) 47 | { 48 | M5.Display.setRotation(3); 49 | M5.Display.setTextColor(ORANGE); 50 | int screenWidth = M5.Display.width(); 51 | int screenHeight = M5.Display.height(); 52 | String text = "RoverC TEST"; 53 | int textSize = 1; 54 | m5::board_t board = M5.getBoard(); 55 | switch (board) { 56 | case m5::board_t::board_M5StickC: { 57 | textSize = 2; 58 | } break; 59 | case m5::board_t::board_M5StickCPlus: { 60 | textSize = 3; 61 | } break; 62 | case m5::board_t::board_M5StickCPlus2: { 63 | textSize = 3; 64 | } break; 65 | } 66 | M5.Display.setTextSize(textSize); 67 | int textWidth = M5.Display.textWidth(text); 68 | int textHeight = M5.Display.fontHeight(); 69 | int x = (screenWidth - textWidth) / 2; 70 | int y = (screenHeight - textHeight) / 2; 71 | M5.Display.drawString(text, x, y); 72 | } -------------------------------------------------------------------------------- /src/M5_RoverC.cpp: -------------------------------------------------------------------------------- 1 | #include "M5_RoverC.h" 2 | 3 | /*! @brief Sets up the Hardware.*/ 4 | bool M5_RoverC::begin(TwoWire *wire, uint8_t sda, uint8_t scl, uint8_t addr) { 5 | _wire = wire; 6 | _addr = addr; 7 | _sda = sda; 8 | _scl = scl; 9 | _wire->begin((int)_sda, (int)_scl); 10 | delay(10); 11 | _wire->beginTransmission(_addr); 12 | uint8_t error = _wire->endTransmission(); 13 | if (error == 0) { 14 | return true; 15 | } else { 16 | return false; 17 | } 18 | } 19 | 20 | /*! @brief Write a certain length of data to the specified register address. */ 21 | void M5_RoverC::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, 22 | uint8_t length) { 23 | _wire->beginTransmission(addr); 24 | _wire->write(reg); 25 | for (int i = 0; i < length; i++) { 26 | _wire->write(*(buffer + i)); 27 | } 28 | _wire->endTransmission(); 29 | } 30 | 31 | /*! @brief Read a certain length of data to the specified register address. */ 32 | void M5_RoverC::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, 33 | uint8_t length) { 34 | uint8_t index = 0; 35 | _wire->beginTransmission(addr); 36 | _wire->write(reg); 37 | _wire->endTransmission(); 38 | _wire->requestFrom(addr, length); 39 | for (int i = 0; i < length; i++) { 40 | buffer[index++] = _wire->read(); 41 | } 42 | } 43 | 44 | void M5_RoverC::setPulse(uint8_t pos, int8_t width) { 45 | writeBytes(_addr, pos, (uint8_t *)&width, 1); 46 | } 47 | 48 | void M5_RoverC::setAllPulse(int8_t width0, int8_t width1, int8_t width2, 49 | int8_t width3) { 50 | setPulse(0, width0); 51 | setPulse(1, width1); 52 | setPulse(2, width2); 53 | setPulse(3, width3); 54 | } 55 | 56 | /*! @brief Set the speed of the motor. */ 57 | void M5_RoverC::setSpeed(int8_t x, int8_t y, int8_t z) { 58 | int8_t buffer[4]; 59 | if (z != 0) { 60 | x = int(x * (100 - abs(z)) / 100); 61 | y = int(y * (100 - abs(z)) / 100); 62 | } 63 | buffer[0] = max(-100, min(100, y + x - z)); 64 | buffer[1] = max(-100, min(100, y - x + z)); 65 | buffer[3] = max(-100, min(100, y + x + z)); 66 | buffer[2] = max(-100, min(100, y - x - z)); 67 | writeBytes(_addr, 0x00, (uint8_t *)buffer, 4); 68 | } 69 | 70 | /*! @brief Set the angle of the servo. */ 71 | void M5_RoverC::setServoAngle(uint8_t pos, uint8_t angle) { 72 | uint8_t reg = 0x10 + pos; 73 | writeBytes(_addr, reg, &angle, 1); 74 | } 75 | 76 | /*! @brief Set the pulse of the servo. */ 77 | void M5_RoverC::setServoPulse(uint8_t pos, uint16_t width) { 78 | uint8_t reg = 0x20 + pos; 79 | writeBytes(_addr, reg, (uint8_t *)&width, 1); 80 | } 81 | -------------------------------------------------------------------------------- /examples/RoverC_M5StickCPlus/JoyC_&_RoverC/Master/Master.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | const char *ssid = "M5AP"; 6 | const char *password = "77777777"; 7 | 8 | TFT_eSprite Disbuff = TFT_eSprite(&M5.Lcd); 9 | WiFiServer server(80); 10 | 11 | WiFiUDP Udp1; 12 | 13 | void SetChargingCurrent(uint8_t CurrentLevel) { 14 | Wire1.beginTransmission(0x34); 15 | Wire1.write(0x33); 16 | Wire1.write(0xC0 | (CurrentLevel & 0x0f)); 17 | Wire1.endTransmission(); 18 | } 19 | 20 | void setup() { 21 | M5.begin(); 22 | M5.update(); 23 | Wire.begin(0, 26, 100000UL); 24 | 25 | uint64_t chipid = ESP.getEfuseMac(); 26 | String str = ssid + String((uint32_t)(chipid >> 32), HEX); 27 | M5.Lcd.setRotation(1); 28 | M5.Lcd.setSwapBytes(false); 29 | Disbuff.createSprite(240, 135); 30 | Disbuff.setSwapBytes(true); 31 | Disbuff.fillRect(0, 0, 240, 20, Disbuff.color565(50, 50, 50)); 32 | Disbuff.setTextSize(2); 33 | Disbuff.setTextColor(WHITE); 34 | Disbuff.setCursor(15, 35); 35 | Disbuff.print(str); 36 | Disbuff.pushSprite(0, 0); 37 | 38 | SetChargingCurrent(4); 39 | 40 | Serial.begin(115200); 41 | // Set device in STA mode to begin with 42 | WiFi.softAPConfig(IPAddress(192, 168, 4, 1), IPAddress(192, 168, 4, 1), 43 | IPAddress(255, 255, 255, 0)); 44 | 45 | WiFi.softAP(str.c_str(), password); 46 | IPAddress myIP = WiFi.softAPIP(); 47 | Serial.print("AP IP address: "); 48 | Serial.println(myIP); 49 | server.begin(); 50 | 51 | Udp1.begin(1003); 52 | } 53 | 54 | uint8_t SendBuff[9] = {0xAA, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee}; 55 | 56 | uint8_t I2CWrite1Byte(uint8_t Addr, uint8_t Data) { 57 | Wire.beginTransmission(0x38); 58 | Wire.write(Addr); 59 | Wire.write(Data); 60 | return Wire.endTransmission(); 61 | } 62 | 63 | uint8_t I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length) { 64 | Wire.beginTransmission(0x38); 65 | Wire.write(Addr); 66 | for (int i = 0; i < Length; i++) { 67 | Wire.write(Data[i]); 68 | } 69 | return Wire.endTransmission(); 70 | } 71 | 72 | int16_t speed_buff[4] = {0}; 73 | int8_t speed_sendbuff[4] = {0}; 74 | uint32_t count = 0; 75 | uint8_t IIC_ReState = ESP_OK; 76 | 77 | uint8_t Setspeed(int16_t Vtx, int16_t Vty, int16_t Wt) { 78 | Wt = (Wt > 100) ? 100 : Wt; 79 | Wt = (Wt < -100) ? -100 : Wt; 80 | 81 | Vtx = (Vtx > 100) ? 100 : Vtx; 82 | Vtx = (Vtx < -100) ? -100 : Vtx; 83 | Vty = (Vty > 100) ? 100 : Vty; 84 | Vty = (Vty < -100) ? -100 : Vty; 85 | 86 | Vtx = (Wt != 0) ? Vtx * (100 - abs(Wt)) / 100 : Vtx; 87 | Vty = (Wt != 0) ? Vty * (100 - abs(Wt)) / 100 : Vty; 88 | 89 | speed_buff[0] = Vty - Vtx - Wt; 90 | speed_buff[1] = Vty + Vtx + Wt; 91 | speed_buff[3] = Vty - Vtx + Wt; 92 | speed_buff[2] = Vty + Vtx - Wt; 93 | 94 | for (int i = 0; i < 4; i++) { 95 | speed_buff[i] = (speed_buff[i] > 100) ? 100 : speed_buff[i]; 96 | speed_buff[i] = (speed_buff[i] < -100) ? -100 : speed_buff[i]; 97 | speed_sendbuff[i] = speed_buff[i]; 98 | } 99 | return I2CWritebuff(0x00, (uint8_t *)speed_sendbuff, 4); 100 | } 101 | 102 | void loop() { 103 | int udplength = Udp1.parsePacket(); 104 | if (udplength) { 105 | char udodata[udplength]; 106 | Udp1.read(udodata, udplength); 107 | IPAddress udp_client = Udp1.remoteIP(); 108 | if ((udodata[0] == 0xAA) && (udodata[1] == 0x55) && 109 | (udodata[7] == 0xee)) { 110 | for (int i = 0; i < 8; i++) { 111 | Serial.printf("%02X ", udodata[i]); 112 | } 113 | Serial.println(); 114 | if (udodata[6] == 0x01) { 115 | IIC_ReState = Setspeed(udodata[3] - 100, udodata[4] - 100, 116 | udodata[5] - 100); 117 | } else { 118 | IIC_ReState = Setspeed(0, 0, 0); 119 | } 120 | } else { 121 | IIC_ReState = Setspeed(0, 0, 0); 122 | } 123 | } 124 | count++; 125 | if (count > 100) { 126 | count = 0; 127 | 128 | Disbuff.fillRect(0, 0, 160, 20, Disbuff.color565(50, 50, 50)); 129 | Disbuff.setTextSize(1); 130 | Disbuff.setTextColor(WHITE); 131 | Disbuff.setCursor(5, 5); 132 | Disbuff.printf("%.2fV,%.2fmA,%d", M5.Axp.GetBatVoltage(), 133 | M5.Axp.GetBatCurrent(), IIC_ReState); 134 | Disbuff.pushSprite(0, 0); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /examples/RoverC_M5StickC/JoyC_&_RoverC/Master/Master.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Description: RoverC will display "M5AP+2-byte mac address" hotspot name 3 | after booting up, waiting for JoyC to pair. 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | const char *ssid = "M5AP"; 11 | const char *password = "77777777"; 12 | 13 | TFT_eSprite Disbuff = TFT_eSprite(&M5.Lcd); 14 | WiFiServer server(80); 15 | 16 | WiFiUDP Udp1; 17 | 18 | void SetChargingCurrent(uint8_t CurrentLevel) { 19 | Wire1.beginTransmission(0x34); 20 | Wire1.write(0x33); 21 | Wire1.write(0xC0 | (CurrentLevel & 0x0f)); 22 | Wire1.endTransmission(); 23 | } 24 | 25 | void setup() { 26 | M5.begin(); 27 | M5.update(); 28 | Wire.begin(0, 26, 100000UL); 29 | 30 | uint64_t chipid = ESP.getEfuseMac(); 31 | String str = ssid + String((uint32_t)(chipid >> 32), HEX); 32 | M5.Lcd.setRotation(1); 33 | M5.Lcd.setSwapBytes(false); 34 | Disbuff.createSprite(160, 80); 35 | Disbuff.setSwapBytes(true); 36 | Disbuff.fillRect(0, 0, 160, 20, Disbuff.color565(50, 50, 50)); 37 | Disbuff.setTextSize(2); 38 | Disbuff.setTextColor(WHITE); 39 | Disbuff.setCursor(15, 35); 40 | Disbuff.print(str); 41 | Disbuff.pushSprite(0, 0); 42 | 43 | SetChargingCurrent(4); 44 | 45 | Serial.begin(115200); 46 | // Set device in STA mode to begin with 47 | WiFi.softAPConfig(IPAddress(192, 168, 4, 1), IPAddress(192, 168, 4, 1), 48 | IPAddress(255, 255, 255, 0)); 49 | 50 | WiFi.softAP(str.c_str(), password); 51 | IPAddress myIP = WiFi.softAPIP(); 52 | Serial.print("AP IP address: "); 53 | Serial.println(myIP); 54 | server.begin(); 55 | 56 | Udp1.begin(1003); 57 | } 58 | 59 | uint8_t SendBuff[9] = {0xAA, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee}; 60 | 61 | uint8_t I2CWrite1Byte(uint8_t Addr, uint8_t Data) { 62 | Wire.beginTransmission(0x38); 63 | Wire.write(Addr); 64 | Wire.write(Data); 65 | return Wire.endTransmission(); 66 | } 67 | 68 | uint8_t I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length) { 69 | Wire.beginTransmission(0x38); 70 | Wire.write(Addr); 71 | for (int i = 0; i < Length; i++) { 72 | Wire.write(Data[i]); 73 | } 74 | return Wire.endTransmission(); 75 | } 76 | 77 | int16_t speed_buff[4] = {0}; 78 | int8_t speed_sendbuff[4] = {0}; 79 | uint32_t count = 0; 80 | uint8_t IIC_ReState = I2C_ERROR_NO_BEGIN; 81 | 82 | uint8_t Setspeed(int16_t Vtx, int16_t Vty, int16_t Wt) { 83 | Wt = (Wt > 100) ? 100 : Wt; 84 | Wt = (Wt < -100) ? -100 : Wt; 85 | 86 | Vtx = (Vtx > 100) ? 100 : Vtx; 87 | Vtx = (Vtx < -100) ? -100 : Vtx; 88 | Vty = (Vty > 100) ? 100 : Vty; 89 | Vty = (Vty < -100) ? -100 : Vty; 90 | 91 | Vtx = (Wt != 0) ? Vtx * (100 - abs(Wt)) / 100 : Vtx; 92 | Vty = (Wt != 0) ? Vty * (100 - abs(Wt)) / 100 : Vty; 93 | 94 | speed_buff[0] = Vty - Vtx - Wt; 95 | speed_buff[1] = Vty + Vtx + Wt; 96 | speed_buff[3] = Vty - Vtx + Wt; 97 | speed_buff[2] = Vty + Vtx - Wt; 98 | 99 | for (int i = 0; i < 4; i++) { 100 | speed_buff[i] = (speed_buff[i] > 100) ? 100 : speed_buff[i]; 101 | speed_buff[i] = (speed_buff[i] < -100) ? -100 : speed_buff[i]; 102 | speed_sendbuff[i] = speed_buff[i]; 103 | } 104 | return I2CWritebuff(0x00, (uint8_t *)speed_sendbuff, 4); 105 | } 106 | 107 | void loop() { 108 | int udplength = Udp1.parsePacket(); 109 | if (udplength) { 110 | char udodata[udplength]; 111 | Udp1.read(udodata, udplength); 112 | IPAddress udp_client = Udp1.remoteIP(); 113 | if ((udodata[0] == 0xAA) && (udodata[1] == 0x55) && 114 | (udodata[7] == 0xee)) { 115 | for (int i = 0; i < 8; i++) { 116 | Serial.printf("%02X ", udodata[i]); 117 | } 118 | Serial.println(); 119 | if (udodata[6] == 0x01) { 120 | IIC_ReState = Setspeed(udodata[3] - 100, udodata[4] - 100, 121 | udodata[5] - 100); 122 | } else { 123 | IIC_ReState = Setspeed(0, 0, 0); 124 | } 125 | } else { 126 | IIC_ReState = Setspeed(0, 0, 0); 127 | } 128 | } 129 | count++; 130 | if (count > 100) { 131 | count = 0; 132 | 133 | Disbuff.fillRect(0, 0, 160, 20, Disbuff.color565(50, 50, 50)); 134 | Disbuff.setTextSize(1); 135 | Disbuff.setTextColor(WHITE); 136 | Disbuff.setCursor(5, 5); 137 | Disbuff.printf("%.2fV,%.2fmA,%d", M5.Axp.GetBatVoltage(), 138 | M5.Axp.GetBatCurrent(), IIC_ReState); 139 | Disbuff.pushSprite(0, 0); 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /examples/RoverC_JoyC_Remote/Master/Master.ino: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD 4 | * 5 | * SPDX-License-Identifier: MIT 6 | * 7 | * @Dependent Library: 8 | * M5GFX: https://github.com/m5stack/M5GFX 9 | * M5Unified: https://github.com/m5stack/M5Unified 10 | * M5-RoverC: https://github.com/m5stack/M5-RoverC 11 | */ 12 | 13 | #include "M5Unified.h" 14 | #include "Wire.h" 15 | #include 16 | #include 17 | #include "M5_RoverC.h" 18 | 19 | const char *ssid = "M5AP"; 20 | const char *password = "77777777"; 21 | 22 | M5_RoverC roverc; 23 | 24 | WiFiServer server(80); 25 | WiFiUDP Udp1; 26 | 27 | uint32_t count = 0; 28 | 29 | uint8_t servo = 0; 30 | 31 | void drawCenteredText(int y, const String &text, int textSize, uint16_t textColor); 32 | void view_head(void); 33 | unsigned long lastTime = 0; 34 | void setup() 35 | { 36 | M5.begin(); 37 | M5.update(); 38 | roverc.begin(); 39 | 40 | uint64_t chipid = ESP.getEfuseMac(); 41 | String str = ssid + String((uint32_t)(chipid >> 32), HEX); 42 | M5.Display.setRotation(3); 43 | M5.Display.setTextSize(2); 44 | M5.Display.setTextColor(WHITE); 45 | M5.Display.fillRect(0, 0, 240, 30, M5.Display.color565(50, 50, 50)); 46 | drawCenteredText(40, str, 2, GREEN); 47 | 48 | Serial.begin(115200); 49 | // Set device in STA mode to begin with 50 | WiFi.softAPConfig(IPAddress(192, 168, 4, 1), IPAddress(192, 168, 4, 1), IPAddress(255, 255, 255, 0)); 51 | 52 | WiFi.softAP(str.c_str(), password); 53 | IPAddress myIP = WiFi.softAPIP(); 54 | Serial.print("AP IP address: "); 55 | Serial.println(myIP); 56 | server.begin(); 57 | Udp1.begin(1003); 58 | view_head(); 59 | lastTime = millis(); 60 | } 61 | 62 | void loop() 63 | { 64 | int udplength = Udp1.parsePacket(); 65 | if (udplength) { 66 | char udodata[udplength]; 67 | Udp1.read(udodata, udplength); 68 | IPAddress udp_client = Udp1.remoteIP(); 69 | if ((udodata[0] == 0xAA) && (udodata[1] == 0x55) && (udodata[8] == 0xee)) { 70 | for (int i = 0; i < 9; i++) { 71 | Serial.printf("%02X ", udodata[i]); 72 | } 73 | Serial.println(); 74 | if (udodata[6] == 0x01) { 75 | roverc.setSpeed(udodata[3] - 100, udodata[4] - 100, udodata[5] - 100); 76 | } else { 77 | roverc.setSpeed(0, 0, 0); 78 | } 79 | } else { 80 | roverc.setSpeed(0, 0, 0); 81 | } 82 | 83 | if (udodata[7] != 0) { 84 | if (millis() - lastTime > 300) { 85 | lastTime = millis(); 86 | if (servo) { 87 | roverc.setServoAngle(0, 90); 88 | roverc.setServoAngle(1, 90); 89 | } else { 90 | roverc.setServoAngle(0, 10); 91 | roverc.setServoAngle(1, 10); 92 | } 93 | servo = 1 - servo; 94 | } 95 | } 96 | } 97 | count++; 98 | if (count > 5000) { 99 | count = 0; 100 | view_head(); 101 | } 102 | } 103 | 104 | /** 105 | * @brief Draws horizontally centered text on the M5 display with a specified color. 106 | * 107 | * This function clears the area where the text will be displayed (with black background), 108 | * calculates the position to horizontally center the text, and then draws it with the specified color. 109 | * 110 | * @param y The fixed Y-axis position where the text will be drawn. 111 | * @param text The string to be displayed. 112 | * @param textSize The size of the text to be drawn. 113 | * @param textColor The color of the text to be displayed. 114 | */ 115 | void drawCenteredText(int y, const String &text, int textSize, uint16_t textColor) 116 | { 117 | // Get the screen width 118 | int screenWidth = M5.Display.width(); 119 | 120 | // Set the text size and color 121 | M5.Display.setTextSize(textSize); 122 | M5.Display.setTextColor(textColor, M5.Display.color565(0, 0, 0)); // Set text color and black background color 123 | 124 | // Get the width and height of the text 125 | int textWidth = M5.Display.textWidth(text); // Text width 126 | int textHeight = M5.Display.fontHeight(); // Text height 127 | 128 | // Calculate the X-axis position to center the text 129 | int x = (screenWidth - textWidth) / 2; // Centering on the X-axis 130 | 131 | // Clear the entire area where the text will be displayed (black background) 132 | M5.Display.fillRect(0, y, screenWidth, textHeight, M5.Display.color565(0, 0, 0)); 133 | 134 | // Set the cursor position and draw the text 135 | M5.Display.setCursor(x, y); 136 | M5.Display.printf("%s", text.c_str()); // Draw the text 137 | } 138 | void view_head(void) 139 | { 140 | float bat = 0; 141 | m5::board_t board = M5.getBoard(); 142 | if (board == m5::board_t::board_M5StickC) { 143 | bat = M5.Power.Axp192.getBatteryVoltage(); 144 | } else if (board == m5::board_t::board_M5StickCPlus) { 145 | bat = M5.Power.Axp192.getBatteryVoltage(); 146 | } else if (board == m5::board_t::board_M5StickCPlus2) { 147 | bat = M5.Power.getBatteryVoltage() / 1000.0; 148 | } 149 | M5.Display.fillRect(0, 0, 240, 30, M5.Display.color565(50, 50, 50)); 150 | M5.Display.setTextSize(2); 151 | if (bat > 3.30) { 152 | M5.Display.setTextColor(GREEN); 153 | } else { 154 | M5.Display.setTextColor(RED); 155 | } 156 | char buffer[64] = {0}; 157 | 158 | sprintf(buffer, "BAT:%.3fV", bat); 159 | String text = String(buffer); 160 | int textWidth = M5.Display.textWidth(text); 161 | int textHeight = M5.Display.fontHeight(); 162 | int x = (M5.Display.width() - textWidth) / 2; 163 | M5.Display.setCursor(x, 7); 164 | M5.Display.printf("%s", text.c_str()); 165 | } -------------------------------------------------------------------------------- /examples/RoverC_M5StickCPlus/JoyC_&_RoverC/Remote/Remote.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "EEPROM.h" 5 | #include "icon.c" 6 | 7 | #define EEPROM_SIZE 64 8 | 9 | TFT_eSprite Disbuff = TFT_eSprite(&M5.Lcd); 10 | extern const unsigned char connect_on[800]; 11 | extern const unsigned char connect_off[800]; 12 | 13 | #define SYSNUM 3 14 | 15 | uint64_t realTime[4], time_count = 0; 16 | bool k_ready = false; 17 | uint32_t key_count = 0; 18 | 19 | IPAddress local_IP(192, 168, 4, 100 + SYSNUM); 20 | IPAddress gateway(192, 168, 4, 1); 21 | IPAddress subnet(255, 255, 0, 0); 22 | IPAddress primaryDNS(8, 8, 8, 8); // optional 23 | IPAddress secondaryDNS(8, 8, 4, 4); // optional 24 | 25 | const char *ssid = "M5AP"; 26 | const char *password = "77777777"; 27 | 28 | WiFiUDP Udp; 29 | uint32_t send_count = 0; 30 | uint8_t system_state = 0; 31 | 32 | void I2CWrite1Byte(uint8_t Addr, uint8_t Data) { 33 | Wire.beginTransmission(0x38); 34 | Wire.write(Addr); 35 | Wire.write(Data); 36 | Wire.endTransmission(); 37 | } 38 | 39 | void I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length) { 40 | Wire.beginTransmission(0x38); 41 | Wire.write(Addr); 42 | for (int i = 0; i < Length; i++) { 43 | Wire.write(Data[i]); 44 | } 45 | Wire.endTransmission(); 46 | } 47 | 48 | uint8_t I2CRead8bit(uint8_t Addr) { 49 | Wire.beginTransmission(0x38); 50 | Wire.write(Addr); 51 | Wire.endTransmission(); 52 | Wire.requestFrom(0x38, 1); 53 | return Wire.read(); 54 | } 55 | 56 | uint16_t I2CRead16bit(uint8_t Addr) { 57 | uint16_t ReData = 0; 58 | Wire.beginTransmission(0x38); 59 | Wire.write(Addr); 60 | Wire.endTransmission(); 61 | Wire.requestFrom(0x38, 2); 62 | for (int i = 0; i < 2; i++) { 63 | ReData <<= 8; 64 | ReData |= Wire.read(); 65 | } 66 | return ReData; 67 | } 68 | 69 | bool joys_l = false; 70 | uint8_t color[3] = {0, 100, 0}; 71 | 72 | uint8_t SendBuff[8] = {0xAA, 0x55, SYSNUM, 0x00, 0x00, 0x00, 0x00, 0xee}; 73 | 74 | void SendUDP() { 75 | if (WiFi.status() == WL_CONNECTED) { 76 | Udp.beginPacket(IPAddress(192, 168, 4, 1), 1000 + SYSNUM); 77 | Udp.write(SendBuff, 8); 78 | Udp.endPacket(); 79 | } 80 | } 81 | 82 | char APName[20]; 83 | String WfifAPBuff[16]; 84 | uint32_t count_bn_a = 0, choose = 0; 85 | String ssidname; 86 | void setup() { 87 | // put your setup code here, to run once: 88 | M5.begin(); 89 | Wire.begin(0, 26, 100000UL); 90 | EEPROM.begin(EEPROM_SIZE); 91 | 92 | M5.Lcd.setRotation(4); 93 | M5.Lcd.setSwapBytes(false); 94 | Disbuff.createSprite(135, 240); 95 | Disbuff.setSwapBytes(true); 96 | 97 | Disbuff.fillRect(0, 0, 135, 20, Disbuff.color565(50, 50, 50)); 98 | Disbuff.setTextSize(2); 99 | Disbuff.setTextColor(GREEN); 100 | Disbuff.setCursor(55, 6); 101 | // Disbuff.printf("%03d",SYSNUM); 102 | 103 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_off); 104 | Disbuff.pushSprite(0, 0); 105 | 106 | uint8_t res = I2CRead8bit(0x32); 107 | Serial.printf("Res0 = %02X \r\n", res); 108 | /* 109 | if( res & 0x02 ) 110 | { 111 | I2CWrite1Byte(0x10,0x02); 112 | } 113 | else 114 | { 115 | Disbuff.setTextSize(1); 116 | Disbuff.setTextColor(GREEN); 117 | Disbuff.fillRect(0,0,80,20,Disbuff.color565(50,50,50)); 118 | Disbuff.setCursor(5,20); 119 | Disbuff.printf("calibration"); 120 | Disbuff.pushSprite(0,0); 121 | I2CWrite1Byte( 0x32 , 0x01 ); 122 | } 123 | */ 124 | M5.update(); 125 | if ((EEPROM.read(0) != 0x56) || (M5.BtnA.read() == 1)) { 126 | WiFi.mode(WIFI_STA); 127 | int n = WiFi.scanNetworks(); 128 | Disbuff.setTextSize(2); 129 | Disbuff.setTextColor(GREEN); 130 | Disbuff.fillRect(0, 0, 80, 20, Disbuff.color565(50, 50, 50)); 131 | 132 | if (n == 0) { 133 | Disbuff.setCursor(5, 20); 134 | Disbuff.printf("no networks"); 135 | 136 | } else { 137 | int count = 0; 138 | for (int i = 0; i < n; ++i) { 139 | if (WiFi.SSID(i).indexOf("M5AP") != -1) { 140 | if (count == 0) { 141 | Disbuff.setTextColor(GREEN); 142 | } else { 143 | Disbuff.setTextColor(WHITE); 144 | } 145 | Disbuff.setCursor(5, 25 + count * 10); 146 | String str = WiFi.SSID(i); 147 | Disbuff.printf(str.c_str()); 148 | WfifAPBuff[count] = WiFi.SSID(i); 149 | count++; 150 | } 151 | } 152 | Disbuff.pushSprite(0, 0); 153 | while (1) { 154 | if (M5.BtnA.read() == 1) { 155 | if (count_bn_a >= 200) { 156 | count_bn_a = 201; 157 | EEPROM.writeUChar(0, 0x56); 158 | EEPROM.writeString(1, WfifAPBuff[choose]); 159 | ssidname = WfifAPBuff[choose]; 160 | break; 161 | } 162 | count_bn_a++; 163 | Serial.printf("count_bn_a %d \n", count_bn_a); 164 | } else if ((M5.BtnA.isReleased()) && (count_bn_a != 0)) { 165 | Serial.printf("count_bn_a %d", count_bn_a); 166 | if (count_bn_a > 200) { 167 | } else { 168 | choose++; 169 | if (choose >= count) { 170 | choose = 0; 171 | } 172 | Disbuff.fillRect(0, 0, 80, 20, 173 | Disbuff.color565(50, 50, 50)); 174 | for (int i = 0; i < count; i++) { 175 | Disbuff.setCursor(5, 25 + i * 10); 176 | if (choose == i) { 177 | Disbuff.setTextColor(GREEN); 178 | } else { 179 | Disbuff.setTextColor(WHITE); 180 | } 181 | Disbuff.printf(WfifAPBuff[i].c_str()); 182 | } 183 | Disbuff.pushSprite(0, 0); 184 | } 185 | count_bn_a = 0; 186 | } 187 | delay(10); 188 | M5.update(); 189 | } 190 | // EEPROM.writeString(1,WfifAPBuff[0]); 191 | } 192 | } else if (EEPROM.read(0) == 0x56) { 193 | ssidname = EEPROM.readString(1); 194 | EEPROM.readString(1, APName, 16); 195 | } 196 | 197 | Disbuff.fillRect(0, 20, 80, 140, BLACK); 198 | 199 | if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { 200 | Serial.println("STA Failed to configure"); 201 | } 202 | 203 | WiFi.begin(ssidname.c_str(), password); 204 | 205 | while (WiFi.status() != WL_CONNECTED) { 206 | delay(500); 207 | Serial.print("."); 208 | } 209 | 210 | Udp.begin(2000); 211 | 212 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_on); 213 | Disbuff.pushSprite(0, 0); 214 | } 215 | 216 | uint8_t adc_value[5] = {0}; 217 | uint16_t AngleBuff[4]; 218 | uint32_t count = 0; 219 | void loop() { 220 | for (int i = 0; i < 5; i++) { 221 | adc_value[i] = I2CRead8bit(0x60 + i); 222 | } 223 | 224 | for (int i = 0; i < 4; i++) { 225 | AngleBuff[i] = I2CRead16bit(0x50 + i * 2); 226 | } 227 | 228 | delay(10); 229 | 230 | if (WiFi.status() != WL_CONNECTED) { 231 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_off); 232 | Disbuff.pushSprite(0, 0); 233 | 234 | count++; 235 | if (count > 500) { 236 | WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); 237 | count = 0; 238 | } 239 | } else { 240 | SendBuff[3] = map(AngleBuff[0], 0, 4000, 0, 200); 241 | SendBuff[4] = map(AngleBuff[1], 0, 4000, 0, 200); 242 | SendBuff[5] = map(AngleBuff[2], 0, 4000, 0, 200); 243 | /* 244 | Disbuff.pushImage(0,0,20,20,(uint16_t *)connect_on); 245 | Disbuff.pushSprite(0,0); 246 | count = 0; 247 | */ 248 | if ((SendBuff[3] > 110) || (SendBuff[3] < 90) || (SendBuff[4] > 110) || 249 | (SendBuff[4] < 90) || (SendBuff[5] > 110) || (SendBuff[5] < 90)) { 250 | SendBuff[6] = 0x01; 251 | } else { 252 | SendBuff[6] = 0x00; 253 | } 254 | SendUDP(); 255 | } 256 | 257 | Disbuff.fillRect(0, 30, 80, 130, BLACK); 258 | Disbuff.setCursor(10, 30); 259 | Disbuff.printf("%04d", SendBuff[3]); 260 | Disbuff.setCursor(10, 45); 261 | Disbuff.printf("%04d", SendBuff[4]); 262 | Disbuff.setCursor(10, 60); 263 | Disbuff.printf("%04d", SendBuff[5]); 264 | 265 | Disbuff.setCursor(10, 100); 266 | Disbuff.printf("%04X", adc_value[4]); 267 | Disbuff.pushSprite(0, 0); 268 | } 269 | -------------------------------------------------------------------------------- /examples/RoverC_JoyC_Remote/Remote/Remote.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD 3 | * 4 | * SPDX-License-Identifier: MIT 5 | * 6 | * @Dependent Library: 7 | * M5GFX: https://github.com/m5stack/M5GFX 8 | * M5Unified: https://github.com/m5stack/M5Unified 9 | * M5Hat-JoyC: https://github.com/m5stack/M5Hat-JoyC 10 | */ 11 | 12 | #include "M5Unified.h" 13 | #include "Hat_JoyC.h" 14 | #include 15 | #include 16 | #include "EEPROM.h" 17 | #include "icon.c" 18 | 19 | #define EEPROM_SIZE (64) 20 | #define SYSNUM (3) 21 | 22 | JoyC joyc; 23 | 24 | extern const unsigned char connect_on[800]; 25 | extern const unsigned char connect_off[800]; 26 | 27 | IPAddress local_IP(192, 168, 4, 100 + SYSNUM); 28 | IPAddress gateway(192, 168, 4, 1); 29 | IPAddress subnet(255, 255, 0, 0); 30 | IPAddress primaryDNS(8, 8, 8, 8); // optional 31 | IPAddress secondaryDNS(8, 8, 4, 4); // optional 32 | 33 | uint64_t realTime[4], time_count = 0; 34 | bool k_ready = false; 35 | uint32_t key_count = 0; 36 | 37 | const char *ssid = "M5AP"; 38 | const char *password = "77777777"; 39 | 40 | WiFiUDP Udp; 41 | uint32_t send_count = 0; 42 | uint8_t system_state = 0; 43 | bool joys_l = false; 44 | uint8_t color[3] = {0, 100, 0}; 45 | uint8_t SendBuff[9] = {0xAA, 0x55, SYSNUM, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee}; 46 | char APName[20]; 47 | String WfifAPBuff[16]; 48 | uint32_t count_bn_a = 0, choose = 0; 49 | String ssidname; 50 | 51 | void drawCenteredText(int y, const String &text, int textSize, uint16_t textColor); 52 | void SendUDP(void); 53 | void setup() 54 | { 55 | // put your setup code here, to run once: 56 | M5.begin(); 57 | Serial.begin(115200); 58 | joyc.begin(); // Initialize JoyC. 初始化 JoyC 59 | EEPROM.begin(EEPROM_SIZE); 60 | int textSize = 1; 61 | m5::board_t board = M5.getBoard(); 62 | switch (board) { 63 | case m5::board_t::board_M5StickC: { 64 | textSize = 1; 65 | } break; 66 | case m5::board_t::board_M5StickCPlus: { 67 | textSize = 2; 68 | } break; 69 | case m5::board_t::board_M5StickCPlus2: { 70 | textSize = 2; 71 | } break; 72 | } 73 | M5.Display.setTextSize(textSize); 74 | M5.Display.fillRect(0, 0, 135, 40, M5.Display.color565(50, 50, 50)); 75 | M5.Display.pushImage(M5.Display.width() / 2 - 10, 10, 20, 20, (uint16_t *)connect_off); 76 | 77 | M5.update(); 78 | if ((EEPROM.read(0) != 0x56) || (M5.BtnA.wasReleased() || M5.BtnA.pressedFor(500))) { 79 | WiFi.mode(WIFI_STA); 80 | int n = WiFi.scanNetworks(); 81 | if (n == 0) { 82 | drawCenteredText(50, "no networks", textSize, RED); 83 | } else { 84 | int count = 0; 85 | for (int i = 0; i < n; ++i) { 86 | if (WiFi.SSID(i).indexOf("M5AP") != -1) { 87 | if (count == 0) { 88 | M5.Display.setTextColor(GREEN); 89 | } else { 90 | M5.Display.setTextColor(WHITE); 91 | } 92 | String str = WiFi.SSID(i); 93 | drawCenteredText(50, str.c_str(), textSize, GREEN); 94 | WfifAPBuff[count] = WiFi.SSID(i); 95 | count++; 96 | } 97 | } 98 | while (1) { 99 | if (M5.BtnA.wasReleased() || M5.BtnA.pressedFor(500)) { 100 | if (count_bn_a >= 200) { 101 | count_bn_a = 201; 102 | EEPROM.writeUChar(0, 0x56); 103 | EEPROM.writeString(1, WfifAPBuff[choose]); 104 | ssidname = WfifAPBuff[choose]; 105 | break; 106 | } 107 | count_bn_a++; 108 | Serial.printf("count_bn_a %d \n", count_bn_a); 109 | } else if ((M5.BtnA.isReleased()) && (count_bn_a != 0)) { 110 | Serial.printf("count_bn_a %d", count_bn_a); 111 | if (count_bn_a > 200) { 112 | } else { 113 | choose++; 114 | if (choose >= count) { 115 | choose = 0; 116 | } 117 | for (int i = 0; i < count; i++) { 118 | if (choose == i) { 119 | M5.Display.setTextColor(GREEN); 120 | } else { 121 | M5.Display.setTextColor(WHITE); 122 | } 123 | drawCenteredText(50 + i * 25, WfifAPBuff[i].c_str(), textSize, GREEN); 124 | } 125 | } 126 | count_bn_a = 0; 127 | } 128 | delay(10); 129 | M5.update(); 130 | } 131 | // EEPROM.writeString(1,WfifAPBuff[0]); 132 | } 133 | } else if (EEPROM.read(0) == 0x56) { 134 | ssidname = EEPROM.readString(1); 135 | EEPROM.readString(1, APName, 16); 136 | } 137 | 138 | if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { 139 | Serial.println("STA Failed to configure"); 140 | } 141 | 142 | WiFi.begin(ssidname.c_str(), password); 143 | 144 | while (WiFi.status() != WL_CONNECTED) { 145 | delay(500); 146 | Serial.print("."); 147 | } 148 | 149 | Udp.begin(2000); 150 | M5.Display.pushImage(M5.Display.width() / 2 - 10, 10, 20, 20, (uint16_t *)connect_on); 151 | } 152 | 153 | uint8_t keyPressStatus[2] = {0}; 154 | uint8_t keyStatus = 0; 155 | uint16_t AngleBuff[4]; 156 | uint32_t count = 0; 157 | void loop() 158 | { 159 | keyStatus = 0; 160 | keyPressStatus[0] = 0; 161 | keyPressStatus[1] = 0; 162 | keyPressStatus[0] = joyc.getPress(0); 163 | keyPressStatus[1] = joyc.getPress(1); 164 | if (keyPressStatus[0] || keyPressStatus[1]) { 165 | keyStatus = 1; 166 | } 167 | 168 | AngleBuff[0] = 200 - joyc.getX(0); 169 | AngleBuff[1] = joyc.getY(0); 170 | AngleBuff[2] = joyc.getX(1); 171 | AngleBuff[3] = joyc.getY(1); 172 | 173 | delay(10); 174 | 175 | if (WiFi.status() != WL_CONNECTED) { 176 | count++; 177 | if (count > 500) { 178 | WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); 179 | count = 0; 180 | } 181 | } else { 182 | SendBuff[3] = AngleBuff[0]; 183 | SendBuff[4] = AngleBuff[1]; 184 | SendBuff[5] = AngleBuff[2]; 185 | SendBuff[7] = keyStatus; 186 | if ((SendBuff[3] > 110) || (SendBuff[3] < 90) || (SendBuff[4] > 110) || (SendBuff[4] < 90) || 187 | (SendBuff[5] > 110) || (SendBuff[5] < 90)) { 188 | SendBuff[6] = 0x01; 189 | } else { 190 | SendBuff[6] = 0x00; 191 | } 192 | SendUDP(); 193 | } 194 | 195 | drawCenteredText(50, String(SendBuff[3]), 3, ORANGE); 196 | drawCenteredText(80, String(SendBuff[4]), 3, ORANGE); 197 | drawCenteredText(110, String(SendBuff[5]), 3, ORANGE); 198 | drawCenteredText(140, String(keyStatus), 3, ORANGE); 199 | } 200 | 201 | /** 202 | * @brief Draws horizontally centered text on the M5 display with a specified color. 203 | * 204 | * This function clears the area where the text will be displayed (with black background), 205 | * calculates the position to horizontally center the text, and then draws it with the specified color. 206 | * 207 | * @param y The fixed Y-axis position where the text will be drawn. 208 | * @param text The string to be displayed. 209 | * @param textSize The size of the text to be drawn. 210 | * @param textColor The color of the text to be displayed. 211 | */ 212 | void drawCenteredText(int y, const String &text, int textSize, uint16_t textColor) 213 | { 214 | // Get the screen width 215 | int screenWidth = M5.Display.width(); 216 | 217 | // Set the text size and color 218 | M5.Display.setTextSize(textSize); 219 | M5.Display.setTextColor(textColor, M5.Display.color565(0, 0, 0)); // Set text color and black background color 220 | 221 | // Get the width and height of the text 222 | int textWidth = M5.Display.textWidth(text); // Text width 223 | int textHeight = M5.Display.fontHeight(); // Text height 224 | 225 | // Calculate the X-axis position to center the text 226 | int x = (screenWidth - textWidth) / 2; // Centering on the X-axis 227 | 228 | // Clear the entire area where the text will be displayed (black background) 229 | M5.Display.fillRect(0, y, screenWidth, textHeight, M5.Display.color565(0, 0, 0)); 230 | 231 | // Set the cursor position and draw the text 232 | M5.Display.setCursor(x, y); 233 | M5.Display.printf("%s", text.c_str()); // Draw the text 234 | } 235 | 236 | void SendUDP(void) 237 | { 238 | if (WiFi.status() == WL_CONNECTED) { 239 | Udp.beginPacket(IPAddress(192, 168, 4, 1), 1000 + SYSNUM); 240 | Udp.write(SendBuff, sizeof(SendBuff)); 241 | Udp.endPacket(); 242 | } 243 | } 244 | -------------------------------------------------------------------------------- /examples/RoverC_M5StickC/JoyC_&_RoverC/Remote/Remote.ino: -------------------------------------------------------------------------------- 1 | /* 2 | Description: JoyC will scan the mac address name of RoverC, 3 | press and hold the Home button of M5StickC on JoyC for 3 seconds to start 4 | scanning the hotspot of the car, and the pairing will be successful. After 5 | successful pairing, the link icon will be highlighted in the upper left 6 | corner of the screen, and the joystick value will be displayed on the screen. 7 | The left joystick controls the front and rear up and down, the left and right 8 | controls the pan, and the right joystick controls the left and right 9 | steering. 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | #include "EEPROM.h" 16 | 17 | #define EEPROM_SIZE 64 18 | 19 | TFT_eSprite Disbuff = TFT_eSprite(&M5.Lcd); 20 | extern const unsigned char connect_on[800]; 21 | extern const unsigned char connect_off[800]; 22 | 23 | #define SYSNUM 3 24 | 25 | uint64_t realTime[4], time_count = 0; 26 | bool k_ready = false; 27 | uint32_t key_count = 0; 28 | 29 | IPAddress local_IP(192, 168, 4, 100 + SYSNUM); 30 | IPAddress gateway(192, 168, 4, 1); 31 | IPAddress subnet(255, 255, 0, 0); 32 | IPAddress primaryDNS(8, 8, 8, 8); // optional 33 | IPAddress secondaryDNS(8, 8, 4, 4); // optional 34 | 35 | const char *ssid = "M5AP"; 36 | const char *password = "77777777"; 37 | 38 | WiFiUDP Udp; 39 | uint32_t send_count = 0; 40 | uint8_t system_state = 0; 41 | 42 | void I2CWrite1Byte(uint8_t Addr, uint8_t Data) { 43 | Wire.beginTransmission(0x38); 44 | Wire.write(Addr); 45 | Wire.write(Data); 46 | Wire.endTransmission(); 47 | } 48 | 49 | void I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length) { 50 | Wire.beginTransmission(0x38); 51 | Wire.write(Addr); 52 | for (int i = 0; i < Length; i++) { 53 | Wire.write(Data[i]); 54 | } 55 | Wire.endTransmission(); 56 | } 57 | 58 | uint8_t I2CRead8bit(uint8_t Addr) { 59 | Wire.beginTransmission(0x38); 60 | Wire.write(Addr); 61 | Wire.endTransmission(); 62 | Wire.requestFrom(0x38, 1); 63 | return Wire.read(); 64 | } 65 | 66 | uint16_t I2CRead16bit(uint8_t Addr) { 67 | uint16_t ReData = 0; 68 | Wire.beginTransmission(0x38); 69 | Wire.write(Addr); 70 | Wire.endTransmission(); 71 | Wire.requestFrom(0x38, 2); 72 | for (int i = 0; i < 2; i++) { 73 | ReData <<= 8; 74 | ReData |= Wire.read(); 75 | } 76 | return ReData; 77 | } 78 | 79 | bool joys_l = false; 80 | uint8_t color[3] = {0, 100, 0}; 81 | 82 | uint8_t SendBuff[8] = {0xAA, 0x55, SYSNUM, 0x00, 0x00, 0x00, 0x00, 0xee}; 83 | 84 | void SendUDP() { 85 | if (WiFi.status() == WL_CONNECTED) { 86 | Udp.beginPacket(IPAddress(192, 168, 4, 1), 1000 + SYSNUM); 87 | Udp.write(SendBuff, 8); 88 | Udp.endPacket(); 89 | } 90 | } 91 | 92 | char APName[20]; 93 | String WfifAPBuff[16]; 94 | uint32_t count_bn_a = 0, choose = 0; 95 | String ssidname; 96 | void setup() { 97 | // put your setup code here, to run once: 98 | M5.begin(); 99 | Wire.begin(0, 26, 100000UL); 100 | EEPROM.begin(EEPROM_SIZE); 101 | 102 | M5.Lcd.setRotation(4); 103 | M5.Lcd.setSwapBytes(false); 104 | Disbuff.createSprite(80, 160); 105 | Disbuff.setSwapBytes(true); 106 | 107 | Disbuff.fillRect(0, 0, 80, 20, Disbuff.color565(50, 50, 50)); 108 | Disbuff.setTextSize(2); 109 | Disbuff.setTextColor(GREEN); 110 | Disbuff.setCursor(55, 6); 111 | // Disbuff.printf("%03d",SYSNUM); 112 | 113 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_off); 114 | Disbuff.pushSprite(0, 0); 115 | 116 | uint8_t res = I2CRead8bit(0x32); 117 | Serial.printf("Res0 = %02X \r\n", res); 118 | /* 119 | if( res & 0x02 ) 120 | { 121 | I2CWrite1Byte(0x10,0x02); 122 | } 123 | else 124 | { 125 | Disbuff.setTextSize(1); 126 | Disbuff.setTextColor(GREEN); 127 | Disbuff.fillRect(0,0,80,20,Disbuff.color565(50,50,50)); 128 | Disbuff.setCursor(5,20); 129 | Disbuff.printf("calibration"); 130 | Disbuff.pushSprite(0,0); 131 | I2CWrite1Byte( 0x32 , 0x01 ); 132 | } 133 | */ 134 | M5.update(); 135 | if ((EEPROM.read(0) != 0x56) || (M5.BtnA.read() == 1)) { 136 | WiFi.mode(WIFI_STA); 137 | int n = WiFi.scanNetworks(); 138 | Disbuff.setTextSize(1); 139 | Disbuff.setTextColor(GREEN); 140 | Disbuff.fillRect(0, 0, 80, 20, Disbuff.color565(50, 50, 50)); 141 | 142 | if (n == 0) { 143 | Disbuff.setCursor(5, 20); 144 | Disbuff.printf("no networks"); 145 | 146 | } else { 147 | int count = 0; 148 | for (int i = 0; i < n; ++i) { 149 | if (WiFi.SSID(i).indexOf("M5AP") != -1) { 150 | if (count == 0) { 151 | Disbuff.setTextColor(GREEN); 152 | } else { 153 | Disbuff.setTextColor(WHITE); 154 | } 155 | Disbuff.setCursor(5, 25 + count * 10); 156 | String str = WiFi.SSID(i); 157 | Disbuff.printf(str.c_str()); 158 | WfifAPBuff[count] = WiFi.SSID(i); 159 | count++; 160 | } 161 | } 162 | Disbuff.pushSprite(0, 0); 163 | while (1) { 164 | if (M5.BtnA.read() == 1) { 165 | if (count_bn_a >= 200) { 166 | count_bn_a = 201; 167 | EEPROM.writeUChar(0, 0x56); 168 | EEPROM.writeString(1, WfifAPBuff[choose]); 169 | ssidname = WfifAPBuff[choose]; 170 | break; 171 | } 172 | count_bn_a++; 173 | Serial.printf("count_bn_a %d \n", count_bn_a); 174 | } else if ((M5.BtnA.isReleased()) && (count_bn_a != 0)) { 175 | Serial.printf("count_bn_a %d", count_bn_a); 176 | if (count_bn_a > 200) { 177 | } else { 178 | choose++; 179 | if (choose >= count) { 180 | choose = 0; 181 | } 182 | Disbuff.fillRect(0, 0, 80, 20, 183 | Disbuff.color565(50, 50, 50)); 184 | for (int i = 0; i < count; i++) { 185 | Disbuff.setCursor(5, 25 + i * 10); 186 | if (choose == i) { 187 | Disbuff.setTextColor(GREEN); 188 | } else { 189 | Disbuff.setTextColor(WHITE); 190 | } 191 | Disbuff.printf(WfifAPBuff[i].c_str()); 192 | } 193 | Disbuff.pushSprite(0, 0); 194 | } 195 | count_bn_a = 0; 196 | } 197 | delay(10); 198 | M5.update(); 199 | } 200 | // EEPROM.writeString(1,WfifAPBuff[0]); 201 | } 202 | } else if (EEPROM.read(0) == 0x56) { 203 | ssidname = EEPROM.readString(1); 204 | EEPROM.readString(1, APName, 16); 205 | } 206 | 207 | Disbuff.fillRect(0, 20, 80, 140, BLACK); 208 | 209 | if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) { 210 | Serial.println("STA Failed to configure"); 211 | } 212 | 213 | WiFi.begin(ssidname.c_str(), password); 214 | 215 | while (WiFi.status() != WL_CONNECTED) { 216 | delay(500); 217 | Serial.print("."); 218 | } 219 | 220 | Udp.begin(2000); 221 | 222 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_on); 223 | Disbuff.pushSprite(0, 0); 224 | } 225 | 226 | uint8_t adc_value[5] = {0}; 227 | uint16_t AngleBuff[4]; 228 | uint32_t count = 0; 229 | void loop() { 230 | for (int i = 0; i < 5; i++) { 231 | adc_value[i] = I2CRead8bit(0x60 + i); 232 | } 233 | 234 | for (int i = 0; i < 4; i++) { 235 | AngleBuff[i] = I2CRead16bit(0x50 + i * 2); 236 | } 237 | 238 | delay(10); 239 | 240 | if (WiFi.status() != WL_CONNECTED) { 241 | Disbuff.pushImage(0, 0, 20, 20, (uint16_t *)connect_off); 242 | Disbuff.pushSprite(0, 0); 243 | 244 | count++; 245 | if (count > 500) { 246 | WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS); 247 | count = 0; 248 | } 249 | } else { 250 | SendBuff[3] = map(AngleBuff[0], 0, 4000, 0, 200); 251 | SendBuff[4] = map(AngleBuff[1], 0, 4000, 0, 200); 252 | SendBuff[5] = map(AngleBuff[2], 0, 4000, 0, 200); 253 | /* 254 | Disbuff.pushImage(0,0,20,20,(uint16_t *)connect_on); 255 | Disbuff.pushSprite(0,0); 256 | count = 0; 257 | */ 258 | if ((SendBuff[3] > 110) || (SendBuff[3] < 90) || (SendBuff[4] > 110) || 259 | (SendBuff[4] < 90) || (SendBuff[5] > 110) || (SendBuff[5] < 90)) { 260 | SendBuff[6] = 0x01; 261 | } else { 262 | SendBuff[6] = 0x00; 263 | } 264 | SendUDP(); 265 | } 266 | 267 | Disbuff.fillRect(0, 30, 80, 130, BLACK); 268 | Disbuff.setCursor(10, 30); 269 | Disbuff.printf("%04d", SendBuff[3]); 270 | Disbuff.setCursor(10, 45); 271 | Disbuff.printf("%04d", SendBuff[4]); 272 | Disbuff.setCursor(10, 60); 273 | Disbuff.printf("%04d", SendBuff[5]); 274 | 275 | Disbuff.setCursor(10, 100); 276 | Disbuff.printf("%04X", adc_value[4]); 277 | Disbuff.pushSprite(0, 0); 278 | } -------------------------------------------------------------------------------- /examples/RoverC_JoyC_Remote/Remote/icon.c: -------------------------------------------------------------------------------- 1 | 2 | const unsigned char connect_on[800] = { 3 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 4 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 5 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 6 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 7 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 8 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 9 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 10 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 11 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 12 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 13 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x46, 0x4E, 0x4F, 0x70, 0x46, 0x6E, 14 | 0x4F, 0xF1, 0x3C, 0x4A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 15 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 16 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 17 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0x49, 0x4F, 0xD0, 0x3C, 0x2A, 0x3B, 0xEA, 18 | 0x3B, 0xEA, 0x3B, 0xEA, 0x3B, 0xEA, 0x3C, 0x0A, 0x3B, 0x49, 0x31, 0x86, 19 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 20 | 0x31, 0x86, 0x46, 0x2E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0x70, 21 | 0x4F, 0x90, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x0F, 22 | 0x4F, 0xD0, 0x3C, 0x8B, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 23 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 0x3B, 0x49, 0x31, 0xA6, 24 | 0x45, 0x4C, 0x4F, 0x70, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 25 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x4E, 0xAE, 0x31, 0x86, 0x31, 0x86, 26 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x6B, 27 | 0x4F, 0x4F, 0x4F, 0x0F, 0x4F, 0x2F, 0x32, 0xC8, 0x31, 0x86, 0x31, 0x86, 28 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0x8D, 0x46, 0x4E, 29 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 30 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xC6, 0x32, 0x47, 0x31, 0x86, 0x31, 0x86, 31 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 32 | 0x45, 0x4C, 0x4E, 0x8E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 33 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x4A, 34 | 0x45, 0xAD, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 35 | 0x45, 0xED, 0x45, 0xAD, 0x4F, 0xF0, 0x45, 0xAD, 0x31, 0x86, 0x31, 0x86, 36 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 37 | 0x45, 0x4C, 0x4F, 0xF0, 0x45, 0x2C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 38 | 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x2C, 0x3B, 0xEA, 0x31, 0x86, 39 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 40 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x45, 0xCD, 0x31, 0x86, 0x31, 0x86, 41 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 42 | 0x32, 0x67, 0x32, 0x07, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 43 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x46, 0x0D, 44 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 45 | 0x32, 0xC8, 0x4F, 0x2F, 0x4E, 0xEF, 0x4F, 0x90, 0x44, 0xAB, 0x31, 0x86, 46 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 47 | 0x46, 0x0D, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 48 | 0x31, 0x86, 0x31, 0xC6, 0x4F, 0x4F, 0x45, 0x8D, 0x31, 0x86, 0x3B, 0x08, 49 | 0x4F, 0xF1, 0x3B, 0x89, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 50 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xEA, 0x4F, 0xB0, 0x4E, 0xCF, 0x32, 0xC8, 51 | 0x32, 0xA8, 0x4F, 0x0F, 0x45, 0xAD, 0x32, 0xC8, 0x4E, 0xEF, 0x31, 0x86, 52 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 53 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x32, 0xA8, 54 | 0x3B, 0xA9, 0x31, 0xE6, 0x31, 0xC6, 0x3B, 0x89, 0x3A, 0xE8, 0x31, 0xE6, 55 | 0x4F, 0x90, 0x3C, 0x2A, 0x31, 0x86, 0x31, 0xE6, 0x4F, 0xD0, 0x3C, 0x4A, 56 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 57 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 58 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xCA, 0x4F, 0xD0, 0x46, 0x4E, 0x4F, 0x70, 59 | 0x45, 0xED, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 60 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 61 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 62 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 63 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 64 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 65 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 66 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 67 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 68 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 69 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 70 | }; 71 | 72 | const unsigned char connect_off[800] = { 73 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 74 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 75 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 76 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 77 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 78 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 79 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 80 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 81 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 82 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 83 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x7B, 0xCF, 0x8C, 0x71, 0x7B, 0xEF, 84 | 0x94, 0xB2, 0x5A, 0xEB, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 85 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 86 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 87 | 0x31, 0x86, 0x31, 0x86, 0x4A, 0x69, 0x94, 0x92, 0x5A, 0xCB, 0x52, 0xAA, 88 | 0x52, 0xAA, 0x52, 0xAA, 0x52, 0xAA, 0x5A, 0xCB, 0x4A, 0x69, 0x31, 0x86, 89 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 90 | 0x31, 0x86, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x8C, 0x51, 91 | 0x8C, 0x71, 0x84, 0x30, 0x8C, 0x51, 0x8C, 0x51, 0x8C, 0x51, 0x84, 0x30, 92 | 0x94, 0x92, 0x63, 0x0C, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 93 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x4A, 0x69, 0x31, 0xA6, 94 | 0x6B, 0x6D, 0x8C, 0x51, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 95 | 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x84, 0x10, 0x31, 0x86, 0x31, 0x86, 96 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 97 | 0x8C, 0x51, 0x84, 0x30, 0x8C, 0x51, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 98 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0x7B, 0xCF, 99 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 100 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 101 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 102 | 0x6B, 0x6D, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 103 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 104 | 0x73, 0x8E, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 105 | 0x73, 0xAE, 0x73, 0x8E, 0x94, 0x92, 0x73, 0x8E, 0x31, 0x86, 0x31, 0x86, 106 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 107 | 0x6B, 0x4D, 0x94, 0x92, 0x6B, 0x4D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 108 | 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x4D, 0x52, 0xAA, 0x31, 0x86, 109 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 110 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 111 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 112 | 0x39, 0xE7, 0x39, 0xC7, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 113 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x73, 0xAE, 114 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 115 | 0x42, 0x28, 0x8C, 0x51, 0x84, 0x10, 0x8C, 0x71, 0x63, 0x0C, 0x31, 0x86, 116 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 117 | 0x73, 0xAE, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 118 | 0x31, 0x86, 0x31, 0xA6, 0x8C, 0x51, 0x6B, 0x6D, 0x31, 0x86, 0x4A, 0x49, 119 | 0x94, 0xB2, 0x52, 0x8A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 120 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x10, 0x42, 0x28, 121 | 0x42, 0x28, 0x84, 0x30, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x30, 0x31, 0x86, 122 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 123 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x42, 0x28, 124 | 0x52, 0x8A, 0x31, 0xA6, 0x31, 0xA6, 0x52, 0x8A, 0x42, 0x28, 0x31, 0xA6, 125 | 0x8C, 0x71, 0x5A, 0xCB, 0x31, 0x86, 0x31, 0xA6, 0x94, 0x92, 0x5A, 0xEB, 126 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 127 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 128 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x94, 0x92, 0x7B, 0xCF, 0x8C, 0x71, 129 | 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 130 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 131 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 132 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 133 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 134 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 135 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 136 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 137 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 138 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 139 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 140 | }; -------------------------------------------------------------------------------- /examples/RoverC_M5StickC/JoyC_&_RoverC/Remote/icon.c: -------------------------------------------------------------------------------- 1 | 2 | const unsigned char connect_on[800] = { 3 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 4 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 5 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 6 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 7 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 8 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 9 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 10 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 11 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 12 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 13 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x46, 0x4E, 0x4F, 0x70, 0x46, 0x6E, 14 | 0x4F, 0xF1, 0x3C, 0x4A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 15 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 16 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 17 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0x49, 0x4F, 0xD0, 0x3C, 0x2A, 0x3B, 0xEA, 18 | 0x3B, 0xEA, 0x3B, 0xEA, 0x3B, 0xEA, 0x3C, 0x0A, 0x3B, 0x49, 0x31, 0x86, 19 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 20 | 0x31, 0x86, 0x46, 0x2E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0x70, 21 | 0x4F, 0x90, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x0F, 22 | 0x4F, 0xD0, 0x3C, 0x8B, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 23 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 0x3B, 0x49, 0x31, 0xA6, 24 | 0x45, 0x4C, 0x4F, 0x70, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 25 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x4E, 0xAE, 0x31, 0x86, 0x31, 0x86, 26 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x6B, 27 | 0x4F, 0x4F, 0x4F, 0x0F, 0x4F, 0x2F, 0x32, 0xC8, 0x31, 0x86, 0x31, 0x86, 28 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0x8D, 0x46, 0x4E, 29 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 30 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xC6, 0x32, 0x47, 0x31, 0x86, 0x31, 0x86, 31 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 32 | 0x45, 0x4C, 0x4E, 0x8E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 33 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x4A, 34 | 0x45, 0xAD, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 35 | 0x45, 0xED, 0x45, 0xAD, 0x4F, 0xF0, 0x45, 0xAD, 0x31, 0x86, 0x31, 0x86, 36 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 37 | 0x45, 0x4C, 0x4F, 0xF0, 0x45, 0x2C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 38 | 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x2C, 0x3B, 0xEA, 0x31, 0x86, 39 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 40 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x45, 0xCD, 0x31, 0x86, 0x31, 0x86, 41 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 42 | 0x32, 0x67, 0x32, 0x07, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 43 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x46, 0x0D, 44 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 45 | 0x32, 0xC8, 0x4F, 0x2F, 0x4E, 0xEF, 0x4F, 0x90, 0x44, 0xAB, 0x31, 0x86, 46 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 47 | 0x46, 0x0D, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 48 | 0x31, 0x86, 0x31, 0xC6, 0x4F, 0x4F, 0x45, 0x8D, 0x31, 0x86, 0x3B, 0x08, 49 | 0x4F, 0xF1, 0x3B, 0x89, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 50 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xEA, 0x4F, 0xB0, 0x4E, 0xCF, 0x32, 0xC8, 51 | 0x32, 0xA8, 0x4F, 0x0F, 0x45, 0xAD, 0x32, 0xC8, 0x4E, 0xEF, 0x31, 0x86, 52 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 53 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x32, 0xA8, 54 | 0x3B, 0xA9, 0x31, 0xE6, 0x31, 0xC6, 0x3B, 0x89, 0x3A, 0xE8, 0x31, 0xE6, 55 | 0x4F, 0x90, 0x3C, 0x2A, 0x31, 0x86, 0x31, 0xE6, 0x4F, 0xD0, 0x3C, 0x4A, 56 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 57 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 58 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xCA, 0x4F, 0xD0, 0x46, 0x4E, 0x4F, 0x70, 59 | 0x45, 0xED, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 60 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 61 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 62 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 63 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 64 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 65 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 66 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 67 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 68 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 69 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 70 | }; 71 | 72 | const unsigned char connect_off[800] = { 73 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 74 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 75 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 76 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 77 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 78 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 79 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 80 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 81 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 82 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 83 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x7B, 0xCF, 0x8C, 0x71, 0x7B, 0xEF, 84 | 0x94, 0xB2, 0x5A, 0xEB, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 85 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 86 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 87 | 0x31, 0x86, 0x31, 0x86, 0x4A, 0x69, 0x94, 0x92, 0x5A, 0xCB, 0x52, 0xAA, 88 | 0x52, 0xAA, 0x52, 0xAA, 0x52, 0xAA, 0x5A, 0xCB, 0x4A, 0x69, 0x31, 0x86, 89 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 90 | 0x31, 0x86, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x8C, 0x51, 91 | 0x8C, 0x71, 0x84, 0x30, 0x8C, 0x51, 0x8C, 0x51, 0x8C, 0x51, 0x84, 0x30, 92 | 0x94, 0x92, 0x63, 0x0C, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 93 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x4A, 0x69, 0x31, 0xA6, 94 | 0x6B, 0x6D, 0x8C, 0x51, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 95 | 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x84, 0x10, 0x31, 0x86, 0x31, 0x86, 96 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 97 | 0x8C, 0x51, 0x84, 0x30, 0x8C, 0x51, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 98 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0x7B, 0xCF, 99 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 100 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 101 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 102 | 0x6B, 0x6D, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 103 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 104 | 0x73, 0x8E, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 105 | 0x73, 0xAE, 0x73, 0x8E, 0x94, 0x92, 0x73, 0x8E, 0x31, 0x86, 0x31, 0x86, 106 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 107 | 0x6B, 0x4D, 0x94, 0x92, 0x6B, 0x4D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 108 | 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x4D, 0x52, 0xAA, 0x31, 0x86, 109 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 110 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 111 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 112 | 0x39, 0xE7, 0x39, 0xC7, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 113 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x73, 0xAE, 114 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 115 | 0x42, 0x28, 0x8C, 0x51, 0x84, 0x10, 0x8C, 0x71, 0x63, 0x0C, 0x31, 0x86, 116 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 117 | 0x73, 0xAE, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 118 | 0x31, 0x86, 0x31, 0xA6, 0x8C, 0x51, 0x6B, 0x6D, 0x31, 0x86, 0x4A, 0x49, 119 | 0x94, 0xB2, 0x52, 0x8A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 120 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x10, 0x42, 0x28, 121 | 0x42, 0x28, 0x84, 0x30, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x30, 0x31, 0x86, 122 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 123 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x42, 0x28, 124 | 0x52, 0x8A, 0x31, 0xA6, 0x31, 0xA6, 0x52, 0x8A, 0x42, 0x28, 0x31, 0xA6, 125 | 0x8C, 0x71, 0x5A, 0xCB, 0x31, 0x86, 0x31, 0xA6, 0x94, 0x92, 0x5A, 0xEB, 126 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 127 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 128 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x94, 0x92, 0x7B, 0xCF, 0x8C, 0x71, 129 | 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 130 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 131 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 132 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 133 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 134 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 135 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 136 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 137 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 138 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 139 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 140 | }; -------------------------------------------------------------------------------- /examples/RoverC_M5StickCPlus/JoyC_&_RoverC/Remote/icon.c: -------------------------------------------------------------------------------- 1 | 2 | const unsigned char connect_on[800] = { 3 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 4 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 5 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 6 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 7 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 8 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 9 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 10 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 11 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 12 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 13 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x46, 0x4E, 0x4F, 0x70, 0x46, 0x6E, 14 | 0x4F, 0xF1, 0x3C, 0x4A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 15 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 16 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 17 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0x49, 0x4F, 0xD0, 0x3C, 0x2A, 0x3B, 0xEA, 18 | 0x3B, 0xEA, 0x3B, 0xEA, 0x3B, 0xEA, 0x3C, 0x0A, 0x3B, 0x49, 0x31, 0x86, 19 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 20 | 0x31, 0x86, 0x46, 0x2E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0x70, 21 | 0x4F, 0x90, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x2F, 0x4F, 0x0F, 22 | 0x4F, 0xD0, 0x3C, 0x8B, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 23 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x4F, 0xF1, 0x3B, 0x49, 0x31, 0xA6, 24 | 0x45, 0x4C, 0x4F, 0x70, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 25 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x4E, 0xAE, 0x31, 0x86, 0x31, 0x86, 26 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x6B, 27 | 0x4F, 0x4F, 0x4F, 0x0F, 0x4F, 0x2F, 0x32, 0xC8, 0x31, 0x86, 0x31, 0x86, 28 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0x8D, 0x46, 0x4E, 29 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 30 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xC6, 0x32, 0x47, 0x31, 0x86, 0x31, 0x86, 31 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 32 | 0x45, 0x4C, 0x4E, 0x8E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 33 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x3C, 0x4A, 34 | 0x45, 0xAD, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 0x45, 0xED, 35 | 0x45, 0xED, 0x45, 0xAD, 0x4F, 0xF0, 0x45, 0xAD, 0x31, 0x86, 0x31, 0x86, 36 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 37 | 0x45, 0x4C, 0x4F, 0xF0, 0x45, 0x2C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 38 | 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x6C, 0x45, 0x2C, 0x3B, 0xEA, 0x31, 0x86, 39 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 40 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x45, 0xCD, 0x31, 0x86, 0x31, 0x86, 41 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 42 | 0x32, 0x67, 0x32, 0x07, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 43 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x45, 0xAD, 0x46, 0x0D, 44 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 45 | 0x32, 0xC8, 0x4F, 0x2F, 0x4E, 0xEF, 0x4F, 0x90, 0x44, 0xAB, 0x31, 0x86, 46 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 47 | 0x46, 0x0D, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 48 | 0x31, 0x86, 0x31, 0xC6, 0x4F, 0x4F, 0x45, 0x8D, 0x31, 0x86, 0x3B, 0x08, 49 | 0x4F, 0xF1, 0x3B, 0x89, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 50 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xEA, 0x4F, 0xB0, 0x4E, 0xCF, 0x32, 0xC8, 51 | 0x32, 0xA8, 0x4F, 0x0F, 0x45, 0xAD, 0x32, 0xC8, 0x4E, 0xEF, 0x31, 0x86, 52 | 0x31, 0x86, 0x31, 0x86, 0x45, 0xED, 0x46, 0x6E, 0x31, 0x86, 0x31, 0x86, 53 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x32, 0xA8, 54 | 0x3B, 0xA9, 0x31, 0xE6, 0x31, 0xC6, 0x3B, 0x89, 0x3A, 0xE8, 0x31, 0xE6, 55 | 0x4F, 0x90, 0x3C, 0x2A, 0x31, 0x86, 0x31, 0xE6, 0x4F, 0xD0, 0x3C, 0x4A, 56 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 57 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 58 | 0x31, 0x86, 0x31, 0x86, 0x3B, 0xCA, 0x4F, 0xD0, 0x46, 0x4E, 0x4F, 0x70, 59 | 0x45, 0xED, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 60 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 61 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 62 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 63 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 64 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 65 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 66 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 67 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 68 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 69 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 70 | }; 71 | 72 | const unsigned char connect_off[800] = { 73 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 74 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 75 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 76 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 77 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 78 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 79 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 80 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 81 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 82 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 83 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x7B, 0xCF, 0x8C, 0x71, 0x7B, 0xEF, 84 | 0x94, 0xB2, 0x5A, 0xEB, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 85 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 86 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 87 | 0x31, 0x86, 0x31, 0x86, 0x4A, 0x69, 0x94, 0x92, 0x5A, 0xCB, 0x52, 0xAA, 88 | 0x52, 0xAA, 0x52, 0xAA, 0x52, 0xAA, 0x5A, 0xCB, 0x4A, 0x69, 0x31, 0x86, 89 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 90 | 0x31, 0x86, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x8C, 0x51, 91 | 0x8C, 0x71, 0x84, 0x30, 0x8C, 0x51, 0x8C, 0x51, 0x8C, 0x51, 0x84, 0x30, 92 | 0x94, 0x92, 0x63, 0x0C, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 93 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x4A, 0x69, 0x31, 0xA6, 94 | 0x6B, 0x6D, 0x8C, 0x51, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 95 | 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x84, 0x10, 0x31, 0x86, 0x31, 0x86, 96 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 97 | 0x8C, 0x51, 0x84, 0x30, 0x8C, 0x51, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 98 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0x7B, 0xCF, 99 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 100 | 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 101 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 102 | 0x6B, 0x6D, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 103 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x5A, 0xEB, 104 | 0x73, 0x8E, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 0x73, 0xAE, 105 | 0x73, 0xAE, 0x73, 0x8E, 0x94, 0x92, 0x73, 0x8E, 0x31, 0x86, 0x31, 0x86, 106 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 107 | 0x6B, 0x4D, 0x94, 0x92, 0x6B, 0x4D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 108 | 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x6D, 0x6B, 0x4D, 0x52, 0xAA, 0x31, 0x86, 109 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 110 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 111 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 112 | 0x39, 0xE7, 0x39, 0xC7, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 113 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x73, 0x8E, 0x73, 0xAE, 114 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 115 | 0x42, 0x28, 0x8C, 0x51, 0x84, 0x10, 0x8C, 0x71, 0x63, 0x0C, 0x31, 0x86, 116 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 117 | 0x73, 0xAE, 0x7B, 0xEF, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 118 | 0x31, 0x86, 0x31, 0xA6, 0x8C, 0x51, 0x6B, 0x6D, 0x31, 0x86, 0x4A, 0x49, 119 | 0x94, 0xB2, 0x52, 0x8A, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 120 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x10, 0x42, 0x28, 121 | 0x42, 0x28, 0x84, 0x30, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x30, 0x31, 0x86, 122 | 0x31, 0x86, 0x31, 0x86, 0x73, 0xAE, 0x7B, 0xCF, 0x31, 0x86, 0x31, 0x86, 123 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x42, 0x28, 124 | 0x52, 0x8A, 0x31, 0xA6, 0x31, 0xA6, 0x52, 0x8A, 0x42, 0x28, 0x31, 0xA6, 125 | 0x8C, 0x71, 0x5A, 0xCB, 0x31, 0x86, 0x31, 0xA6, 0x94, 0x92, 0x5A, 0xEB, 126 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 127 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 128 | 0x31, 0x86, 0x31, 0x86, 0x52, 0xAA, 0x94, 0x92, 0x7B, 0xCF, 0x8C, 0x71, 129 | 0x73, 0xAE, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 130 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 131 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 132 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 133 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 134 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 135 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 136 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 137 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 138 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 139 | 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 140 | }; --------------------------------------------------------------------------------