bibliotheek zoek?

Arduino specifieke Software
Gebruikers-avatar
Berichten: 2
Geregistreerd: 01 Nov 2020, 15:51

bibliotheek zoek?

Berichtdoor PHB2016 » 01 Nov 2020, 16:04

Dit is mijn eerste Arduino-hulpverzoek.
Ik heb een Mega 2560 met 12 DHT-11's voor loggen van temperatuur en luchtvochtigheid. Dat heeft 2 jaar probleemloos gewerkt, maar op de één of andere manier is het programma verdwenen. Ik probeer het opnieuw te uploaden, maar ik mis (en kan ook nergens vinden) de oorspronkelijke bibliotheken voor de DS1302RTC en de SD-kaart. Krijg dus foutmeldingen.

Wie heeft tips? Alvast heel veel dank!

Begin van het programma:

#include <DS1302RTC.h>
#include <Time.h>
#include <TimeLib.h>
#include <dht.h>
#include <SPI.h>
#include "SdFat.h"
// SD card initial variables
SdFat SD;
#define SD_CS_PIN SS
File myFile;
// RTC initial variables
DS1302RTC RTC(31,33,35);
#define DS1302_GND_PIN 37
#define DS1302_VCC_PIN 39
// sensors initial variables
dht S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12;
dht sensors[] = {S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11,
S12};
unsigned long time_interval = 0;
unsigned long previous_time = 0;
void led_blink(){
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: bibliotheek zoek?

Berichtdoor Koepel » 01 Nov 2020, 16:42

Graag had ik meer van de sketch gezien.

Gebruik je RTC.haltRTC(), RTC.writeEN(), RTC.get() en zo ?
Dan kom ik hier terecht: https://playground.arduino.cc/Main/DS1302RTC/.
Die is echter wel wat ouder, het is best mogelijk dat er een nieuwere versie op Github staat.
Maar hij is wel bedoeld om samen met TimeLib te gebruiken, en dat is wat jij hebt.

De Arduino heeft de SD library al bij zich. Ik zou die standaard library gebruiken, en eventueel je sketch aanpassen.
https://www.arduino.cc/en/Reference/SD.
Er zijn zo hier en daar een reeks van kleine verbeteringen gedaan. Dus de standaard "SD" library is de beste keuze.
De SPI zit ook standaard bij Arduino.

De "Time" of "TimeLib" is nog steeds actueel: https://github.com/PaulStoffregen/Time.

Van de "DHT" library bestaan er meerdere. Hoe heten de functies die je sketch daarvan gebruikt ?

Gebruikers-avatar
Berichten: 2
Geregistreerd: 01 Nov 2020, 15:51

Re: bibliotheek zoek?

Berichtdoor PHB2016 » 01 Nov 2020, 16:52

Beste Koepel,

Dank voor de snelle reactie. Als PDF de hele sketch.

Het hele spul is door iemand in elkaar gezet, die ik helaas niet meer kan bereiken. Mijn dilemma is: ga ik tijd steken in het doorgronden van het oorspronkelijke werk of start ik opnieuw? Ik ben dus geen ervaren Arduino-gebruiker. En op dit moment ook bezig met domotica met Loxone. Wil eigenlijk geen 2 nieuwe dingen tegelijk leren...

Het mooiste zou zijn als ik de DHT-11's naar de Loxone kan brengen. Dat ga ik wel al doen met DS1820's via 1-wire.

PDF kan blijkbaar niet.

Dan zo:

#include <DS1302RTC.h>
#include <Time.h>
#include <TimeLib.h>
#include <dht.h>
#include <SPI.h>
#include "SdFat.h"
// SD card initial variables
SdFat SD;
#define SD_CS_PIN SS
File myFile;
// RTC initial variables
DS1302RTC RTC(31,33,35);
#define DS1302_GND_PIN 37
#define DS1302_VCC_PIN 39
// sensors initial variables
dht S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12;
dht sensors[] = {S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11,
S12};
unsigned long time_interval = 0;
unsigned long previous_time = 0;
void led_blink(){
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
void setup(){
delay(2000);
Serial.begin(9600);
/*while (!Serial) {
; // wait for serial port to connect. Needed for native USB
port only
}*/
//LED initialization
pinMode(LED_BUILTIN, OUTPUT);
//SD card initialization
pinMode(53, OUTPUT);
pinMode(SS, OUTPUT);
if (!SD.begin(SD_CS_PIN)) {
Serial.println("SD initialization failed!");
return;
}
Serial.println("SD initialization done.");
//RTC initialization
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);
digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);
setSyncProvider(RTC.get); // the function to get the time from
the RTC
if(timeStatus() == timeSet)
Serial.println("RTC OK!");
else
Serial.println("RTC FAIL!");
delay(2000);
}
void loop(){
if(timeStatus() != timeSet) Serial.println(F("RTC SYNC ERROR!
"));
// check if any humidity values are out of order and light up
the LED
bool led_on = 0;
int chk;
chk = sensors[0].read11(22);
if(sensors[0].humidity >= 80){
led_on = 1;
led_blink();
}
chk = sensors[1].read11(24);
if(sensors[1].humidity >= 80){
led_on = 1;
led_blink();
}
for(int i = 2; i < sizeof(sensors) / 13; i++){
chk = sensors[i].read11(i + 1);
if(sensors[i].humidity >= 80){
led_on = 1;
led_blink();
}
}
if(led_on == 0) digitalWrite(LED_BUILTIN, led_on);
delay(2000);
// check if an hour has passed
Serial.print(day());
Serial.print(".");
Serial.print(month());
Serial.print(".");
Serial.print(year());
Serial.print(" ");
Serial.print(hour());
Serial.print(":");
Serial.print(minute());
// reading sensor values
//int chk;
chk = sensors[0].read11(22);
Serial.print(" ");
Serial.print(sensors[0].temperature);
Serial.print(" ");
Serial.print(sensors[0].humidity);
chk = sensors[1].read11(24);
Serial.print(" ");
Serial.print(sensors[1].temperature);
Serial.print(" ");
Serial.print(sensors[1].humidity);
for(int i = 2; i < sizeof(sensors) / 13; i++){
chk = sensors[i].read11(i + 1);
Serial.print(" ");
Serial.print(sensors[i].temperature);
Serial.print(" ");
Serial.print(sensors[i].humidity);
}
Serial.println();
time_interval = millis() - previous_time;
if(minute() != 0 || time_interval < 60000) return 0;
previous_time = millis();
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("Sensor_data.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.println("Writing to Sensor_data.txt...");
// reading current date and time
myFile.print(day());
myFile.print(".");
myFile.print(month());
myFile.print(".");
myFile.print(year());
myFile.print(" ");
myFile.print(hour());
myFile.print(":");
myFile.print(minute());
// reading sensor values
int chk;
chk = sensors[0].read11(22);
myFile.print(" ");
myFile.print(sensors[0].temperature);
myFile.print(" ");
myFile.print(sensors[0].humidity);
chk = sensors[1].read11(24);
myFile.print(" ");
myFile.print(sensors[1].temperature);
myFile.print(" ");
myFile.print(sensors[1].humidity);
for(int i = 2; i < sizeof(sensors) / 13; i++){
chk = sensors[i].read11(i + 1);
myFile.print(" ");
myFile.print(sensors[i].temperature);
myFile.print(" ");
myFile.print(sensors[i].humidity);
}
myFile.println();
// close the file
myFile.close();
Serial.println("Done!");
} else {
// if the file didn't open, print an error:
Serial.println("Error opening Sensor_data.txt");
}
}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: bibliotheek zoek?

Berichtdoor Koepel » 02 Nov 2020, 11:32

Volgens mij kun je gewoon de Arduino SD library gebruiken. Dus include de <SD.h> in plaats van de "SdFat.h".
Misschien is het nodig om de naam 'SD' in de sketch te wijzigen naar iets anders.

Het gaat niet vanzelf en daar is Arduino ook niet voor bedoeld.

Ik zag dat Loxone support heeft voor de DS1820, maar ik zag geen mogelijkheid om de luchtvochtigheid te meten. Bestaat daar een Loxone module voor ?
De DHT11 is de meest onnauwkeurige luchtvochtigheid sensor. Als je een mogelijkheid ziet om iets beters aan de Loxone te koppelen, dan zou ik dat meteen doen.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten