Go Down

Topic: FIS für Motorrad (Read 22977 times) previous topic - next topic

Aceli

Vielen Dank .

Werde ich mal durchstöbern ..

Aceli

#106
Aug 18, 2018, 08:59 am Last Edit: Aug 18, 2018, 09:00 am by Aceli
Moin,

@postmaster-ino ,
Wenn ich das richtig verstanden habe , so verkabeln und in dem Link von dir den Scanner draufspielen und über den seriellen Monitor kann ich dann was erkennen ?!

Aceli

Einfach getestet und hier die ergebnisse

Code: [Select]

I2C Scanner

Scanning...

I2C device found at address 0x57 (87) it could be a EEPROM AT24Cxxxx
I2C device found at address 0x68 (104) it could be a Real Time Clock DS3231/DS1337/DS1307/...

Done!

Dump of memory content (111 bytes) from I2C device at address 0x57 (87)
⸮(0xFF)
.....
⸮(0xFF)

End of Dump

Dump of NVRAM content (19 bytes) from I2C device at address 0x68 (104)
The information is apply only for chip DS3231, partially for chips DS1337 and DS1307 (and maybe for another similar chips)
0x00 Seconds             = 39
0x01 Minutes             = 18
0x02 Hours               = 10
0x03 Weekday             = 7
0x04 Day                 = 18
0x05 Month/Century       = 8
0x06 Year                = 2018
0x07 Alarm 1 Seconds     = 0
0x08 Alarm 1 Minutes     = 8
0x09 Alarm 1 Hours       = 0
0x0A Alarm 1 Day&Date    = 8
0x0B Alarm 2 Minutes     = 0
0x0C Alarm 2 Hours       = 0
0x0D Alarm 2 Day&Date    = 0
0x0E Control             = 11100
0x0F Control/Status      = 10001000
0x10 Aging Offset        = 0
0x11 Temperature MSB+LSB = 28.50⸮C
End of Dump

Send any key to repeat...


und mit den 0x?? kann ich dann später das, was ich brauche auslesen richtig

Dann schaue ich mal wie ich die einbinden kann...

postmaster-ino

Hi

Die vielen 0xFF sind das EEprom, Das auf der RTC mit drauf sitzt.
Dieses ist momentan komplett leer - beim EEprom kann man einzeln nur Bits löschen (also beim 'was drauf schreiben').
Wenn man was Anderes drauf schreiben möchte, muß man das EEprom erst wieder löschen - macht die Lib aber dann wohl für Dich.
Darin besteht auch die Gefahr: Das EEprom hat nur eine begrenzte Anzahl an Schreibzugriffen (10000 oder 100000 - zur Not auf der Platine die Bezeichnung des 8-Beiner in Google eintragen und das DaBla kontaktieren).
Es gab hier aber einen Post, wo Einer das EEprom gegen einen FRam ausgetauscht hat - beliebig oft und beliebig schnell beschreibbar, keine Wartezeiten - habe hier ein FRam, daß bereits 191261000 Schreibzugriffe auf die ersten 4 Speicherzellen erleben durfte - darin lasse ich gerade eine 32bit Zahl in jedem loop()-Durchlauf +1 zählen und speichern ... Spielerei :).

Um irgend welche User-Eingaben zu speichern, kannst Du das EEprom aber gut für hernehmen - bis Du 10000 Mal irgend etwas umgestellt hast, werden wohl auch 1...2 Jahre vergangen sein ;)

Zum Auslesen der RTC:
In dem I2C-Scanner findest Du den Abschnitt, wo die Daten aus der RTC ausgelesen werden.
Dort wird nur die RTC 'angesprochen', Ihr wird eine Register-Nummer übergeben und dann werden x Byte an Daten angefordert und ausgelesen.
Mehr als diese paar Befehle brauchst Du auch nicht, um an die Uhrzeit zu kommen.

Wie geschrieben: Wenn Du die Uhr nicht stellen können musst, war's Das schon!
Sonst verrät Dir das Datenblatt aber auch, welche Befehle zum Stellen nötig sind - da brauchst Du aber als User-Eingabe das einzustellende Datum und Uhrzeit!

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Aceli

