Home › Forums › The libraries hosted on the site › EByte LoRa e220 UART devices LLCC68 › LORA E220 error using U8g2Lib
- This topic has 1 reply, 2 voices, and was last updated 1 year, 4 months ago by
Renzo Mischianti.
-
AuthorPosts
-
-
27 December 2023 at 11:38 #28873
Hello Mr. Renzo, please help me.
My name is Hansaran, and I have interest in electronics. I often read your articles about LoRa. I’m a beginner with LoRa and ESP32 modules, because usually I use Arduino for my projects.I want to create a LoRa communication device to monitor someone. The monitoring data will be sent to a gateway using the LoRa E220 module. I have never used LoRa before. I’m making this device to monitor my father, who is a sulfur miner. The mining is done manually, and there is no communication network available, which makes me worry about his condition. I hope this device can be completed and can be useful for my father. Sorry for the long explanation.
When I try to integrate the “sendfixedtransmission” example into my existing program, I have an error like this.
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x400d632b PS : 0x00060a30 A0 : 0x800d6413 A1 : 0x3ffc5b70 A2 : 0x3ffc2044 A3 : 0x000000c1 A4 : 0x00000000 A5 : 0x00000008 A6 : 0x3ffb7c80 A7 : 0x00000000 A8 : 0x800d6304 A9 : 0x3ffc5b60 A10 : 0x00000000 A11 : 0x000003e8 A12 : 0x00000064 A13 : 0x00000067 A14 : 0x00060a20 A15 : 0x00000001 SAR : 0x0000000a EXCCAUSE: 0x0000001c EXCVADDR: 0x00000000 LBEG : 0x4008474d LEND : 0x40084755 LCOUNT : 0x00000027 Backtrace: 0x400d6328:0x3ffc5b70 0x400d6410:0x3ffc5ba0 0x400d2ba6:0x3ffc5be0 0x400d8b0a:0x3ffc5c40 ELF file SHA256: 31e1dff54c44b265 Rebooting...
I’ve read articles about this error but still don’t understand it. https://stackoverflow.com/questions/63399901/how-to-fix-guru-meditation-error-core-1-paniced-loadprohibited-error
It turned out that the buffer(declared globally) that I used for receiving messages was appending new messages instead of overwriting the pre-existing contents in it. So, an illegal memory-write attempt was made and the device panicked and rebooted.
I’ve tried sending the fixed transmission example before and it worked.
Please, I need your help.Here is my code:
#include "U8g2lib.h" #include <Wire.h> #include "RTClib.h" #include "FS.h" #include "SD.h" #include "SPI.h" #include "Arduino.h" #include "LoRa_E220.h" U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); // //OLED SSD1306 128x64 LoRa_E220 e220ttl(&Serial2, 15, 33, 32); // RX AUX M0 M1 // 'icon_sync', 16x16px const unsigned char bitmap_icon_sinkronisasi [] PROGMEM = { 0x00, 0x00, 0xe0, 0x01, 0x10, 0x38, 0x88, 0x18, 0x84, 0x28, 0x82, 0x20, 0x82, 0x40, 0x82, 0x40, 0xc2, 0x4f, 0xc2, 0x40, 0x02, 0x40, 0x0a, 0x20, 0x0c, 0x10, 0x0e, 0x08, 0xc0, 0x07, 0x00, 0x00, }; // 'icon_gps1', 16x16px const unsigned char bitmap_icon_node_sensor_1 [] PROGMEM = { 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x10, 0x80, 0x27, 0x00, 0x48, 0x00, 0x53, 0x60, 0x54, 0xe0, 0x54, 0xe0, 0x51, 0xe0, 0x03, 0xe0, 0x03, 0x50, 0x40, 0xf8, 0x60, 0x04, 0x41, 0xfe, 0x43, 0x02, 0xe2, }; // 'icon_gps2', 16x16px const unsigned char bitmap_icon_node_sensor_2 [] PROGMEM = { 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x10, 0x80, 0x27, 0x00, 0x48, 0x00, 0x53, 0x60, 0x54, 0xe0, 0x54, 0xe0, 0x51, 0xe0, 0x03, 0xe0, 0x03, 0x50, 0x60, 0xf8, 0x90, 0x04, 0x41, 0xfe, 0x23, 0x02, 0xf2, }; // 'icon kembang api', 16x16px const unsigned char bitmap_icon_sleep [] PROGMEM = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x29, 0x08, 0x10, 0x08, 0x00, 0x36, 0x00, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x08, 0x20, 0x08, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, }; // 'icon jam', 16x16px const unsigned char bitmap_icon_set_waktu [] PROGMEM = { 0xe0, 0x07, 0x18, 0x18, 0x84, 0x24, 0x8a, 0x40, 0x82, 0x50, 0x81, 0x80, 0xc1, 0x81, 0x45, 0xae, 0x41, 0x82, 0x81, 0x81, 0x05, 0xa0, 0x02, 0x40, 0x12, 0x48, 0x04, 0x21, 0x18, 0x18, 0xe0, 0x07, }; // 'icon_knob_over_oled', 16x16px // Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 384) const unsigned char* bitmap_icons[5] = { bitmap_icon_sinkronisasi, bitmap_icon_node_sensor_1, bitmap_icon_node_sensor_2, bitmap_icon_sleep, bitmap_icon_set_waktu, }; // Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 8320) // 'scrollbar_background', 8x64px const unsigned char bitmap_scrollbar_background [] PROGMEM = { 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, }; // 'item_sel_outline', 128x21px const unsigned char bitmap_item_sel_outline [] PROGMEM = { 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, }; // ------------------ end generated bitmaps from image2cpp --------------------------------- const int NUM_ITEMS = 5; // number of items in the list and also the number of screenshots and screenshots with QR codes (other screens) const int MAX_ITEM_LENGTH = 20; // maximum characters for the item name char menu_items [NUM_ITEMS] [MAX_ITEM_LENGTH] = { // array with item names { "Sinkronisasi" }, { "Node Sensor 1" }, { "Node Sensor 2" }, { "Sleep" }, { "Set. Waktu" }, }; // note - when changing the order of items above, make sure the other arrays referencing bitmaps // also have the same order, for example array "bitmap_icons" for icons, and other arrays for screenshots and QR codes // TOMBOL MENU #define BUTTON_UP_PIN 27 // pin for UP button #define BUTTON_SELECT_PIN 25 // pin for SELECT button #define BUTTON_DOWN_PIN 26 // pin for DOWN button int button_up_clicked = 0; // only perform action when button is clicked, and wait until another press int button_select_clicked = 0; // same as above int button_down_clicked = 0; // same as above int item_selected = 0; // which item in the menu is selected int item_sel_previous; // previous item - used in the menu screen to draw the item before the selected one int item_sel_next; // next item - used in the menu screen to draw next item after the selected one int current_screen = 0; // 0 = menu, 1 = screenshot, 2 = qr //ATUR WAKTU int tombol_up = 0; // only perform action when button is clicked, and wait until another press int tombol_ok = 0; // same as above int tombol_down = 0; // same as above int item_terpilih = 0; // which item in the menu is selected int aksi_sekarang = 0; // 0 = menu, 1 = screenshot, 2 = qr int tombol_ok_sinkron = 0; int kurang = 0; int dino; // RTC DS1307 RTC_DS1307 rtc; //uint8_t set_tahun, set_bulan, set_tanggal, set_jam, set_menit, set_detik; uint8_t bulan, tanggal, jam, menit, detik; uint16_t tahun; String hari, jam_up, menit_up, detik_up, sync_time; unsigned long delay_rtc; String timstep; char daysOfTheWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; // SD Card unsigned long delaysd; unsigned long delaytampil; String simpan_waktu, simpan_node1, simpan_node2; String hrate1, suhu1, lon1, lat1, alt1, hrate2, suhu2, lon2, lat2, alt2; // LORA #define NODESENSOR1 2 //NODE SENSOR 1 #define NODESENSOR2 4 //NODE SENSOR 1 #define ENABLE_RSSI true String pesan_n1, pesan_n2, pesan; //int detik; //----------------------------------- File SD ----------------------------------------- //SDCARD READ FILES void readFile(fs::FS &fs, const char * path) { //Serial.printf("Reading file: %s\n", path); File file = fs.open(path); if (!file) { //Serial.println("Failed to open file for reading"); return; } Serial.println("Read from file: "); while (file.available()) { Serial.write(file.read()); } file.close(); } //SDCARD WRITE FILES void writeFile(fs::FS &fs, const char * path, const char * message) { File file = fs.open(path, FILE_WRITE); if (!file) { return; } if (file.print(message)) { } else { } file.close(); } //SDCARD APPEND void appendFile(fs::FS &fs, const char * path, const char * message) { File file = fs.open(path, FILE_APPEND); if (!file) { return; } if (file.print(message)) { } else { } file.close(); } //SDCARD RENAME FILES void renameFile(fs::FS &fs, const char * path1, const char * path2) { if (fs.rename(path1, path2)) { } else { } } //SDCARD DELETE FILES void deleteFile(fs::FS &fs, const char * path) { if (fs.remove(path)) { } else { } } // ------------------------------------ Menu 1-------------------------------------------- // ----------------------------------------------------------------------------------------------------------- void sinkronisasi(void) { //u8g2.setFont(u8g2_font_4x6_tf); //u8g2.setFont(u8g2_font_u8glib_4_tf); //u8g2.setFont(u8g2_font_6x10_mf); //u8g2.drawStr(20, 32 + 11 + 15, timstep.c_str()); u8g2.setFont(u8g2_font_artosserif8_8r); u8g2.drawStr(0, 20, "Pesan diterima :"); u8g2.drawStr(0, 30, pesan.c_str()); //u8g2.drawStr(0, 40, "Siap Untuk Sinkronisasi"); } void node1(void) { u8g2.setFont(u8g2_font_amstrad_cpc_extended_8f);/////////////Font Bagus u8g2.drawStr(0, 20, "Long : 1234567"); //u8g2.setFont(u8g2_font_u8glib_4_tf); u8g2.drawStr(0, 29, "Lati : 1234567"); //u8g2.setFont(u8g2_font_6x10_mf); u8g2.drawStr(0, 38, "Alti : 123 mdpl"); //u8g2.setFont(u8g2_font_6x10_mf); u8g2.drawStr(0, 47, "Wind : 123 km/j"); } void node2(void) { u8g2.setFont(u8g2_font_artosserif8_8r); u8g2.drawStr(0, 20, "Long : 1234567"); //u8g2.setFont(u8g2_font_u8glib_4_tf); u8g2.drawStr(0, 29, "Lati : 1234567"); //u8g2.setFont(u8g2_font_6x10_mf); u8g2.drawStr(0, 38, "Alti : 123 mdpl"); //u8g2.setFont(u8g2_font_6x10_mf); u8g2.drawStr(0, 47, "Wind : 123 km/j"); } void turu(void) { u8g2.setFont(u8g2_font_6x10_mf); u8g2.drawStr(0, 20, "Tekan Lagi"); u8g2.drawStr(0, 30, "Untuk Mode "); u8g2.drawStr(0, 40, "Tidur "); } void setwaktu(void) { String dis_waktu = String(jam_up) + ":" + String(menit_up) + ":" + String(detik_up); String dis_tanggal = String(tanggal) + "/" + String(bulan) + "/" + String(tahun); //String dis_timstep = String(timstep); u8g2.setFont(u8g2_font_logisoso20_tf); u8g2.drawStr(15, 21, dis_waktu.c_str()); u8g2.setFont(u8g2_font_amstrad_cpc_extended_8f); u8g2.drawStr(25, 32, hari.c_str()); u8g2.drawStr(25, 32 + 11, dis_tanggal.c_str()); u8g2.drawStr(20, 32 + 11 + 15, timstep.c_str()); } void gelap(void) { //u8g2.setFont(u8g2_font_artosserif8_8r); //u8g2.drawStr(0, 18, "Long : 1234567"); } //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| SET WAKTU ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| void set_waktu() { DateTime now = rtc.now(); if ((digitalRead(BUTTON_DOWN_PIN) == LOW) && (tombol_ok_sinkron == 0)) { // select button clicked, jump between screens tombol_ok_sinkron = 1; // set button to clicked to only perform the action once if (aksi_sekarang == 0) { aksi_sekarang = 1; } else if (aksi_sekarang == 1) { aksi_sekarang = 2; } else if (aksi_sekarang == 2) { aksi_sekarang = 3; } else if (aksi_sekarang == 3) { aksi_sekarang = 4; } else if (aksi_sekarang == 4) { aksi_sekarang = 5; } else if (aksi_sekarang == 5) { aksi_sekarang = 6; } else if (aksi_sekarang == 6) { aksi_sekarang = 7; } else { aksi_sekarang = 0; } } if ((digitalRead(BUTTON_DOWN_PIN) == HIGH) && (tombol_ok_sinkron == 1)) { // unclick tombol_ok_sinkron = 0; } //u8g2.clearBuffer(); // clear buffer for storing display content in RAM if (aksi_sekarang == 0) { // MENU SCREEN tahun = now.year(); bulan = now.month(); tanggal = now.day(); jam = now.hour(); menit = now.minute(); detik = now.second(); timstep = now.timestamp(); hari = String(daysOfTheWeek[now.dayOfTheWeek()]); jam_up = String(jam); menit_up = String(menit); detik_up = String(detik); if (jam < 10) { jam_up = "0" + String(jam); } if (menit < 10) { menit_up = "0" + String(menit); } if (detik < 10) { detik_up = "0" + String(detik); } setwaktu(); } //GANTI TANGGAL else if (aksi_sekarang == 1) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once tanggal++; if (tanggal > 31) { tanggal = 1; } } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } //GANTI BULAN else if (aksi_sekarang == 2) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once bulan ++; if (bulan > 12) { bulan = 1; } } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } //GANTI TAHUN else if (aksi_sekarang == 3) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once tahun ++; if (tahun > 2030) { tahun = 2020; } } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } //GANTI JAM else if (aksi_sekarang == 4) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once jam ++; if (jam > 23) { jam = 1; } jam_up = String(jam); } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } //GANTI MENIT else if (aksi_sekarang == 5) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once menit ++; if (menit > 59) { menit = 1; } menit_up = String(menit); } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } //GANTI DETIK else if (aksi_sekarang == 6) { if ((digitalRead(BUTTON_UP_PIN) == LOW) && (tombol_up == 0)) { // up button clicked - jump to previous menu item tombol_up = 1; // set button to clicked to only perform the action once detik ++; if (detik > 59) { detik = 1; } detik_up = String(detik); } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (tombol_up == 1)) { // unclick tombol_up = 0; } setwaktu(); } else if (aksi_sekarang == 7) { //rtc.setTime(); // SS,MM,HH,Date,Month,Year rtc.adjust(DateTime(tahun, bulan, tanggal, jam, menit, detik)); setwaktu(); aksi_sekarang = 0; } //setwaktu(); } //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| END SET WAKTU |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); // ----------------------------------------------------------------------------------------------------------- void setup() { Serial.begin(9600); //LORA ResponseStructContainer c; c = e220ttl.getConfiguration(); // It's important get configuration pointer before all other operation Configuration configuration = *(Configuration*) c.data; Serial.println(c.status.getResponseDescription()); Serial.println(c.status.code); printParameters(configuration); //////////////////////////////////////////////////////////////////////////////////////// //----------------------- FIXED RECEIVER RSSI ----------------------- configuration.ADDL = 0x03; configuration.ADDH = 0x00; configuration.CHAN = 23; configuration.SPED.uartBaudRate = UART_BPS_9600; configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; configuration.SPED.uartParity = MODE_00_8N1; configuration.OPTION.subPacketSetting = SPS_200_00; configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; configuration.OPTION.transmissionPower = POWER_22; configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED; configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION; configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; ResponseStatus rs = e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); //Serial.println(rs.getResponseDescription()); // Serial.println(rs.code); c.close(); //////////////////////////////////////////////////////////////////////////////////////// u8g2.setColorIndex(1); // set the color to white u8g2.begin(); u8g2.setBitmapMode(1); //RTC rtc.begin(); // define pins for buttons // INPUT_PULLUP means the button is HIGH when not pressed, and LOW when pressed // since it´s connected between some pin and GND pinMode(BUTTON_UP_PIN, INPUT_PULLUP); // up button pinMode(BUTTON_SELECT_PIN, INPUT_PULLUP); // select button pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP); // down button // MicroSD Card if (!SD.begin()) { Serial.println("Card Mount Failed"); return; } //deleteFile(SD, "/datalog.txt"); File file = SD.open("/databasis.txt"); if (!file) { Serial.println("File doesn't exist"); Serial.println("Creating file..."); writeFile(SD, "/databasis.txt", "Apasih gajelas banget \r\n"); } else { Serial.println("File already exists"); } appendFile(SD, "/databasis.txt", "| Tanggal | Hrate | Suhu | Latitude | Longitude | Altitude|\r\n"); appendFile(SD, "/databasis.txt", "===========================================================\r\n"); readFile(SD, "/databasis.txt"); file.close(); delay_rtc = millis(); delaysd = millis(); } void loop() { // when pin 13 is LOW (DEMO_PIN), enable demo mode // this could be done either by using a switch // or simply by connecting the wire between pin 13 and GND // (those pins are next to each other) if (current_screen == 0) { // MENU SCREEN // up and down buttons only work for the menu screen if ((digitalRead(BUTTON_UP_PIN) == LOW) && (button_up_clicked == 0)) { // up button clicked - jump to previous menu item item_selected = item_selected - 1; // select previous item button_up_clicked = 1; // set button to clicked to only perform the action once if (item_selected < 0) { // if first item was selected, jump to last item item_selected = NUM_ITEMS - 1; } } else if ((digitalRead(BUTTON_DOWN_PIN) == LOW) && (button_down_clicked == 0)) { // down button clicked - jump to next menu item item_selected = item_selected + 1; // select next item button_down_clicked = 1; // set button to clicked to only perform the action once if (item_selected >= NUM_ITEMS) { // last item was selected, jump to first menu item item_selected = 0; } } if ((digitalRead(BUTTON_UP_PIN) == HIGH) && (button_up_clicked == 1)) { // unclick button_up_clicked = 0; } if ((digitalRead(BUTTON_DOWN_PIN) == HIGH) && (button_down_clicked == 1)) { // unclick button_down_clicked = 0; } } if ((digitalRead(BUTTON_SELECT_PIN) == LOW) && (button_select_clicked == 0)) { // select button clicked, jump between screens button_select_clicked = 1; // set button to clicked to only perform the action once if (current_screen == 0) { current_screen = 1; // menu items screen --> screenshots screen } else if (current_screen == 1) { current_screen = 2; // screenshots screen --> qr codes screen } else { current_screen = 0; // qr codes screen --> menu items screen } } if ((digitalRead(BUTTON_SELECT_PIN) == HIGH) && (button_select_clicked == 1)) { // unclick button_select_clicked = 0; } // set correct values for the previous and next items item_sel_previous = item_selected - 1; if (item_sel_previous < 0) { item_sel_previous = NUM_ITEMS - 1; // previous item would be below first = make it the last } item_sel_next = item_selected + 1; if (item_sel_next >= NUM_ITEMS) { item_sel_next = 0; // next item would be after last = make it the first } u8g2.clearBuffer(); // clear buffer for storing display content in RAM if (current_screen == 0) { // MENU SCREEN // selected item background u8g2.drawXBMP(0, 22, 128, 21, bitmap_item_sel_outline); // draw previous item as icon + label u8g2.setFont(u8g_font_7x14); u8g2.drawStr(25, 15, menu_items[item_sel_previous]); u8g2.drawXBMP( 4, 2, 16, 16, bitmap_icons[item_sel_previous]); // draw selected item as icon + label in bold font u8g2.setFont(u8g_font_7x14B); u8g2.drawStr(25, 15 + 20 + 2, menu_items[item_selected]); u8g2.drawXBMP( 4, 24, 16, 16, bitmap_icons[item_selected]); // draw next item as icon + label u8g2.setFont(u8g_font_7x14); u8g2.drawStr(25, 15 + 20 + 20 + 2 + 2, menu_items[item_sel_next]); u8g2.drawXBMP( 4, 46, 16, 16, bitmap_icons[item_sel_next]); // draw scrollbar background u8g2.drawXBMP(128 - 8, 0, 8, 64, bitmap_scrollbar_background); // draw scrollbar handle u8g2.drawBox(125, 64 / NUM_ITEMS * item_selected, 3, 64 / NUM_ITEMS); // draw upir logo //u8g2.drawXBMP(128-16-4, 64-4, 16, 4, upir_logo); } else if (current_screen == 1) { // SCREENSHOTS SCREEN if (item_selected == 0) { sinkronisasi(); } else if (item_selected == 1) { node1(); } else if (item_selected == 2) { node2(); } else if (item_selected == 3) { turu(); } else if (item_selected == 4) { set_waktu(); } } else if (current_screen == 2) { // QR SCREEN if (item_selected != 3) { current_screen = 0; } else { //do nothing } } // Baca Pesan baca_pesan(); // Kirim pesan Serial Monitor kirim_pesan(); //Simpan setiap 10 detik if (millis() - delaysd > 10000) { //appendFile(SD, "/databasis.txt", simpan.c_str()); simpan_data(); detik = detik + 10; delaysd = millis(); } u8g2.sendBuffer(); } void kirim_pesan() { if (Serial.available()) { String input = Serial.readString(); ResponseStatus rs = e220ttl.sendFixedMessage(0, NODESENSOR1, 23, input); // Check If there is some problem of succesfully send // Serial.println(rs.getResponseDescription()); } } void baca_pesan() { if (e220ttl.available() > 1) { // read the String message #ifdef ENABLE_RSSI ResponseContainer rc = e220ttl.receiveMessageRSSI(); #else ResponseContainer rc = e220ttl.receiveMessage(); #endif // Is something goes wrong print error if (rc.status.code != 1) { Serial.println(rc.status.getResponseDescription()); } else { Print the data received Serial.println(rc.status.getResponseDescription()); Serial.println(rc.data); #ifdef ENABLE_RSSI Serial.print("RSSI: "); Serial.println(rc.rssi, DEC); #endif } pesan = String(rc.data); } } void simpan_data() { DateTime now = rtc.now(); simpan_waktu = String(daysOfTheWeek[now.dayOfTheWeek()]) + ", " + String(now.hour()) + ":" + String(now.minute()) + "|" + String(now.second()) + "\r\n"; simpan_node1 = String("Node 1") + "|" + hrate1 + "|" + suhu1 + "|" + lon1 + "|" + lat1 + "|" + alt1 + "\r\n"; simpan_node2 = String("Node 2") + "|" + hrate2 + "|" + suhu2 + "|" + lon2 + "|" + lat2 + "|" + alt2 + "\r\n"; appendFile(SD, "/databasis.txt", simpan_waktu.c_str()); appendFile(SD, "/databasis.txt", simpan_node1.c_str()); appendFile(SD, "/databasis.txt", simpan_node2.c_str()); } void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------"); Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX); Serial.println(F(" ")); Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX); Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX); Serial.println(F(" ")); Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription()); Serial.println(F(" ")); Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription()); Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription()); Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription()); Serial.println(F(" ")); Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting()); Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription()); Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable()); Serial.println(F(" ")); Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription()); Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription()); Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription()); Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription()); Serial.println("----------------------------------------"); } void printModuleInformation(struct ModuleInformation moduleInformation) { Serial.println("----------------------------------------"); Serial.print(F("HEAD: ")); Serial.print(moduleInformation.COMMAND, HEX);Serial.print(" ");Serial.print(moduleInformation.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(moduleInformation.LENGHT, DEC); Serial.print(F("Model no.: ")); Serial.println(moduleInformation.model, HEX); Serial.print(F("Version : ")); Serial.println(moduleInformation.version, HEX); Serial.print(F("Features : ")); Serial.println(moduleInformation.features, HEX); Serial.println("----------------------------------------"); }
I’m sorry if my code appears messy.
-
27 December 2023 at 12:19 #28928
Hi Supachokhansaran,
you must clean your code by disabling the single features and checking who created the problem.If you want more information about stack trace, and check It detal.
tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-addr2line.exe -fe C:\MYPROJECT\build\MYELF.elf 0x4000c269:0x3ffb7810 0x400d5327:0x3ffb7830 0x400d59a2:0x3ffb7850 0x400d600f:0x3ffb7b20 0x400d5039:0x3ffb7b40 0x400d3f17:0x3ffb7b80
or you can use Arduino IDE plugin.
Bye Renzo
-
-
AuthorPosts
- You must be logged in to reply to this topic.