Hallo zusammen!
Bitte steinigt mich nicht, aber in Bezug auf Arduino bin ich ein absoluter Anfänger.
Sitze nun schon mehrere Tage vor einem Sketch und habe trotz Internet und diesem Forum hier keine Lösung für mein Problem gefunden.
Fangen wir mal an:
Habe einen Nano V3 in Verbindung mit einem ADS1115 und einem OLED 0.96 4 Pin Display um 2 Sensoren für eine Gasanalyse auszulesen.
Der vorgegebene Sketch läuft sein Programm "Void Setup" so ab wie gewünscht. Geht es jetzt aber an die "Void Loop" Schleife, bleibt das Display dunkel.
Die letzte Meldung ist dann "System OK" bevor der Nano dann ein Nickerchen macht.
Warum??
Bin auf der Fehlersuche nach eventuell kalten Lötstellen mit meinem Finger auf die analogen Eingänge des ADS1115 gekommen......plötzlich läuft die "Void Loop" Schleife und zeigt mir abwechselnd die Sensoren an, so wie es sein soll. Das ganze Spiel läuft ca. 2 Minuten, bis das Display wieder schwarz ist.
Unter Arduino IDE habe ich schon einige Tests wie I2C und Display durch.
Ein Problem an der Hardware schliesse ich aus, da ich nun die Platine mit neuen Bauteilen von einem anderen Hersteller auf einem Breadboard nachgebaut habe, und das Problem weiterhin besteht.
Weder beim Kompilieren, noch beim Hochladen zeigt mit IDE irgendeinen Fehler an. Also scheint die Bibliothek ja auch ok zu sein, oder!?
Bin wirklich ratlos.
LG vom Äffchen
Hier noch ein Bild vom Aufbau:
Hoffe nicht das ich noch etwas vergessen habe.
#include <Adafruit_LEDBackpack.h>
#include <Wire.h>
#include <splash.h>
#include <Adafruit_ADS1015.h>
#include <RunningAverage.h>
#include <Adafruit_SSD1306.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define OLED_RESET 4
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
Adafruit_ADS1115 ads;
float Vcalib = 0;
float voltage = 0;
float bruecke = 0;
float gain = 0.03125;
float calibMD62 = 661.26;
float brueckeCalib = 10;
float TempKomp = 0 ;
unsigned long time;
bool initialisierung = true;
RunningAverage RA0(10);
RunningAverage RA1(10);
void setup() {
Serial.begin(9600);
Serial.println("Hello");
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x64, I2C_ADDRESS);
uint16_t time = millis();
time = millis() - time;
oled.setFont(Callibri14);
oled.setCursor(2, 1);
oled.print("TDI Diver");
oled.setCursor(2, 4);
oled.print("TMX Analyser");
oled.setFont(Callibri10);
oled.setCursor(2, 6);
oled.print("Ver 6.0 OLED GER (C) 2021");
delay(2000);
oled.clear();
oled.setFont(Callibri14);
oled.setCursor(2, 3);
oled.print(" Rene Baumgarten ");
delay(2000);
oled.clear();
ads.setGain(GAIN_FOUR);
ads.begin();
int16_t adc0;
int16_t adc1;
adc0 = ads.readADC_Differential_0_1();
RA0.addValue(adc0);
voltage = abs(RA0.getAverage() * gain);
adc1 = ads.readADC_Differential_2_3();
RA1.addValue(adc1);
bruecke = RA1.getAverage() * gain;
oled.setFont(Callibri11);
oled.setCursor(2, 1);
oled.print("He Messbruecke");
oled.setCursor(2, 3);
oled.print("V cell = ");
oled.print(voltage, 2);
oled.print("mV");
oled.setCursor(2, 5);
oled.print("VBruecke.=");
oled.print(bruecke, 2);
oled.print("mV");
delay(2000);
oled.clear();
oled.setCursor(2, 1);
oled.print("Kalibrierung");
oled.setCursor(2, 3);
oled.print("O2 Sensor");
oled.setCursor(2, 5);
oled.print("(Luft 20.9% O2 )");
int i = 0;
float Vavg = 0;
for (i = 1; i < 10 or (abs (voltage - (Vavg / (i - 1)))) > 0.001; i++)
{
adc0 = ads.readADC_Differential_0_1();
RA0.addValue(adc0);
voltage = abs(RA0.getAverage() * gain);
Vavg = Vavg + voltage;
delay(200);
}
oled.setFont(Callibri14);
oled.clear();
oled.setCursor(2, 1);
oled.println("Kalibirierung OK");
Vavg = Vavg / (i - 1);
Vcalib = Vavg;
oled.setCursor(2, 3);
oled.print("V cal. = ");
oled.print(Vcalib, 2);
oled.print("mV");
Serial.println(voltage);
delay(2000);
oled.clear();
oled.setCursor(2, 1);
oled.print("Vorheizen");
oled.setCursor(2, 3);
oled.print("Heliumsensor...");
delay(500);
while (bruecke > 10) {
adc1 = ads.readADC_Differential_2_3();
RA1.addValue(adc1);
bruecke = RA1.getAverage() * gain;
oled.setCursor(2, 5);
oled.print("V Brücke=");
oled.print(bruecke, 0);
oled.print("mV ");
delay(50);
}
oled.clear();
oled.setCursor(1, 1);
oled.print(" Heliumsensor OK");
delay(2000);
oled.clear();
oled.setFont(Callibri14);
oled.setCursor(2, 3);
oled.print("System OK");
delay(2000);
oled.clear();
oled.setFont(Callibri14);
}
void loop() {
oled.setFont(Callibri14);
oled.clear();
int16_t adc0;
int16_t adc1;
adc0 = ads.readADC_Differential_0_1();
adc1 = ads.readADC_Differential_2_3();
time = millis();
RA0.addValue(adc0);
voltage = abs(RA0.getAverage() * gain);
RA1.addValue(adc1);
bruecke = RA1.getAverage() * gain;
float nitrox = 0;
int MOD = 0;
int EAD = 0;
float helium = 0;
nitrox = voltage * (20.9 / Vcalib);
MOD = 10 * ( (160 / nitrox) - 1);
if (voltage > 1) {
oled.setCursor(20, 2);
oled.set1X();
oled.print("Oxygen");
oled.set2X();
oled.setCursor(20, 4);
oled.print(nitrox, 1);
oled.print(" %");
delay(2000);
oled.clear();
oled.set1X();
oled.setCursor(20, 2);
oled.print("Helium");
oled.setCursor(60, 1);
oled.print("VBr: ");
oled.print(bruecke);
oled.set2X();
oled.setCursor(20, 4);
bruecke = bruecke - brueckeCalib;
if (time < 480000) {
TempKomp = 1 ;
}
if (time < 360000) {
TempKomp = 2 ;
}
if (time < 300000) {
TempKomp = 3 ;
}
if (time < 270000) {
TempKomp = 4 ;
}
if (time < 240000) {
TempKomp = 5 ;
}
if (time < 210000) {
TempKomp = 6 ;
}
if (time < 180000) {
TempKomp = 7 ;
}
if (time < 165000) {
TempKomp = 8 ;
}
if (time < 150000) {
TempKomp = 9 ;
}
if (time < 120000) {
TempKomp = 10 ;
}
if (time < 105000) {
TempKomp = 11 ;
}
if (time < 90000) {
TempKomp = 12 ;
}
if (time < 80000) {
TempKomp = 13 ;
}
if (time < 70000) {
TempKomp = 14 ;
}
if (time < 60000) {
TempKomp = 15 ;
}
if (time < 50000) {
TempKomp = 16 ;
}
if (time < 40000) {
TempKomp = 17 ;
}
if (time < 30000) {
TempKomp = 18 ;
}
bruecke = bruecke - TempKomp;
helium = 100 * bruecke / calibMD62;
if (helium > 50) {
helium = helium * (1 + (helium - 50) * 0.4 / 100);
}
if (helium < 0) {
helium = 0;
}
else {
helium = 100 * bruecke / calibMD62;
}
oled.print(helium, 1);
oled.print(" %");
delay(2000);
}
delay(2000);
}