INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ram Speicher bei Arduino Mega wird knapp
31.01.2019, 18:04
Beitrag #1
Ram Speicher bei Arduino Mega wird knapp
Moin,
Ich bin gerade dabei mit einem Arduino Mega 2560, einem TFT-Screen von Kuman, einem DCF-77 Empfänger eine Wetterstation zu bauen.
Soweit sogut, am Anfang funktioniert die Wetterstation, jedoch ist nach einiger Zeit
(ca. 5-6 Minuten) der Arbeitsspeicher des Mega voll und das Programm stürzt ab.
Kann mir da jemand weiterhelfen?
Code:
[code]
#include <SFE_BMP180.h>
#include <SimpleDHT.h>
#include <MQ2Lib.h>
#include <DCF77.h>
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Time.h>
#include <TimeLib.h>
#include <DCF77.h>

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif


#define YP A3  
#define XM A2  
#define YM 9  
#define XP 8  

#define SD_CS 10  

#define TS_MINX 880
#define TS_MINY 100
#define TS_MAXX 130
#define TS_MAXY 910


TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
// optional
#define LCD_RESET A4


#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF


Adafruit_TFTLCD tft(LCD_CS, LCD_RS, LCD_WR, LCD_RD, LCD_RESET);


#define BOXSIZEX 120
#define BOXSIZEY 100
#define PENRADIUS 3

#define DCF_INTERRUPT  3
#define DCF_PIN 24

#define MINPRESSURE 10
#define MAXPRESSURE 1000

char time_s[9];
char date_s[11];

int i = 0;
int UP = 53;
int DOWN = 49;

time_t prevDisplay = 0;
time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
int g = 0;
int menue = 0;
int MQ2_Pin = A15;
float lpg,co,smoke;
MQ2 mq2(MQ2_Pin, true);

int pinDHT22 = 18;
SimpleDHT22 dht22(pinDHT22);

float temperature = 0;
float humidity = 0;

SFE_BMP180 pressure;
  char status;
  double T,P,p0,a;

int u = 0;
int r = 0;
  
void setup() {
   pinMode(UP, OUTPUT);
pinMode(DOWN, OUTPUT);
digitalWrite(DOWN, LOW);
digitalWrite(UP, LOW);
  if (pressure.begin())
   // Serial.println("BMP180 init success");
// SD.begin();
mq2.begin();

   tft.reset();
  uint16_t identifier = tft.readID();
identifier=0x9341;
  tft.begin(identifier);
  /*/
  tft.fillScreen(BLACK);
tft.setTextSize(3);
tft.setTextColor(RED);
tft.setCursor(0,160);
tft.setRotation(2);
tft.println("Platzhalter");
// tft.fillScreen(WHITE);
bmpDraw("s.bmp",0,0);
  delay(1000);
  /*/
  DCF.Start();
  setSyncInterval(30);
  setSyncProvider(getDCFTime);
  Serial.begin(9600);
  Serial.println(F("================================================================================​================================================================================​================================================================================​===="));
  Serial.println(F("Physik Projekt von Leon Warncke und Paul Neumann"));
  Serial.println(F("Bis Genaue Zeit- und Datumsangaben vorliegen kann es einige Minuten dauern"));
  Serial.println(F("Powered by Arduino"));
  DCF.getTime();
  tft.fillScreen(BLACK);
  Serial.println(F("Tft erfolgreich gestartet"));
  pinMode(UP, OUTPUT);
  pinMode(DOWN, OUTPUT);
  digitalWrite(DOWN, LOW);
  digitalWrite(UP, LOW);
  tft.setCursor(0,0);
  tft.setRotation(2);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.println(F("Physik Projekt "));
  tft.println(F("Wetterstation"));
  tft.setTextColor(CYAN);
  tft.setTextSize(1);
  tft.setCursor(0,300);
  tft.println("Powered by Arduino and developed by:");
  tft.println("Leon Warncke and Paul Neumann");
  delay(1000);
  tft.setCursor(0, 160);
  tft.setTextColor(WHITE);
  tft.setTextSize(4);
  tft.println("Starte...");
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("!Bis genaue Zeitdaten vorliegen,");
  tft.println("kann es einige Minuten dauern!");
  digitalWrite(UP, HIGH);
  digitalWrite(DOWN, HIGH);
  delay(1000);
  digitalWrite(UP, LOW);
  digitalWrite(DOWN, LOW);


  identifier=0x9341;
  tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("Objekte gezeichnet!"));
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  
  LT();
