Closed bliteknight closed 5 years ago
I am currently using this board with an Arduino Uno and I cannot get it to work with a generic SSD1306 display.
Everytime I try to use the libraries together like in the code below, i get stuck in the SSD1306 allocation failed section of the code.
If I comment out fonaSS.begin(9600); then I get the display to work but then I can't use the shield.
Any thoughts?
#include <Wire.h> #include <Adafruit_SSD1306.h> #include <SoftwareSerial.h> #include "Adafruit_FONA.h" #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define FONA_RX 11 // Microcontroller TX #define FONA_TX 10 // Microcontroller RX #define FONA_PWRKEY 6 #define FONA_RST 7 // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); uint8_t type; char imei[16] = {0}; // MUST use a 16 character buffer for IMEI! unsigned long time_now = 0; SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); SoftwareSerial *fonaSerial = &fonaSS; float Voltage = 0.0; const float multiplier = 0.1875F; void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } else { Serial.println(F("SSD1306 allocation success!!")); } // Clear the buffer display.clearDisplay(); display.display(); // Show initial text delay(100); display.setTextSize(1); // Draw 2X-scale text display.setTextColor(WHITE); display.setCursor(0, 0); display.println("Hello World"); display.display(); // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); delay(2000); //LTE Setup Adafruit_FONA_LTE fona = Adafruit_FONA_LTE(); pinMode(FONA_RST, OUTPUT); digitalWrite(FONA_RST, HIGH); // Default state pinMode(FONA_PWRKEY, OUTPUT); delay(100); // For SIM7000 digitalWrite(FONA_PWRKEY, HIGH); //Connect to LTE Serial.println(F("FONA basic test")); Serial.println(F("Initializing....(May take several seconds)")); fonaSS.begin(115200); // Default SIM7000 shield baud rate Serial.println(F("Configuring to 9600 baud")); fonaSS.println("AT+IPR=9600"); // Set baud rate delay(100); // Short pause to let the command run fonaSS.begin(9600); if (! fona.begin(fonaSS)) { Serial.println(F("Couldn't find FONA")); while (1); // Don't proceed if it couldn't find the device } type = fona.type(); Serial.println(F("FONA is OK")); Serial.print(F("Found ")); switch (type) { case SIM800L: Serial.println(F("SIM800L")); break; case SIM800H: Serial.println(F("SIM800H")); break; case SIM808_V1: Serial.println(F("SIM808 (v1)")); break; case SIM808_V2: Serial.println(F("SIM808 (v2)")); break; case SIM5320A: Serial.println(F("SIM5320A (American)")); break; case SIM5320E: Serial.println(F("SIM5320E (European)")); break; case SIM7000A: Serial.println(F("SIM7000A (American)")); break; case SIM7000C: Serial.println(F("SIM7000C (Chinese)")); break; case SIM7000E: Serial.println(F("SIM7000E (European)")); break; case SIM7000G: Serial.println(F("SIM7000G (Global)")); break; case SIM7500A: Serial.println(F("SIM7500A (American)")); break; case SIM7500E: Serial.println(F("SIM7500E (European)")); break; default: Serial.println(F("???")); break; } // Print module IMEI number. uint8_t imeiLen = fona.getIMEI(imei); if (imeiLen > 0) { Serial.print("Module IMEI: "); Serial.println(imei); } // Set modem to full functionality fona.setFunctionality(1); // AT+CFUN=1 fona.setNetworkSettings(F("TM")); // For Hologram SIM card fona.setPreferredMode(38); // Use LTE only, not 2G fona.setPreferredLTEMode(1); // Use LTE CAT-M only, not NB-IoT //Get Time char buffer[23]; fona.getTime(buffer, 23); // make sure replybuffer is at least 23 bytes! Serial.print(F("Time = ")); Serial.println(buffer); } void loop() {}
FYI, root cause is a memory limitation of Arduino UNO
https://arduino.stackexchange.com/questions/62757/ssd1306-allocation-failed-when-include-sd-h
Using a different library SSD1306Ascii helpd fix this issue.
I am currently using this board with an Arduino Uno and I cannot get it to work with a generic SSD1306 display.
Everytime I try to use the libraries together like in the code below, i get stuck in the SSD1306 allocation failed section of the code.
If I comment out fonaSS.begin(9600); then I get the display to work but then I can't use the shield.
Any thoughts?