Hallo zusammen,
bitte um Nachsicht, das ist mein erster Kontakt mit diesem Forum.
meine Komponenten:
Elegoo Uno R3
Neo-6M (GPS-Sensor) (2-Wire-Bus)
DS 18b20 (Temperatursensor) (OneWireBus)
Display (128x64, I2C)
Ich möchte die GPS Geschwindigkeit und die aktuelle Temperatur auf dem Display anzeigen lassen.
Hierbei schalte ich über einen taster zwischen drei Anzeigen durch.
Das Problem tritt auf sobald ich versuche die Temperatursensoren einzubinden. Der Code mit GPS geht alleine ganz gut. Sobald ich den Temperaturteil hinzufüge scheitert die Verbindung zum Display und es wird kein neues Bild angezeigt. die Fehlermeldung aus zeile 53 ("SSD1306 allocation failed") Wird ebenfals auf dem Serielenmonitor angezeigt.
Außerdem tritt bei dem Code Ohne Temperaturteil ein Ungewöhnlich langes Delay bei Umschalten der Anzeigen auf.
Daher Meine Frage an euch,
Könnt ihr bei diesen zwei Problemen bitte helfen?
Danke
Sebastian
// 060_Project
//GPS, Menü bis 3 Funktioniert und 2 Temperatursensoren (18b20 )
#include <SoftwareSerial.h>
#include <Wire.h>
//Display
#include <Adafruit_SSD1306.h>
//GPS
#include <TinyGPS++.h>
//Temp-Sensor
#include <DallasTemperature.h>
#include <OneWire.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
//On an arduino UNO: A4(SDA), A5(SCL)
#define OLED_RESET -1 //Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C //See datasheet for Address
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define rxPin 2
#define txPin 3
SoftwareSerial neogps(rxPin, txPin);
TinyGPSPlus gps;
//Button def. Menue
#define button_D 11
#define button_E 12
#define DEFAULT_DELAY 300
int Puls = 0; // Zähler
bool button0read = false;
bool button0on = false;
unsigned long button0millis = 0;
// Temp-Sensor
const int oneWireBus = 4; //GPIO Pin 1-Wire Bus
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
//Sensor 1: 28 CC 32 07 D6 01 3C 6C
//Sensor 2: 28 F7 2C 07 D6 01 3C A7
float tempSensor1, tempSensor2;
uint8_t sensor1[8] = { 0x28, 0xFF, 0x64, 0x0E, 0x6D, 0xB1, 0x25, 0x3C };
uint8_t sensor2[8] = { 0x28, 0xFF, 0x64, 0x0E, 0x7B, 0x3C, 0xFA, 0x17 };
void setup() {
Serial.begin(115200);
//Begin serial communication Neo6mGPS
neogps.begin(9600);
sensors.begin();
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.clearDisplay();
display.display();
delay(2000);
//button Menu
pinMode(button_D, INPUT_PULLUP);
pinMode(button_E, INPUT_PULLUP);
}
void loop() {
//Menu
boolean button0read = digitalRead(button_E);
if (button0read == true) {
button0millis = millis();
}
if (button0read == false && button0on == false && millis() - button0millis > 1) {
button0on = true;
}
if (button0read == true && button0on == true) {
button0on = false;
Puls = Puls + 1;
if (Puls > 3) {
Puls = 1;
}
Serial.print(Puls);
}
// GPS
boolean newData = false;
for (unsigned long start = millis(); millis() - start < 1000;) {
while (neogps.available()) {
if (gps.encode(neogps.read())) {
newData = true;
}
}
}
updateSub();
//Temp-Sensoren
sensors.requestTemperatures();
tempSensor1 = sensors.getTempC(sensor1); // Gets the Sensor 1 values
tempSensor2 = sensors.getTempC(sensor2); // Gets the Sensor 2 values
Serial.print(tempSensor1);
Serial.println(" ºC - Sensor 1");
Serial.print(tempSensor2);
Serial.println(" ºC - Sensor 2");
}
void updateSub() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
switch (Puls) {
case 0:
Puls = 1;
break;
case 1:
//String gps_speed = String(gps.speed.kmph());
display.setCursor(0, 0);
display.setTextSize(3);
display.print(gps.speed.kmph());
display.setCursor(75, 20);
display.setTextSize(2);
display.print("km/h");
display.setTextSize(1);
display.setCursor(0, 50);
display.print("SAT:");
display.setCursor(25, 50);
display.print(gps.satellites.value());
display.setTextSize(1);
display.setCursor(70, 50);
display.print("ALT:");
display.setCursor(95, 50);
display.print(gps.altitude.meters(), 0);
display.display();
break;
case 2:
//String gps_speed = String(gps.speed.kmph());
display.setCursor(0, 0);
display.setTextSize(3);
//display.print(gps.speed.kmph());
//display.print(Puls+5);
display.print("Zwoa");
display.setCursor(75, 20);
display.setTextSize(2);
display.print("km/h");
display.setTextSize(1);
display.setCursor(0, 50);
display.print("SAT:");
display.setCursor(25, 50);
display.print(gps.satellites.value());
display.setTextSize(1);
display.setCursor(70, 50);
display.print("ALT:");
display.setCursor(95, 50);
display.print(gps.altitude.meters(), 0);
display.display();
break;
case 3:
//String gps_speed = String(gps.speed.kmph());
display.setCursor(0, 0);
display.setTextSize(3);
//display.print(gps.speed.kmph());
display.print("Droa");
display.setCursor(75, 20);
display.setTextSize(2);
display.print("km/h");
display.setTextSize(1);
display.setCursor(0, 50);
display.print("SAT:");
display.setCursor(25, 50);
display.print(gps.satellites.value());
display.setTextSize(1);
display.setCursor(70, 50);
display.print("ALT:");
display.setCursor(95, 50);
display.print(gps.altitude.meters(), 0);
display.display();
break;
}
}