//  GUI();
  
}

void loop() {
  interrupts();
  freeRam();
  getDCFTime();
  GUI();
  action();
// LT();
// getDCFTime();
// LuftDruck();
//  debug();
}
void debug(){
  if(menue > 6){
    Serial.println(F(" "));
    Serial.println(F("Debug"));
    Serial.print(menue);
    menue = 0;
    if(menue > 100){
       menue = 0;
       r++;
    tft.reset();
    uint16_t identifier = tft.readID();
  identifier=0x9341;
  tft.begin(identifier);
  //  identifier=0x9341;
  //tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  Serial.println(F("Repaint: "));Serial.print(r);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  GUI();
    }else{
      GUI();
    }
     menue = 0;
    return menue;
  }else if(menue < 0){
    Serial.println(" ");
    Serial.println("Debug");
    Serial.println(menue);
    menue = 5;
    if(menue < -100){
      menue = 5;
    r++;
    tft.reset();
    uint16_t identifier = tft.readID();
  identifier=0x9341;
  tft.begin(identifier);
  //  identifier=0x9341;
  //tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  Serial.println(F("Repaint: "));Serial.print(r);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  GUI();
    }
    GUI();
  return menue;
  }else if(menue > 100){
    r++;
    tft.reset();
    uint16_t identifier = tft.readID();
  identifier=0x9341;
  tft.begin(identifier);
  //  identifier=0x9341;
  //tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  Serial.println(F("Repaint: "));Serial.print(r);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  GUI();
  }else if(menue <-100){
    r++;
    tft.reset();
    uint16_t identifier = tft.readID();
  identifier=0x9341;
  tft.begin(identifier);
  //  identifier=0x9341;
  //tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  Serial.println(F("Repaint: "));Serial.print(r);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  GUI();
  }
}
unsigned long getDCFTime() //Zeitempfang
{
  Serial.println(F(" "));
  Serial.println(F("Suche nach neuer Systemzeit..."));
  time_t DCFtime = DCF.getTime();
  if (DCFtime!=0) {  
    digitalWrite(UP, HIGH);
    digitalWrite(DOWN, HIGH);
    setTime(DCFtime);//Neue Systemzeit setzen
    Serial.print(F("Neue Zeit erhalten : ")); //Ausgabe an seriell
   // Serial.print(sprintTime());
    Serial.print(F("  "));
   // Serial.println(sprintDate());  
    Serial.print(F("X"));  
     action();
  }else {
     action();
  }
  action();
  return DCFtime;
}
void GUI(){
  debug();
// int x = 0;
// x++;
Serial.println(F("Arbeitsspeicher: "));
Serial.println(freeRam());
  if(u >= 120){
    r++;
    tft.reset();
    uint16_t identifier = tft.readID();
  identifier=0x9341;
  tft.begin(identifier);
  //  identifier=0x9341;
  //tft.begin(identifier);
  tft.fillScreen(BLACK);
  tft.setRotation(2);
   //tft.fillScreen(WHITE);
  tft.fillRect(0, 0, 119, BOXSIZEY, RED);
  tft.fillRect(121, 0, 119, BOXSIZEY, RED);
  tft.setCursor(30,110);
  tft.setTextSize(5);
  tft.setTextColor(MAGENTA);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  Serial.println(F("Repaint: "));Serial.print(r);
  Serial.println(F("================================================================================​================================================================================​================================================================================​================================================"));
  tft.print("<-");
  tft.setCursor(151,110);
  tft.print("->");
  u=0;
  }

  i++;
  if(i>2){
    i = 0;
    action();
  }
  tft.setTextSize(1);
  tft.setTextColor(GREEN);
  tft.setCursor(30,340);
  tft.println("Menueindex:");
  tft.setCursor(30,350);
  tft.println(menue);
// delay(999);
for(int y = 0;y<750;y+=7){
  delay(7);
  action();
}
  tft.fillRect(10,350,30,30,BLACK);
switch (menue){
  case -1:
  menue = 5;
  action();
  break;
  case 0:
  {
  Serial.println(F("Uebermalt: "));
  u++;
  Serial.println(u);
  long previousMillis = 0;        
  long interval = 999;
  unsigned long currentMillis = millis();
//  boolean a = false;
  tft.fillRect(10,310,10,10,BLACK);
  tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(3);
  tft.setTextColor(YELLOW);
  tft.print("Zeit:");
  if(currentMillis - previousMillis > interval) {
    action();
    previousMillis = currentMillis;  
    if (a == false){
    action();
  tft.setCursor(10, 230);
  tft.print(hour());
  tft.setCursor(50, 230);
  tft.print(":");
  tft.setCursor(70,230);
  tft.print(minute());
  tft.setCursor(120, 230);
  tft.print(second());
  tft.setTextSize(1);
  tft.setTextColor(YELLOW);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
  Serial.println(" ");
  //Serial.println("================================================================================​================================================================================​================================================================================​====");
  //Serial.println("================================================================================​================================================================================​================================================================================​=============== ");
  Serial.println(F("Zeit: "));
  Serial.print(hour());Serial.print(F(":"));Serial.print(minute());Serial.print(F(" "));Serial.print(second());
  //a = true;
getDCFTime();
  action();
GUI();
    }else{
tft.fillRect(10, 200,300, 400, BLACK);
tft.fillRect(10,310,10,10,BLACK);
a =false;
action();
    }
    }
action();
  }
  break;
  case 1:
  {
  Serial.println(F("Uebermalt: "));
  u++;
  Serial.println(u);
  long previousMillis = 0;        
  long interval = 999;    
  unsigned long currentMillis = millis();
  boolean b = false;
  tft.fillRect(10,310,10,10,BLACK);
  tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(3);
  tft.setTextColor(BLUE);
  tft.print("Datum:");
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;  
    if (b == false){
      b = true;
  tft.setCursor(10, 230);
  tft.print(day());
  tft.setCursor(50, 230);
  tft.print(":");
  tft.setCursor(70,230);
  tft.print(month());
  tft.setCursor(120, 230);
  tft.print(year());
  tft.setTextSize(1);
  tft.setTextColor(BLUE);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
  Serial.println(" ");
// Serial.println("================================================================================​================================================================================​================================================================================​====");
  //Serial.println("================================================================================​================================================================================​================================================================================​===============");
  Serial.println(F("Datum"));
  Serial.print(day());Serial.print(F("."));Serial.print(month());Serial.print(F(" "));Serial.print(year());
  b=true;
  getDCFTime();
  action();
GUI();
    
    }else{
tft.fillRect(10, 200,300, 400, BLACK);
  
tft.fillRect(10,310,10,10,BLACK);
b=false;
    }
  }
action();
}
  break;
  case 2:
  {
     Serial.println(F("Uebermalt: "));
  u++;
   Serial.println(u);
  long previousMillis = 0;        

  long interval = 999;    

  unsigned long currentMillis = millis();
  boolean c = false;
   tft.fillRect(10,310,10,10,BLACK);
   tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(3);
  tft.setTextColor(GREEN);
  tft.print("Temperatur:");
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;  
    if (c == false){
      c = true;
  tft.setTextSize(3);
  tft.setCursor(10, 230);
  tft.print(temperature);
  tft.setCursor(100, 230);
  tft.print("C");
  
  tft.setTextSize(1);
  tft.setTextColor(GREEN);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
  Serial.println(" ");
  //Serial.println("================================================================================​================================================================================​================================================================================​====");
//  Serial.println("================================================================================​================================================================================​================================================================================​==============================");
Serial.print(F("Temperatur:"));
Serial.print(temperature);Serial.print(F(" Grad C"));
  c=true;
  getDCFTime();
  action();
GUI();
    
    }else{
tft.fillRect(10, 200,300, 400, BLACK);
  
tft.fillRect(10,310,10,10,BLACK);
c=false;
    }
  }
action();
}
  break;
  case 3:
  {
     Serial.println(F("Uebermalt: "));
  u++;
   Serial.println(u);
  long previousMillis = 0;        

  long interval = 999;    

  unsigned long currentMillis = millis();
  boolean d = false;
  LuftDruck();
   tft.fillRect(10,310,10,10,BLACK);
   tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(3);
  tft.setTextColor(CYAN);
  tft.print("Luftdruck:");
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;  
    if (d == false){
      d = true;
      tft.setTextSize(2);
  tft.setCursor(10, 230);
  tft.print(p0);
tft.setCursor(90, 230);
  tft.print("Hektopascal");

  tft.setTextSize(1);
  tft.setTextColor(CYAN);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
  Serial.println(" ");
  //Serial.println("================================================================================​================================================================================​================================================================================​====");
  // Serial.println("================================================================================​================================================================================​================================================================================​=====================");
  Serial.println(F("Luftdruck:"));
  Serial.print(p0);Serial.print(F(" Hektopascal"));
  d=true;
  getDCFTime();
  action();
GUI();
    
    }else{
tft.fillRect(10, 200,300, 400, BLACK);
  
tft.fillRect(10,310,10,10,BLACK);
d=false;
    }
  }

  action();
  }
  break;
  case 4:
  {
     Serial.println(F("Uebermalt: "));
  u++;
   Serial.println(u);
  long previousMillis = 0;        

  long interval = 999;    
  unsigned long currentMillis = millis();
  boolean e = false;
  
   tft.fillRect(10,310,10,10,BLACK);
   tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(2);
  tft.setTextColor(MAGENTA);
  tft.print("Luftfeuchtigkeit: ");
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;  
    if (e == false){
      e = true;
      action();
  tft.setTextSize(3);
  tft.setCursor(10, 235);

  tft.print(humidity);
  tft.setCursor(100, 235);
  tft.print("%");
  
  tft.setTextSize(1);
  tft.setTextColor(MAGENTA);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
  Serial.println(F(" "));
// Serial.println("================================================================================​================================================================================​================================================================================​====");
  // Serial.println("================================================================================​================================================================================​================================================================================​========================================");
  Serial.print(F("Luftfeuchtigkeit: "));Serial.print(humidity);Serial.print(F(" % "));
  e=true;
  getDCFTime();
  action();
GUI();
    
    }else{
tft.fillRect(10, 200,300, 400, BLACK);
  
tft.fillRect(10,310,10,10,BLACK);
e= false;
    }
  }
