Arduino programlama (Arduino Pro Mini 3.3v sürümü) için yeniyim, aşağıdaki gibi bir kod var. Ben 9DOF, OLED ekran ve arduino pro mini bir BLE koparma bağlanıyorum.arduino programlama: yeterli hafıza mesajı yok
Zaten bazı bellek optimizasyon ipuçlarını inceledim, ancak hala bir sorunum var. Aşağıdaki kodla bile, dinamik bellek için yalnızca 9 baytım kaldı. BTLEserial.begin();
'u etkinleştirirsem, belleği kaybeder. Lütfen herhangi bir öneri takdir edilecektir.
#include <Wire.h>
#include <SPI.h>
#include <SparkFunLSM9DS1.h>
#include "Adafruit_BLE_UART.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
LSM9DS1 imu;
#define LSM9DS1_M 0x1E // Would be 0x1C if SDO_M is LOW
#define LSM9DS1_AG 0x6B // Would be 0x6A if SDO_AG is LOW
#define ADAFRUITBLE_REQ 10
#define ADAFRUITBLE_RDY 2
#define ADAFRUITBLE_RST 9
Adafruit_BLE_UART BTLEserial = Adafruit_BLE_UART(ADAFRUITBLE_REQ, ADAFRUITBLE_RDY, ADAFRUITBLE_RST);
void setup(void) {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // initialize with the I2C addr 0x3D (for the 128x64)
display.display();
delay(2000);
display.clearDisplay();
display.drawPixel(10, 10, WHITE);
display.display();
delay(2000);
display.clearDisplay();
imu.settings.device.commInterface = IMU_MODE_I2C;
imu.settings.device.mAddress = LSM9DS1_M;
imu.settings.device.agAddress = LSM9DS1_AG;
if (!imu.begin())
{
while (1)
;
}
// BTLEserial.begin(); - if i uncomment this code, i will get a not enough memory error.
}
aci_evt_opcode_t laststatus = ACI_EVT_DISCONNECTED;
void loop() {
displayAllDOF();
}
void displayAllDOF(){
display.setTextSize(1);
display.setTextColor(WHITE);
imu.readGyro();
display.setCursor(0,0);
display.print("G:");
display.print(imu.calcGyro(imu.gx));
display.print(", ");
display.print(imu.calcGyro(imu.gy));
display.print(", ");
display.print(imu.calcGyro(imu.gz));
display.println(" ");
imu.readAccel();
display.print("A:");
display.print(imu.calcAccel(imu.ax));
display.print(", ");
display.print(imu.calcAccel(imu.ay));
display.print(", ");
display.print(imu.calcAccel(imu.az));
display.println(" ");
imu.readMag();
display.print("M:");
display.print(imu.calcMag(imu.mx));
display.print(", ");
display.print(imu.calcMag(imu.my));
display.print(", ");
display.print(imu.calcMag(imu.mz));
display.println(" ");
display.display();
display.clearDisplay();
}
Bu benim eksikliğim, mobil geliştiriciyim ve düşük seviyeli programlamaya başladım. Şimdi bir fikrim var. Çok teşekkürler Daniel. – triston
Merhaba Daniel, yine aynı soru, BTLE, IMU, OLED ekranını birlikte çalıştırmam gerekirse, herhangi bir öneriniz var mı? Teşekkürler – triston
Yapabileceğinizi düşünmüyorum - Derleyiciniz, aynı anda çalışan tüm sınıflara sahip olamayacağınızı açıkça belirtir, bunu yapmak için yeterli RAM'iniz yoktur. Bununla birlikte, bunların hepsini aynı anda çalıştırmanız gerekmediğinden, yapmanız gerekenleri yapmak için yeterince uzun olduğundan eminim. Her işlemi kendi işlevine ayırın ve her seferinde bir tane ele alın. Cevabımı daha iyi gösterecek bir yarı sözde kod ile güncelledim. –