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
Arduino Uno R3 ausgelastet?!
23.05.2015, 18:01
Beitrag #1
Arduino Uno R3 ausgelastet?!
Hallo,

ich bin neu hier und hab auch gleich ein Anliegen.
Ich hab, wie oben schon steht, ein Arduino Uno. Jetzt hatte ich vor das Adafruit GPS und OLED damit zu betreiben. Einzeln funktioniert beides recht gut. Wobei das GPS sich ca. im Sekundentakt aktualisiert im Serial Monitor.
Dann hab ich beide Sketches zu einem zusammen gefasst um ein paar Werte vom GPS im OLED anzeigen zu lassen. Jetzt aktualisiert sich GPS und OLED aber nur noch extrem langsam, ca alle 10 Sekunden. Manchmal auch mehr. Und auch die GPS Daten sind nur noch sporadisch richtig.

Kann es denn wirklich sein, dass das Board so ausgelastet ist, das es nun so haengt?

Beim compilieren erhalte ich auch folgende Meldung:

Code:
Der Sketch verwendet 14.668 Bytes (45%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 1.790 Bytes (87%) des dynamischen Speichers, 258 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
Wenig Speicher verfügbar, es können Stabilitätsprobleme auftreten.

Und noch eine Frage. Sind die Arduino Uno von .cc und .org wirklich 100% identisch?
Ich hatte vorher eines von .cc und nun von .org. Fuer das .org brauchte ich die Software von .org weil die andere das Board nicht akzeptiert hat.

Lg Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2015, 19:39
Beitrag #2
RE: Arduino Uno R3 ausgelastet?!
(23.05.2015 18:01)Crs schrieb:  Hallo,

ich bin neu hier und hab auch gleich ein Anliegen.
Ich hab, wie oben schon steht, ein Arduino Uno. Jetzt hatte ich vor das Adafruit GPS und OLED damit zu betreiben. Einzeln funktioniert beides recht gut. Wobei das GPS sich ca. im Sekundentakt aktualisiert im Serial Monitor.
Dann hab ich beide Sketches zu einem zusammen gefasst um ein paar Werte vom GPS im OLED anzeigen zu lassen. Jetzt aktualisiert sich GPS und OLED aber nur noch extrem langsam, ca alle 10 Sekunden. Manchmal auch mehr. Und auch die GPS Daten sind nur noch sporadisch richtig.

Kann es denn wirklich sein, dass das Board so ausgelastet ist, das es nun so haengt?

Beim compilieren erhalte ich auch folgende Meldung:

Code:
Der Sketch verwendet 14.668 Bytes (45%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 1.790 Bytes (87%) des dynamischen Speichers, 258 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
Wenig Speicher verfügbar, es können Stabilitätsprobleme auftreten.

Und noch eine Frage. Sind die Arduino Uno von .cc und .org wirklich 100% identisch?
Ich hatte vorher eines von .cc und nun von .org. Fuer das .org brauchte ich die Software von .org weil die andere das Board nicht akzeptiert hat.

Lg Chris

Ich kenne im Forum einige liebe Mitmenschen, wirklich richtig nette
Menschen Heart Ich bin mir sicher, dass sie dein Problem in den Griff kriegen würden Huh . Wahrscheinlich sind die Kristallkugeln in A... gegangen und nu isses mit der Hellseherei erst mal Essig. Also sei auch du ein netter
Mensch Heart und stelle deinen Sketch rein. Du wirst sehen .. du kannst am Quell des Wissens deiner Mitmenschen naschen Big Grin
Gruß Gerd Tongue

Smile Schön dabei zu sein Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2015, 20:17 (Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2015 20:21 von Crs.)
Beitrag #3
RE: Arduino Uno R3 ausgelastet?!
Ja sorry, hier der Code:

Code:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>

#define OLED_MOSI   9 //OLED_DATA
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

SoftwareSerial mySerial =  SoftwareSerial(3, 2);
#define powerpin 2

#define GPSRATE 9600
#define BUFFSIZ 110 // plenty big
char buffer[BUFFSIZ];
char *parseptr;
char buffidx;
uint8_t hour, minute, second, year, month, date;
uint32_t latitude, longitude;
uint8_t groundspeed, trackangle, satelliten;
char latdir, longdir;
char status;

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 128
#define LOGO16_GLCD_WIDTH  64

void setup()   {                
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC);

  display.display();
  delay(20);
  display.clearDisplay();
  
  mySerial.begin(GPSRATE);
  digitalWrite(powerpin, LOW);         // pull low to turn on!

}

void loop() {
  
    displaytext();
  delay(500);
  display.clearDisplay();

    uint32_t tmp;
  
  //Serial.print("\n read: ");
  readline();
  
  // check if $GPRMC (global positioning fixed data)
  if (strncmp(buffer, "$GPGGA",6) == 0) {
    parseptr = buffer+1;

    parseptr = strchr(parseptr, ',')+39;
    satelliten = parsedecimal(parseptr);    
    }
    

  if (strncmp(buffer, "$GPRMC",6) == 0) {
    
    // hhmmss time data
    parseptr = buffer+7;
    tmp = parsedecimal(parseptr);
    hour = tmp / 10000;
    minute = (tmp / 100) % 100;
    second = tmp % 100;
    
    parseptr = strchr(parseptr, ',') + 1;
    status = parseptr[0];
    parseptr += 2;
    
    // grab latitude & long data
    // latitude
    latitude = parsedecimal(parseptr);
    if (latitude != 0) {
      latitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      latitude += parsedecimal(parseptr);
    }
    parseptr = strchr(parseptr, ',') + 1;
    // read latitude N/S data
    if (parseptr[0] != ',') {
      latdir = parseptr[0];
    }
    
    //Serial.println(latdir);
    
    // longitude
    parseptr = strchr(parseptr, ',')+1;
    longitude = parsedecimal(parseptr);
    if (longitude != 0) {
      longitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      longitude += parsedecimal(parseptr);
    }
    parseptr = strchr(parseptr, ',')+1;
    // read longitude E/W data
    if (parseptr[0] != ',') {
      longdir = parseptr[0];
    }
    

    // groundspeed
    parseptr = strchr(parseptr, ',')+1;
    groundspeed = parsedecimal(parseptr);

    // track angle
    parseptr = strchr(parseptr, ',')+1;
    trackangle = parsedecimal(parseptr);
    

    // date
    parseptr = strchr(parseptr, ',')+1;
    tmp = parsedecimal(parseptr);
    date = tmp / 10000;
    month = (tmp / 100) % 100;
    year = tmp % 100;

    hour = hour + 2;
    if (hour == 24) hour = 0;
    if (hour == 25) hour = 1;
    Serial.print("\nZeit: ");
    if (hour < 10) { Serial.print("0"); Serial.print(hour, DEC); Serial.print(':'); }
    else Serial.print(hour, DEC); Serial.print(':');
    if (minute < 10) { Serial.print("0"); Serial.print(minute, DEC); Serial.print(':'); }
    else Serial.print(minute, DEC); Serial.print(':');
    if (second < 10) { Serial.print("0"); Serial.println(second, DEC); }
    else Serial.println(second, DEC);
    Serial.print("Datum: ");
    Serial.print(date, DEC); Serial.print('.');
    if (month < 10) { Serial.print("0"); Serial.print(month, DEC); }
    else Serial.print(month, DEC); Serial.print(':');
    Serial.println(year, DEC);
    Serial.print("Km/h: ");
    Serial.println(groundspeed, DEC);
    Serial.print("Verbindungen: ");
    Serial.println(satelliten);
    }
}

void displaytext(void) {
/*
  display.setTextSize(2);
  display.setTextColor(WHITE);
    static unsigned long thisMicros = 0;
  static unsigned long lastMicros = 0;
  display.clearDisplay();
  display.setCursor(0,0);
  display.print(thisMicros - lastMicros);
    display.display();
    lastMicros = thisMicros;
    thisMicros = micros();
*/
  display.setTextSize(4);
  display.setTextColor(WHITE);
  display.setCursor(5,18);
  display.clearDisplay();
  display.print(groundspeed);
      
  display.stopscroll();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(80,32);
  display.print("Km/h");
  

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  //display.print("19.05.2015 22:55 Uhr");
  display.print(date, DEC); display.print('.');
    if (month < 10) { display.print("0"); display.print(month, DEC); }
    else display.print(month, DEC); display.print('.');
    display.print(year, DEC);
    display.print(" ");
    
  if (hour < 10) { display.print("0"); display.print(hour, DEC); display.print(':'); }
    else { display.print(hour, DEC); display.print(':'); }
    if (minute < 10) { display.print("0"); display.print(minute, DEC); display.print(':'); }
    else { display.print(minute, DEC); display.print(':'); }
    if (second < 10) { display.print("0"); display.print(second, DEC); display.print("Uhr"); }
    else { display.print(second, DEC); display.print("Uhr"); }

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,55);
  display.print("Crs");

  display.display();
}
uint32_t parsedecimal(char *str) {
  uint32_t d = 0;
  
  while (str[0] != 0) {
   if ((str[0] > '9') || (str[0] < '0'))
     return d;
   d *= 10;
   d += str[0] - '0';
   str++;
  }
  return d;
}