action();
  }
  break;
  case 5:
  {
     Serial.println(F("Uebermalt: "));
  u++;
   Serial.println(u);
    Serial.println(F("Gas: "));
    Gas();
  long previousMillis = 0;        
unsigned long currentMillis = millis();
  long interval = 999;    
  boolean f = false;
   tft.fillRect(10,310,10,10,BLACK);
   tft.fillRect(10,180,400,400,BLACK);
  tft.setCursor(10,180);
  tft.setTextSize(2);
  tft.setTextColor(RED);
  tft.print("Gas:");
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;  
    if (f == false){
      action();
    //  Serial.println("an");
  tft.setCursor(10, 200);
  tft.print("Lpg:");
  tft.setCursor(80, 200);
  tft.print(lpg);
  tft.setCursor(140,200);
  tft.print("ppm");
  tft.setCursor(10,220);
  tft.print("Co:");
  tft.setCursor(80, 220);
  tft.print(co);
  tft.setCursor(140,220);
  tft.print("ppm");
  tft.setCursor(10,240);
  tft.print("Rauch:");
  tft.setCursor(80,240);
  tft.print(smoke);
  tft.setCursor(140,240);
  tft.print("ppm");
  tft.setTextSize(1);
  tft.setTextColor(RED);
  tft.setCursor(10,300);
  tft.println("Menueindex:");
   tft.setCursor(10,310);
  tft.println(menue);
// Serial.println("LPG: ");Serial.print(lpg);Serial.print(" ppm");
// Serial.println("Co: ");Serial.print(co);Serial.print(" ppm");
// Serial.println("Rauch: ");Serial.print(smoke);Serial.print(" ppm");
f=true;
getDCFTime();
action();
GUI();
    }
    else{
tft.fillRect(10, 200,300, 400, BLACK);
  
tft.fillRect(10,310,10,10,BLACK);
Serial.println("aus");
f=false;
    }
  }