Alles eingestellt am RTC ist ja bereits...
mir gehts nur noch darum, Datum und Uhrzeit angezeigt zu bekommen...

und da hapert es gerade bei mir :/

suche und versuche es schon ca 2std .....

postmaster-ino

Hi

Da, wo Du die Uhrzeit auslesen willst, kommt dieser Code hin (wobei NumberOfBytes hier 19 ist):
Code: [Select]
 Wire.beginTransmission(DS3231_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  if ( Wire.requestFrom(DS3231_ADDRESS, NumberOfBytes) == NumberOfBytes ) {
    while (!Wire.available())
    {
      // waiting
    }
    byte addr = 0;
    Serial.println(F("The information is apply only for chip DS3231, partially for chips DS1337 and DS1307 (and maybe for another similar chips)"));
    PrintAddress(addr++, 4); Serial.print(F("Seconds             = ")); Serial.println(bcdToDec(Wire.read() & 0x7F));
    PrintAddress(addr++, 4); Serial.print(F("Minutes             = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Hours               = ")); Serial.println(bcdToDec(Wire.read() & 0x3F));
    PrintAddress(addr++, 4); Serial.print(F("Weekday             = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Day                 = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Month/Century       = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Year                = ")); Serial.println(bcdToDec(Wire.read()) + 2000);
    PrintAddress(addr++, 4); Serial.print(F("Alarm 1 Seconds     = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 1 Minutes     = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 1 Hours       = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 1 Day&Date    = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 2 Minutes     = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 2 Hours       = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Alarm 2 Day&Date    = ")); Serial.println(bcdToDec(Wire.read()));
    PrintAddress(addr++, 4); Serial.print(F("Control             = ")); Serial.println(Wire.read(), BIN);
    PrintAddress(addr++, 4); Serial.print(F("Control/Status      = ")); Serial.println(Wire.read(), BIN);
    PrintAddress(addr++, 4); Serial.print(F("Aging Offset        = ")); Serial.println(Wire.read());
    PrintAddress(addr++, 4); Serial.print(F("Temperature MSB+LSB = "));
    //MSB of Temp
    float ttc = (float)(int)Wire.read();
    //LSB of Temp
    addr++;
    byte portion = Wire.read();
    if (portion == 0b01000000) ttc += 0.25;
    if (portion == 0b10000000) ttc += 0.5;
    if (portion == 0b11000000) ttc += 0.75;
    char buffer[16];
    String TempStr = dtostrf(ttc, 5, 2, buffer);
    TempStr = TempStr + "\xB0\x43"; //oC for Western Character Set
    Serial.println(TempStr);

Klar: Die "Serial.println(bcdToDec(Wire.read() & 0x7F));" musst Du so anpassen, daß Deine Variable dabei gesetzt wird - bei der Sekunde also was in der Richtung
Code: [Select]
mySekunde=bcdToDec(Wire.read() & 0x7F);
if (mySekunde_alt!=mySekunde && mySekunde!=0) break; //Abbruch, wenn sich nur die Sekunde geändert hat, brauchen wir nicht weiter lesen
....

Verständlich, wie ich Das meine?

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Aceli

das schaue ich mir gleich mal an und teste....

hatte eben das ganze mit so etwas versucht.. natürlcih ohne LCD und eingebaut . aber er meckert bei
Code: [Select]

#include <DS3231.h>
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
void setup() {
 rtc.begin(); // Initialize the rtc object
 lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display }
}
void loop() {
 lcd.setCursor(0,0);
 lcd.print("Time:  ");
 lcd.print(rtc.getTimeStr());
 
 lcd.setCursor(0,1);
 lcd.print("Date: ");
 lcd.print(rtc.getDateStr());
 
 delay(1000);
}


DS3231  rtc(SDA, SCL);

no matching function for call to 'DS3231::DS3231(const uint8_t&, const uint8_t&)'


postmaster-ino

Hi

Wie geschrieben, brauchst Du dafür die DS3231-Lib nicht - Du brauchst hierfür nur die wire.h, Die Du eh für I2C einbinden wirst.
(Und: Die wohl ebenfalls von der DS3231-Lib eingebunden würde, wenn Diese nicht bereits eingebunden ist)
Du kannst Dir also Speicherplatz sparen, wenn Du mit den Einzel-Zahlen als Rückgabewert leben kannst.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Aceli

#113
Aug 18, 2018, 04:38 pm Last Edit: Aug 18, 2018, 04:47 pm by Aceli
okay... ich steig nicht mehr ganz durch... das war etwas zu viel probieren und machen...

hier mein aktueller Code, vielleicht noch nicht ganz schön  , aber naja...
Code: [Select]


#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>
#include <Wire.h>


#define MESSFUEHLER1 A0  // Messfühler1
#define MESSFUEHLER2 A1  // Messfühler2
#define ONE_WIRE_BUS 2 //DS18b20
#define EINZELMESSUNGEN1 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define EINZELMESSUNGEN2 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define A_2 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_2 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_2 0.988058093e-07   // C-Koeffizient des Messfühlers

#define FESTWIDERSTAND_2 3000.0  // Widerstandswert des Serienfestwiderstandes des Messfühlers


OneWire oneWire(ONE_WIRE_BUS); //DS18b20
DallasTemperature sensors(&oneWire); //DS18b20


uint16_t SUM_EM_2[EINZELMESSUNGEN1];
uint16_t SUM_EM_3[EINZELMESSUNGEN2];


  uint8_t i=0;
  float DURCHSCHNITT_2 = 0.0;
  float DURCHSCHNITT_3 = 0.0;
  float TEMP_2 = 0.0;
  float TEMP_3 = 0.0;
  float R2_2 = 0.0, lnR2_2 = 0.0;
  float R2_3 = 0.0, lnR2_3 = 0.0;

void setup(void) {
   sensors.begin();  //DS18b20
   DS3231.begin(); // Initialize the rtc object
   Wire.begin(); // Initialize the rtc object
   rtc.begin();
   Serial.begin(9600);
}


void loop(void) {

  // Berechnung des Durchschnittswertes aller Einzelmessungen des Messfühlers.
  DURCHSCHNITT_2 = 0.0;
  DURCHSCHNITT_3 = 0.0;

  for (i=0; i< EINZELMESSUNGEN1; i++) {
   SUM_EM_2[i] = analogRead(MESSFUEHLER1);
   DURCHSCHNITT_2 += SUM_EM_2[i];

   // weiter optimiert
   DURCHSCHNITT_3 += analogRead(MESSFUEHLER2);

   delay(10);
  }
  DURCHSCHNITT_2 /= EINZELMESSUNGEN1;
  DURCHSCHNITT_3 /= EINZELMESSUNGEN1;

 
// Berechnung der Temperatur mit Steinhart-Hart Gleichung
  R2_2 = FESTWIDERSTAND_2* (1023.0 / (float)DURCHSCHNITT_2 - 1.0);
  lnR2_2 = log(R2_2);
  TEMP_2 = (1.0 / (A_2 + B_2*lnR2_2 + C_2*lnR2_2*lnR2_2*lnR2_2)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_2 =  TEMP_2 - 273.15;
 
  R2_3 = FESTWIDERSTAND_2* (1023.0 / (float)DURCHSCHNITT_3 - 1.0);
  lnR2_3 = log(R2_3);
  TEMP_3 = (1.0 / (A_2 + B_2*lnR2_3 + C_2*lnR2_3*lnR2_3*lnR2_3)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_3 =  TEMP_3 - 273.15;

  // Der nachfolgende Teil sendet die Daten zusätzlich über den seriellen Port.
  Serial.print("WT:     ");
  Serial.print(TEMP_2);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
  Serial.println(" °C");
  Serial.print("LT:     ");
  Serial.print(TEMP_3);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
  Serial.println(" °C");
  sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));


    delay(5000);
}



würdest du mir verraten wo genau ich dein COde einfügen kann?!

das anpassen mit 0X00 werd ich hinbekommen ..

wäre n netter zug von dir .
Danke

postmaster-ino

#114
Aug 18, 2018, 05:26 pm Last Edit: Aug 18, 2018, 05:27 pm by postmaster-ino
Hi

Raus:
#include <DS3231.h>
DS3231.begin();
rtc.begin();

Das bindest Du gerade ein, um mit der RTC zu spielen, richtig?
Ja -> diese Libs brauchst Du NICHT, wenn Du nur die Uhrzeit auslesen willst, dafür reicht die wire.h

Wenn Du statt der jeweils festen 25 Messungen in jedem loop()-Durchlauf nur EINE machst, und diese neue Messung immer 'auf den nächsten Platz' schreibst, hast Du eine Art mitlaufenden Mittelwert.
Dafür müsste man sich nur merken, wo man zuletzt geschrieben hat und diesen Zeiger entsprechend wieder auf Null setzen.
Dann klappt natürlich Dein Durchschnitt_2 nicht mehr, da Dieser immer 'am Stück' gefüllt werden muß - oder man müsste VOR dem Eintragen des neuen Messwertes den Alten von dieser Zahl abziehen - auch ein Weg.

Statt Deinem delay(5000); mit millis(), Nachtwächter und Blink_without_delay diese Messwerterhebung verlangsamen.

Und dann, irgendwo in loop(), packst Du (am Besten auch mit einer millis()-Abfrage) folgenden Snipped rein:
(die DS3231_ADDRESS musst Du auf die I2C-Adresse (bei Dir 0x68) Deiner RTC setzen - denke, Das übernimmt derzeit die Lib mit viel Speicherplatz)
Code: [Select]

... global (also vor setup(); ) kommt
const byte DS3231_ADDRESS=0x68;         //I2C-Adresse der RTC


... irgendwo in loop() kommt:

Wire.beginTransmission(DS3231_ADDRESS);
  Wire.write(0);                    //Einstellen der Adresse 0
  Wire.endTransmission();
  byte NumberOfBytes=19;         //es sollen bis zu 19 Bytes ausgelesen werden (in der DS3231 sind maximal 19 Bytes auslesbar)
  if ( Wire.requestFrom(DS3231_ADDRESS, NumberOfBytes) == NumberOfBytes ) {
    while (!Wire.available())
    {
      // waiting
    }
byte mySekunde=bcdToDec(Wire.read() & 0x7F);
byte myMinute=bcdToDec(Wire.read());
byte myStunde=bcdToDec(Wire.read() & 0x3F);
byte myWeekDay=bcdToDec(Wire.read());                     //User-Eingabe, diese Zahl wird gegen Mitternacht +1 gezählt
byte myDay=bcdToDec(Wire.read());
byte myMonat=bcdToDec(Wire.read());
byte myJahr=bcdToDec(Wire.read()) + 2000);
byte myAlarm1Sekunde=bcdToDec(Wire.read());   //Alarmzeit 1
byte myAlarmMinute=bcdToDec(Wire.read());
byte myAlarmStunde=bcdToDec(Wire.read());
byte myAlarmTagDatum=bcdToDec(Wire.read());
byte myAlarm2Minute=bcdToDec(Wire.read());    //Alarmzeit 2, hat keine Sekunden
byte myAlarm2Stunde=bcdToDec(Wire.read());
byte myAlarm2TagDatum=bcdToDec(Wire.read());
byte myKontrolle=Wire.read();                           //siehe DaBla
byte myStatus=Wire.read();                              //Bit 7 zeigt, daß die RTC stehen geblieben ist, siehe DaBla
byte myAlterungsOffset=Wire.read();
byte myGradanzahl=Wire.read();
byte myKommaGrad=Wire.read();                     //Bit 7 = halbe Grad, Bit 6 Viertel Grad

Wenn Du die ganzen Werte nicht brauchst, kannst Du weniger anfordern (statt 19 Byte z.B. nur 3 für Sekunde, Minute, Stunde - dann aber den Rest auch nicht versuchen, auszulesen ;))

