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
  Mega 2560 R3 und Pro USB CH340G Wusl 1 233 26.05.2020 14:52
Letzter Beitrag: Tommy56
  Lauftext mit WS2812, der über Seriellen Monitor eingegeben wird Bastian 3 382 12.05.2020 16:47
Letzter Beitrag: Tommy56
  Mega & SIM800L - Rufnummer Empfänger von String zu Char kiximek 6 471 12.05.2020 07:02
Letzter Beitrag: kiximek
  10 Servos an MEGA 2560 pins 4 - 13 Eddy 15 863 10.04.2020 15:08
Letzter Beitrag: Tommy56
  int variable wird nicht in Schleife übertragen ha0248 8 861 11.02.2020 15:25
Letzter Beitrag: ha0248
  Problem am Mega mit pin 10 Franz54 8 893 19.01.2020 12:12
Letzter Beitrag: Franz54
  Arduino Mega mit Lan Shield und Googlemail Franzel007 8 1.041 20.12.2019 17:20
Letzter Beitrag: Franzel007
  Wie die HW-Seriellen des Mega richtig einsetzen? DO3GE 2 591 02.12.2019 14:53
Letzter Beitrag: DO3GE
  Auth Failed wenn ArduinoOTA.setPasswordHash benutzt wird Hoffmakl 9 1.116 26.11.2019 19:02
Letzter Beitrag: Hoffmakl
  AT90CAN Interrupt wird nicht ausgelöst slsb02 5 757 19.11.2019 15:04
Letzter Beitrag: slsb02

Gehe zu:


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