action();
  }
  break;
  case 6:
  //tft.fillRect(10,180,300,100, BLACK);
  menue = 0;
action();
  break;
}
  
  
}
  
void action(){
//  Serial.println("Action!");
   TSPoint p = ts.getPoint();
  digitalWrite(13, LOW);
  //pinMode(XP, OUTPUT);
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  //pinMode(YM, OUTPUT);
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
    p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
    Serial.println(F(" "));
   // Serial.println("================================================================================​================================================================================​================================================================================​====");
    // Serial.println("================================================================================​================================================================================​================================================================================​========================================");
    Serial.print(F("X:"));
    Serial.print(p.x);
    Serial.println(F("/"));
    Serial.print(F("Y:"));
    Serial.println(p.y);
   if(p.x>=0&&p.y<=313&&p.x<119&&p.y>=207){
    Serial.println(F("touched+"));
    menue = menue+1;
    Serial.println(menue);
     digitalWrite(DOWN, LOW);
    digitalWrite(UP,HIGH);
    delay(100);
    digitalWrite(UP, LOW);
    if(menue > 6){
   debug();
  }
    GUI();
    debug();
    return menue;
    digitalWrite(UP, LOW);
   }
   if(p.x>=121&&p.x<=250&&p.y<=325&&p.y>=215){
    menue = menue -1;
  
    Serial.println(F("touched-"));
    Serial.println(menue);
    digitalWrite(UP, LOW);
    digitalWrite(DOWN, HIGH);
    delay(100);
     digitalWrite(DOWN, LOW);
     if(menue < 0){
    debug();
  }
    // Serial.println("down low");
    GUI();
    debug();
    return menue;
    digitalWrite(DOWN, LOW);
   }
    Serial.println(menue);
    GUI();
}
// GUI();


}
char* sprintTime() {
  snprintf(time_s,sizeof(time_s),"%.2d:%.2d:%.2d" , hour(), minute(), second());
  time_s[strlen(time_s)] = '\0';
  return time_s;
}
char* sprintDate() {
  snprintf(date_s,sizeof(date_s),"%.2d.%.2d.%.4d" , day(), month(), year());
  date_s[strlen(date_s)] = '\0';
  return date_s;
} //Dekodierung von Daten durch DCF77 Empfänger
void Gas(){
// Serial.println("Gas:");
  //Serial.println("================================================================================​================================================================================​================================================================================​========================================");
// Serial.println("================================================================================​================================================================================​================================================================================​====");
float* values= mq2.read(true);
  lpg = mq2.readLPG();
  co = mq2.readCO();
  smoke = mq2.readSmoke();
  return smoke;
  return co;
  return lpg;
}
void LT(){
  
  int err = SimpleDHTErrSuccess;
  if ((err = dht22.read2(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.println(F("Read DHT22 failed, err=")); Serial.println(err);delay(2000);
    return;
  }
  return humidity;
  return temperature;
//Serial.print("Sample OK: ");
  Serial.print((float)temperature); Serial.print(" *C, ");
  Serial.print((float)humidity); Serial.println(" RH%");

  
  for(int i = 0; i<2500;i++){
    delay(1);
    action();
  }
  GUI();
  
}
void LuftDruck(){
  status = pressure.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:
    delay(status);

    // Retrieve the completed temperature measurement:
    // Note that the measurement is stored in the variable T.
    // Function returns 1 if successful, 0 if failure.

    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // Print out the measurement:
     // Serial.print("Temperatur: ");
    //  Serial.print(T,2);
    //  Serial.print(" Grad C, ");
   //   Serial.print((9.0/5.0)*T+32.0,2);
   //   Serial.println(" Grad F");
      
      // Start a pressure measurement:
      // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
      // If request is successful, the number of ms to wait is returned.
      // If request is unsuccessful, 0 is returned.

   status = pressure.startPressure(3);
      if (status != 0)
      {
        // Wait for the measurement to complete:
        delay(status);
   status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // Print out the measurement:
        //   Serial.println("================================================================================​================================================================================​================================================================================​====");
          Serial.print(F("Druck: "));
          Serial.print(P,2);
          Serial.print(F(" mb, "));
          Serial.print(P*0.0295333727,2);
          Serial.println(F(" inHg"));
          p0 = pressure.sealevel(P,13); // we're at 1655 meters (Boulder, CO)
          Serial.print(F("Druck auf Meeresniveau: "));
          Serial.print(p0,2);
          Serial.print(F(" mb, "));
          Serial.print(p0*0.0295333727,2);
          Serial.println(F(" inHg"));
        }
}
}
  }
}
int freeRam () { //Auslesen des Arbeitsspeichers
   extern int __heap_start, *__brkval;
   int v;
   return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
   Serial.println("Arbeitsspeicher: ");
   Serial.println(freeRam());
}