Was Du letztendlich damit anstellst, bleibt nur Deiner Phantasie überlassen.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Aceli

#115
Aug 18, 2018, 08:00 pm Last Edit: Aug 18, 2018, 08:24 pm by Aceli
Danke dir viel Mals .

Werde später oder morgen mal ran.

Bin gespannt .

Mich wundert es dennoch warum das andere nicht will :/

Aber besten Dank .

Das mit den millis() ist dann Feintuning!?
Das werd ich mir dann später mal anschauen .

Da ja alle werte eigentlich nur jede Minute angefordert werden müssten .....


Muss man eigentlich jetzt schon was beachten in Hinblick auf die Nutzung eines nextion Displays?
Gruß

postmaster-ino

Hi

Beim Nextion bin ich (ebenfalls noch) überfragt.
Habe zwar ebenfalls Eines, aber noch unbespielt :(
Da das Nextion aber seriell Befehle/Daten zugeschickt bekommt, wird's auf eine State-Maschine hinaus laufen - Gleiches kannst Du für Deine Messwerte benutzen.
Per millis() prüfst Du, ob 'die Zeit um ist' um irgend etwas zu machen - z.B. einen neuen Messwert aufzunehmen um den Mittelwert zum Display (Terminal) zu schicken.
Da das Nextion auch seriell abgefragt werden kann, ob irgendwo hinge'touch'ed wurde, kann man so auch die Anzeige manipulieren.

... also rein Theoretisch ...
Bei Dem, was man so liest, sollte Das aber praktisch auch passen.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Aceli

Besten Dank ,

Ja touch Funktion werde ich erstmal nicht brauchen , aber fand es praktisch . Deswegen gekauft .

Dann freue ich mich mal auf die nächsten Tage .

Aceli

#118
Aug 19, 2018, 12:02 am Last Edit: Aug 19, 2018, 11:44 am by Aceli
ich weiß die millis noch nicht berücksichtigt.

aber so schaut das gut aus? es kommt keine Fehlermeldung !

Code: [Select]


#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>


#define MESSFUEHLER1 A0  // Messfühler1
#define MESSFUEHLER2 A1  // Messfühler2
#define ONE_WIRE_BUS 2 //DS18b20
#define EINZELMESSUNGEN1 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define EINZELMESSUNGEN2 25  // Das verändern der Zahl ändert auch die Anzahl der Einzelmessungen.
#define A_2 1.401592401e-03   // A-Koeffizient des Messfühlers
#define B_2 2.375252635e-04   // B-Koeffizient des Messfühlers
#define C_2 0.988058093e-07   // C-Koeffizient des Messfühlers

#define FESTWIDERSTAND_2 3000.0  // Widerstandswert des Serienfestwiderstandes des Messfühlers


OneWire oneWire(ONE_WIRE_BUS); //DS18b20
DallasTemperature sensors(&oneWire); //DS18b20

uint16_t SUM_EM_2[EINZELMESSUNGEN1];
uint16_t SUM_EM_3[EINZELMESSUNGEN2];


uint8_t i = 0;
float DURCHSCHNITT_2 = 0.0;
float DURCHSCHNITT_3 = 0.0;
float TEMP_2 = 0.0;
float TEMP_3 = 0.0;
float R2_2 = 0.0, lnR2_2 = 0.0;
float R2_3 = 0.0, lnR2_3 = 0.0;

const byte DS3231_ADDRESS = 0x68;       //I2C-Adresse der RTC
byte mySekunde, myMinute, myStunde, myDay, myMonat;
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}