void readline(void) {
  char c;
  
  buffidx = 0; // start at begninning
  while (1) {
      c=mySerial.read();
      if (c == -1)
        continue;
      //Serial.print(c);
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        return;
      }
      buffer[buffidx++]= c;
  }
}

So, dann hoff ich mal, dass einer erkennt wo meine Fehler liegen Smile

Lg Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2015, 21:32
Beitrag #4
RE: Arduino Uno R3 ausgelastet?!
(23.05.2015 20:17)Crs schrieb:  Ja sorry, hier der Code:

Code:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>

#define OLED_MOSI   9 //OLED_DATA
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

SoftwareSerial mySerial =  SoftwareSerial(3, 2);
#define powerpin 2

#define GPSRATE 9600
#define BUFFSIZ 110 // plenty big
char buffer[BUFFSIZ];
char *parseptr;
char buffidx;
uint8_t hour, minute, second, year, month, date;
uint32_t latitude, longitude;
uint8_t groundspeed, trackangle, satelliten;
char latdir, longdir;
char status;

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 128
#define LOGO16_GLCD_WIDTH  64

void setup()   {                
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC);

  display.display();
  delay(20);
  display.clearDisplay();
  
  mySerial.begin(GPSRATE);
  digitalWrite(powerpin, LOW);         // pull low to turn on!

}