Ich komm da echt nicht weiter und freue mich über jede Hilfe...

Huh
Von den vielen Dingen die ich verloren habe vermisse ich am meisten meinen Verstand. -Ozzy Osbourne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 18:12
Beitrag #2
RE: Ram Speicher bei Arduino Mega wird knapp
Noch konsequenter String-Konstanten ins F-Macro packen - da ist noch einiges über.
In den Libs nachschauen, ob da irgendwo intern mit String gearbeitet wird. Wenn ja, Lib umbauen.

Alle Variablentypen checken, ob da wirklich int notwendig ist. Bei Pins z.B. nicht.
Prüfen, ob Du float umgehen kannst.

Wenn das alles nicht genügt: Größeren MC nehmen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 19:15
Beitrag #3
RE: Ram Speicher bei Arduino Mega wird knapp
In den Libraries gibt es keine Serielle Kommunikation, jedoch kann man durch : tft.println(F("Irgendwas)); ebenfalls Speicher sparen, allerdings wird in meinem Projekt der Speicher immer noch schnell voll...
Ist es möglich Hexadezimalzahlen (z.B. für Farben) im Eeprom zu speichern und dann erst später abzurufen, sodass der RAM nicht so stark beansprucht wird?
Und an diejenigen, die sich mit der tft-Library auskennen: Ist es möglich Formen und co so zu zeichnen, wie tft.fillRect(F(0,0,10,10,irgendwas));?

Huh
Von den vielen Dingen die ich verloren habe vermisse ich am meisten meinen Verstand. -Ozzy Osbourne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 19:42
Beitrag #4
RE: Ram Speicher bei Arduino Mega wird knapp
Auch wenn es dein Problem nicht löst, solltest du bei den Libraries Sorgfalt walten lassen. Du bindest einige Libraries doppelt.

Was den Speicherverbrauch betrifft, denke mal über ein anderes Display nach. Evtl. ein Nextion, das wird seriell angesteuer und verbraucht für seinen Bildaufbau keine Ressourcen im Arduino.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 19:50
Beitrag #5
RE: Ram Speicher bei Arduino Mega wird knapp
Gibt es keine Möglichkeit nicht benötigte Variablen aus der RAM zu entfernen?

Huh
Von den vielen Dingen die ich verloren habe vermisse ich am meisten meinen Verstand. -Ozzy Osbourne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 19:55 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2019 19:57 von Tommy56.)
Beitrag #6
RE: Ram Speicher bei Arduino Mega wird knapp
(31.01.2019 19:50)unkreativ schrieb:  Gibt es keine Möglichkeit nicht benötigte Variablen aus der RAM zu entfernen?
Variablen kannst Du nicht aus dem RAM entfernen.
Konstanten kannst Du ins PROGMEM legen.

Was ist mit den 3 DHT-Libs?

Gruß Tommy

Edit: Nichtbenötigte Variablen sollten sowieso aus dem Sketch verschwinden.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 20:04 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2019 20:04 von unkreativ.)
Beitrag #7
RE: Ram Speicher bei Arduino Mega wird knapp
(31.01.2019 19:55)Tommy56 schrieb:  
(31.01.2019 19:50)unkreativ schrieb:  Gibt es keine Möglichkeit nicht benötigte Variablen aus der RAM zu entfernen?
Variablen kannst Du nicht aus dem RAM entfernen.
Konstanten kannst Du ins PROGMEM legen.