void setup(void) {
  sensors.begin();  //DS18b20
  Wire.begin(); // Initialize the rtc object
  Serial.begin(9600);
}


void loop(void) {

  // Berechnung des Durchschnittswertes aller Einzelmessungen des Messfühlers.
  DURCHSCHNITT_2 = 0.0;
  DURCHSCHNITT_3 = 0.0;

  for (i = 0; i < EINZELMESSUNGEN1; i++) {
    SUM_EM_2[i] = analogRead(MESSFUEHLER1);
    DURCHSCHNITT_2 += SUM_EM_2[i];

    // weiter optimiert
    DURCHSCHNITT_3 += analogRead(MESSFUEHLER2);

Wire.beginTransmission(DS3231_ADDRESS);
  Wire.write(0);                    //Einstellen der Adresse 0
  Wire.endTransmission();
  byte NumberOfBytes = 5;       //es sollen bis zu 19 Bytes ausgelesen werden (in der DS3231 sind maximal 19 Bytes auslesbar)
  if ( Wire.requestFrom(DS3231_ADDRESS, NumberOfBytes) == NumberOfBytes )
    while (!Wire.available())
    {
      // waiting
    }
    byte mySekunde = bcdToDec(Wire.read() & 0x00);
    byte myMinute = bcdToDec(Wire.read());
    byte myStunde = bcdToDec(Wire.read() & 0x02);
    //byte myWeekDay = bcdToDec(Wire.read());                   //User-Eingabe, diese Zahl wird gegen Mitternacht +1 gezählt
    byte myDay = bcdToDec(Wire.read());
    byte myMonat = bcdToDec(Wire.read());
//    byte myJahr = bcdToDec(Wire.read()) + 2000);
    //byte myKontrolle=Wire.read();                           //siehe DaBla
    //byte myStatus=Wire.read();                              //Bit 7 zeigt, daß die RTC stehen geblieben ist, siehe DaBla
    //byte myAlterungsOffset=Wire.read();
    //byte myGradanzahl=Wire.read();
    //byte myKommaGrad=Wire.read();                     //Bit 7 = halbe Grad, Bit 6 Viertel Grad

    delay(10);
  }
  DURCHSCHNITT_2 /= EINZELMESSUNGEN1;
  DURCHSCHNITT_3 /= EINZELMESSUNGEN1;


  // Berechnung der Temperatur mit Steinhart-Hart Gleichung
  R2_2 = FESTWIDERSTAND_2 * (1023.0 / (float)DURCHSCHNITT_2 - 1.0);
  lnR2_2 = log(R2_2);
  TEMP_2 = (1.0 / (A_2 + B_2 * lnR2_2 + C_2 * lnR2_2 * lnR2_2 * lnR2_2)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_2 =  TEMP_2 - 273.15;

  R2_3 = FESTWIDERSTAND_2 * (1023.0 / (float)DURCHSCHNITT_3 - 1.0);
  lnR2_3 = log(R2_3);
  TEMP_3 = (1.0 / (A_2 + B_2 * lnR2_3 + C_2 * lnR2_3 * lnR2_3 * lnR2_3)); // Steinhart-Hart Gleichung. T  = 1 / {A + B[ln(R)] + C[ln(R)]^3}
  TEMP_3 =  TEMP_3 - 273.15;

 
//byte mySekunde, myMinute, myStunde, myDay, myMonat;
    // Der nachfolgende Teil sendet die Daten zusätzlich über den seriellen Port.
    Serial.print("WT:     ");
    Serial.print(TEMP_2);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
    Serial.println(" °C");
    Serial.print("LT:     ");
    Serial.print(TEMP_3);          // Hier wird der Temperaturwert des Messfühlers vom Arduino an den seriellen Port gesendet.
    Serial.println(" °C");
    sensors.requestTemperatures();
    Serial.println(sensors.getTempCByIndex(0));
    Serial.print(myStunde, DEC);
    Serial.print(":");
    Serial.print(myMinute, DEC);
    Serial.print(":");
    Serial.println(mySekunde, DEC);
    //Serial.print(myDay);
    //Serial.print(":");
    //Serial.print(myMonat);
        delay(5000);
  }



Gruß und gute nacht! Getestet wird wenn morgen

EDIT: angepasst, aber zeigt nur 0:0:0 an .

oh man

postmaster-ino

Hi

myWeekDay MUSST Du trotzdem auslesen, da der ausgelesene Wert nach myStunde eben myWeekDay ist.
Du musst diesen Wert nicht benutzen, kannst also myDay 2x hintereinander aufrufen.

Die Daten kommen in der Reihenfolge, die hier (oder im DaBla) angegeben ist.
Du kannst natürlich auch zu euner beliebigen Stelle springen - macht bei einem Byte Versatz aber viel mehr Aufwand, als das eine Byte einfach zu lesen und zu ignorieren.

Bei mir wirft Dein Sketch einen Fehler - in Zeile 85 die Klammer willst Du, denke ich, über die RTC-Abfragen haben.
(außerhalb der FOR-Klammern sind die Variablen myStunde ect.pp. nicht mehr existent)

... und schmeiß das blöde delay() raus ...

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Go Up