void loop() {
  
    displaytext();
  delay(500);
  display.clearDisplay();

    uint32_t tmp;
  
  //Serial.print("\n read: ");
  readline();
  
  // check if $GPRMC (global positioning fixed data)
  if (strncmp(buffer, "$GPGGA",6) == 0) {
    parseptr = buffer+1;

    parseptr = strchr(parseptr, ',')+39;
    satelliten = parsedecimal(parseptr);    
    }
    

  if (strncmp(buffer, "$GPRMC",6) == 0) {
    
    // hhmmss time data
    parseptr = buffer+7;
    tmp = parsedecimal(parseptr);
    hour = tmp / 10000;
    minute = (tmp / 100) % 100;
    second = tmp % 100;
    
    parseptr = strchr(parseptr, ',') + 1;
    status = parseptr[0];
    parseptr += 2;
    
    // grab latitude & long data
    // latitude
    latitude = parsedecimal(parseptr);
    if (latitude != 0) {
      latitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      latitude += parsedecimal(parseptr);
    }
    parseptr = strchr(parseptr, ',') + 1;
    // read latitude N/S data
    if (parseptr[0] != ',') {
      latdir = parseptr[0];
    }
    
    //Serial.println(latdir);
    
    // longitude
    parseptr = strchr(parseptr, ',')+1;
    longitude = parsedecimal(parseptr);
    if (longitude != 0) {
      longitude *= 10000;
      parseptr = strchr(parseptr, '.')+1;
      longitude += parsedecimal(parseptr);
    }
    parseptr = strchr(parseptr, ',')+1;
    // read longitude E/W data
    if (parseptr[0] != ',') {
      longdir = parseptr[0];
    }
    

    // groundspeed
    parseptr = strchr(parseptr, ',')+1;
    groundspeed = parsedecimal(parseptr);

    // track angle
    parseptr = strchr(parseptr, ',')+1;
    trackangle = parsedecimal(parseptr);
    

    // date
    parseptr = strchr(parseptr, ',')+1;
    tmp = parsedecimal(parseptr);
    date = tmp / 10000;
    month = (tmp / 100) % 100;
    year = tmp % 100;

    hour = hour + 2;
    if (hour == 24) hour = 0;
    if (hour == 25) hour = 1;
    Serial.print("\nZeit: ");
    if (hour < 10) { Serial.print("0"); Serial.print(hour, DEC); Serial.print(':'); }
    else Serial.print(hour, DEC); Serial.print(':');
    if (minute < 10) { Serial.print("0"); Serial.print(minute, DEC); Serial.print(':'); }
    else Serial.print(minute, DEC); Serial.print(':');
    if (second < 10) { Serial.print("0"); Serial.println(second, DEC); }
    else Serial.println(second, DEC);
    Serial.print("Datum: ");
    Serial.print(date, DEC); Serial.print('.');
    if (month < 10) { Serial.print("0"); Serial.print(month, DEC); }
    else Serial.print(month, DEC); Serial.print(':');
    Serial.println(year, DEC);
    Serial.print("Km/h: ");
    Serial.println(groundspeed, DEC);
    Serial.print("Verbindungen: ");
    Serial.println(satelliten);
    }
}

void displaytext(void) {
/*
  display.setTextSize(2);
  display.setTextColor(WHITE);
    static unsigned long thisMicros = 0;
  static unsigned long lastMicros = 0;
  display.clearDisplay();
  display.setCursor(0,0);
  display.print(thisMicros - lastMicros);
    display.display();
    lastMicros = thisMicros;
    thisMicros = micros();
*/
  display.setTextSize(4);
  display.setTextColor(WHITE);
  display.setCursor(5,18);
  display.clearDisplay();
  display.print(groundspeed);
      
  display.stopscroll();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(80,32);
  display.print("Km/h");
  

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  //display.print("19.05.2015 22:55 Uhr");
  display.print(date, DEC); display.print('.');
    if (month < 10) { display.print("0"); display.print(month, DEC); }
    else display.print(month, DEC); display.print('.');
    display.print(year, DEC);
    display.print(" ");
    
  if (hour < 10) { display.print("0"); display.print(hour, DEC); display.print(':'); }
    else { display.print(hour, DEC); display.print(':'); }
    if (minute < 10) { display.print("0"); display.print(minute, DEC); display.print(':'); }
    else { display.print(minute, DEC); display.print(':'); }
    if (second < 10) { display.print("0"); display.print(second, DEC); display.print("Uhr"); }
    else { display.print(second, DEC); display.print("Uhr"); }

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,55);
  display.print("Crs");

  display.display();
}
uint32_t parsedecimal(char *str) {
  uint32_t d = 0;
  
  while (str[0] != 0) {
   if ((str[0] > '9') || (str[0] < '0'))
     return d;
   d *= 10;
   d += str[0] - '0';
   str++;
  }
  return d;
}

void readline(void) {
  char c;
  
  buffidx = 0; // start at begninning
  while (1) {
      c=mySerial.read();
      if (c == -1)
        continue;
      //Serial.print(c);
      if (c == '\n')
        continue;
      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {
        buffer[buffidx] = 0;
        return;
      }
      buffer[buffidx++]= c;
  }
}

So, dann hoff ich mal, dass einer erkennt wo meine Fehler liegen Smile

Lg Chris

Ich geb mal mein Senf dazu .....Smile
Du schreibst du hast aus 2 Sketche einen gemacht und genau da liegt der Fehler.

"Dann hab ich beide Sketches zu einem zusammen gefasst um ein paar Werte vom GPS im OLED anzeigen zu lassen. Jetzt aktualisiert sich GPS und OLED aber nur noch extrem langsam, ca alle 10 Sekunden. Manchmal auch mehr. Und auch die GPS Daten sind nur noch sporadisch richtig."

Ich habe mal durchkompiliert und glaube, dass der Fehler in der Ecke OLED - Display zu suchen ist. Ich kenne deine beiden Sketche nicht, nur das Zusammengewürfelte. Sad
Versuch mal, genau den Ablauf im Sketch festzulegen. Eine Zeile, muss nicht falsch sein, am falschen Ort und es geht schief - typischer Fehler beim Zusammenbasteln - ich kann ein Lied davon singen Big Grin
Ich habe hier im Forum ganz liebe Freunde die mir super geholfen haben, habe auch viel gelernt (Hallo meine Freunde, ein schönes Wochenende) hoffe, dass es wer liest und dir weiterhilft. Wie gesagt - Zeile für Zeile -
LG Gerd

Smile Schön dabei zu sein Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  LCD Anzeige für Arduino Mega2560 an Arduino Due? DaniDD 1 818 03.06.2015 12:16
Letzter Beitrag: DaniDD
  Arduino Pin mit anderem Arduino auslesen - geht das? Gelegenheitsbastler 8 3.243 08.05.2015 20:49
Letzter Beitrag: Bitklopfer
Question Arduino Mega ADK oder Arduino Due? Baja-Junky 1 4.176 14.08.2013 21:16
Letzter Beitrag: Bitklopfer

Gehe zu:


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