Was ist mit den 3 DHT-Libs?

Gruß Tommy

Edit: Nichtbenötigte Variablen sollten sowieso aus dem Sketch verschwinden.
2 werden nicht verwendet, ich habe wohl vergessen, sie wieder zu entfernen
es ,,funktioniert" auch ohne die beiden

Huh
Von den vielen Dingen die ich verloren habe vermisse ich am meisten meinen Verstand. -Ozzy Osbourne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2019, 23:21
Beitrag #8
RE: Ram Speicher bei Arduino Mega wird knapp
Auch die Time.h, die TimeLib.h und die DCF77.h ist doppelt aufgeführt.

Code:
#include <DCF77.h>
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Time.h>
#include <TimeLib.h>
#include <DCF77.h>

War die Idee mit dem Nextion so abwegig oder warum kommt da keine Reaktion ?
Oder ist das Thema für dich zu schwer ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  If...els if wird nich korrekt ausgeführt suterb 18 1.073 28.05.2019 13:51
Letzter Beitrag: Tommy56
  Speed versus Speicher bei Variablendef shrimps 2 498 29.04.2019 11:38
Letzter Beitrag: shrimps
  Bedingung wird nicht wiederholt ausgeführt Lite 16 1.302 29.03.2019 05:11
Letzter Beitrag: Lite
  HC-06 Arduino Mega Übertragungsprobleme fv1895 4 519 15.03.2019 11:35
Letzter Beitrag: fv1895
  Attiny85 zu wenig Speicher Harry 36 2.338 20.01.2019 16:15
Letzter Beitrag: Harry
  Elegoo Mega 2560 R3 lässt sich nicht programieren Union1925 6 1.178 03.12.2018 21:21
Letzter Beitrag: Tommy56
  Loop wird doppelt ausgeführt nanoheld 6 889 26.11.2018 21:06
Letzter Beitrag: hotsystems
  Befehl wird nicht ausgeführt renesworld 15 1.422 19.10.2018 12:37
Letzter Beitrag: hotsystems
  Mega 2560 + USB Host Shield + USB-Stick Cospieler 4 1.243 19.09.2018 11:17
Letzter Beitrag: Tommy56
  Serielle Daten Windigipet 2018 Software, Arduino Mega 2560 verarbeiten/melden Christian_Moba-Arduino 11 2.374 15.09.2018 09:43
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste