RTC Shield von Velleman

Hallo,

ich habe ien Projekt indem ich ein Arduino Mega ein RTC-Shield und ein GSM-Shield gestapelt habe. Ich möchte nicht auf den Code eingehen weil ich hier keine Probleme habe. Das RTC hat eine CR2032 bekommen um die Uhrzeit nicht zu verlieren. Leider klappt das nicht. Spannung der Battarie liegt an und beträgt 3.3Volt und die Polugt ist o.k.

Hat hier einer ein Tipp was mein Fehler ist.

Mario

Ja, wenn du alles geheim hältst, müssen wir raten.

Du hast keine Spannung angeschlossen. :wink:

Naja Schaltung und Sketch wären schon wichtig, wie sollen wir sonst deine Fehler erkennen.

OniudraDUE: Ich möchte nicht auf den Code eingehen weil ich hier keine Probleme habe.

Wetten das doch? Zeig mal deinen Code her. Du setzt die Uhrzeit evtl ständig neu so dass sie niemals laufen kann.

Sorry nein der Code ist nicht geheim nur im Aufbau und noch nicht fertig

Code kommt

würde den Cod ja einfügen blöd nur das mann nicht lässt ich habe innerhalb einer zeit zuviele beiträge gemacht bitte was das und der code ist zu lang

Habt ihr ein tipp wie ich den code posten kann

wie bekomme ich denn nur den code hier rein

Dann mach es als Anhang.

// GSM Alarmsteuerung

#include <GSM.h>
#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include <Ethernet.h>

//------------------------------------------------------------------------------------
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0F, 0x49, 0xD1 };             // MAC Adresse des Arduino Boards
byte ip[] = {
  192, 168, 1, 177 };                                // IP Adresse des Arduino Boards
byte gateway[] = { 192, 168, 1, 2 };                // Gateway (optional)
byte subnet[] = { 255, 255, 255, 0 };               // Subnet Maske (optional)
EthernetServer server(80);                          // Port Einstellung (Standard 80)


//-----------------------------------------------------------------------------------
// Einstellungen GSM
#define PINNUMBER "8627"              // Pin der SIM Karte
#define PHONENUMBER "01707989195"     // Rufnummer des Empfaenger 1
//#define PHONENUMBER "01707989195"   // Rufnummer des Empfaenger 2


// PWM Eingänge
    
    #define EINGANG_2 2     //  PWM Ausgang
    #define EINGANG_3 3     //  PWM Ausgang
    #define EINGANG_4 4     //  PWM Ausgang
    #define EINGANG_5 5     //  PWM Ausgang
    #define EINGANG_4 4     //  PWM Ausgang
    #define EINGANG_6 6     //  PWM Ausgang
    #define EINGANG_7 7     //  PWM Ausgang
    #define EINGANG_8 8     //  PWM Ausgang
    #define EINGANG_9 9     //  PWM Ausgang
//#define EINGANG_10 10     //  PWM Ausgang Digitaler pin wird vom Ethernet Shield benutzt
//#define EINGANG_11 11     //  PWM Ausgang Digitaler pin wird vom Ethernet Shield benutzt
//#define EINGANG_12 12     //  PWM Ausgang Digitaler pin wird vom Ethernet Shield benutzt
//#define EINGANG_13 13     //  PWM Ausgang Digitaler pin wird vom Ethernet Shield benutzt
    #define EINGANG_45 45   //  PWM Ausgang
    #define EINGANG_46 46   //  PWM Ausgang


// Einstellungen Alarmeingänge

#define EINGANG_32 32 // Alarmeinspeisung von Temptimon und Meldung per sms= 01733569112
#define EINGANG_33 33 // Alarmeinspeisung von Hebeanlage Cobas1 und Meldung per sms= 01733569112
#define EINGANG_34 34 // Alarmeinspeisung von Hebeanlage Cobas2 und Meldung per sms= 01733569112
#define EINGANG_35 35 // Alarmeinspeisung von Hebeanlage Urinplatz und Meldung per sms= 01733569112
#define EINGANG_36 36 // Alarmeinspeisung von Hebeanlage Goss Serverraum und Meldung per sms= 01733569112
#define EINGANG_37 37 // Alarmeinspeisung von Hebeanlage Gross Haupteingang und Meldung per sms= 01733569112
#define EINGANG_38 38 // Alarmeinspeisung von Hebeanlage Gross Mibi und Meldung per sms= 01733569112
#define EINGANG_39 39 // Alarmeinspeisung von Hebeanlage Häma Labor Ecke und Meldung per sms=01733569112
#define EINGANG_40 40 // Alarmeinspeisung von  
#define EINGANG_41 41 // Alarmeinspeisung von  ...
#define EINGANG_42 42 // Alarmeinspeisung von  ...
#define EINGANG_43 43 // Alarmeinspeisung von  ...
#define EINGANG_44 44 // Alarmeinspeisung von  ...
#define EINGANG_47 47 // Alarmeinspeisung von  ...
#define EINGANG_48 48 // Alarmeinspeisung von  ...
#define EINGANG_49 49 // Alarmeinspeisung von  ...
#define EINGANG_50 50 // Alarmeinspeisung von  ...
#define EINGANG_51 51 // Alarmeinspeisung von  ...
#define EINGANG_52 52 // Alarmeinspeisung von  ...
#define EINGANG_53 53 // Alarmeinspeisung von  ...
#define EINGANG_54 54 // Alarmeinspeisung von  ...
// Einstellungen Signalausgänge 

  #define AUSGANG_22 22       // PA0  green
  #define AUSGANG_23 23       // PA1  gelb
  #define AUSGANG_24 24       // PA2  rot
//#define AUSGANG_17 17       // von RTC Shield benutzt
  #define AUSGANG_25 25       // PA3  blau 
//#define AUSGANG_19 19       // von RTC Shield benutzt
  #define AUSGANG_26 26       // noch nicht definiert
  #define AUSGANG_27 27       // noch nicht definiert
  #define AUSGANG_28 28       // noch nicht definiert
  #define AUSGANG_29 29       // noch nicht definiert
  #define AUSGANG_30 30       // noch nicht definiert
  #define AUSGANG_31 31       // noch nicht definiert

//Einstellung Signalausgäne für die Anzeige an der Labordecke

int ledGruen = 22;          //Grüne   LED Statusdecken LED
int ledGelb = 23;           //Gelbe   LED Statusdecken LED
int ledRot = 24;            //Rote    LED Statusdecken LED
int ledBlau = 25;           //Blaue   LED Statusdecken LED


// Einstellungen Alarm
int alarmDauerMax = 5; // Minuten

// Ab hier nichts mehr konfiguriern

// GMS INIT
GSM gsmAccess(true);
GSM_SMS sms;

// RTC INIT
RTC_DS1307 RTC;

// Variablen
int alarmStatus = 0;
int alarmStatus_saved = 0;
int alarmDauer = 0;
int tuerStatus = 0;
int tuerStatus_saved = 0;
unsigned int alarmBeginUnix = 0;
unsigned int jetztUnix = 0;
DateTime jetzt;
String  txtMessage = "";
int testEingang = 0;
int gelbBlinkZaehler = 0;
char senderNumber[20];
int smsStatus = 0;    // 0 = keine SMS gesendet, 1 = SMS gesendet, 2 = SMS Antwort erhalten
char smsText;

void setup() {
  
  // Serial Setup
  Serial.begin(9600);
  while(! Serial) {
    ; // auf seriellen Port warten
  } 
  Ethernet.begin(mac, ip);//,gateway, subnet);   // Ethernet initialisieren
  server.begin();                                 // Auf Clients warten
  
  Serial.println("Los geht's....");
  
  // Ein- / Ausgaenge definieren
  
  pinMode(EINGANG_32, INPUT);
  pinMode(EINGANG_33, INPUT);
  pinMode(EINGANG_34, INPUT);
  pinMode(EINGANG_35, INPUT);
  pinMode(EINGANG_36, INPUT);
  pinMode(EINGANG_37, INPUT);
  pinMode(EINGANG_38, INPUT);
  pinMode(EINGANG_39, INPUT);
  pinMode(EINGANG_40, INPUT);
  pinMode(EINGANG_41, INPUT);
  pinMode(EINGANG_42, INPUT);
  pinMode(EINGANG_43, INPUT);
  pinMode(EINGANG_44, INPUT);
  pinMode(EINGANG_47, INPUT);
  pinMode(EINGANG_48, INPUT);
  pinMode(EINGANG_49, INPUT);
  pinMode(EINGANG_50, INPUT);
  pinMode(EINGANG_51, INPUT);
  pinMode(EINGANG_52, INPUT);
  pinMode(EINGANG_53, INPUT);
  pinMode(EINGANG_54, INPUT);
  
  pinMode(AUSGANG_22, OUTPUT);
  pinMode(AUSGANG_23, OUTPUT);
  pinMode(AUSGANG_24, OUTPUT);
  pinMode(AUSGANG_25, OUTPUT);
  pinMode(AUSGANG_26, OUTPUT);
  pinMode(AUSGANG_27, OUTPUT);
  pinMode(AUSGANG_28, OUTPUT);
  pinMode(AUSGANG_29, OUTPUT);
  pinMode(AUSGANG_30, OUTPUT);
  pinMode(AUSGANG_31, OUTPUT);
  
  // PullUp setzen
  
  //digitalWrite(EINGANG_32, LOW);
  digitalWrite(EINGANG_33, LOW);
  digitalWrite(EINGANG_34, LOW);
  digitalWrite(EINGANG_35, LOW);
  digitalWrite(EINGANG_36, LOW);
  digitalWrite(EINGANG_37, LOW);
  digitalWrite(EINGANG_38, LOW);
  digitalWrite(EINGANG_39, LOW);
  digitalWrite(EINGANG_40, LOW);
  digitalWrite(EINGANG_41, LOW);
  digitalWrite(EINGANG_42, LOW);
  digitalWrite(EINGANG_43, LOW);
  digitalWrite(EINGANG_44, LOW);
  digitalWrite(EINGANG_47, LOW);
  digitalWrite(EINGANG_48, LOW);
  digitalWrite(EINGANG_49, LOW);
  digitalWrite(EINGANG_50, LOW);
  digitalWrite(EINGANG_51, LOW);
  digitalWrite(EINGANG_52, LOW);
  digitalWrite(EINGANG_53, LOW);
  digitalWrite(EINGANG_54, LOW);
 // RTC Setup
  Wire.begin();
  RTC.begin();

  delay(5000);

  if(! RTC.isrunning()) {
    Serial.println("RTC läuft nicht!");
    //RTC.adjust(DateTime(__DATE__, __TIME__)); // Uhrzeit und Datum in RTC setzen
  } else {
    Serial.println("RTC läuft.");
  }

  jetzt = RTC.now();
  Serial.println(jetzt.unixtime());
  delay(5000);

  // GSM Setup
  boolean notGSMConnected = true;

  while( notGSMConnected ) {
    Serial.print("Sende PIN...");
    if( gsmAccess.begin(PINNUMBER) == GSM_READY ) {
      Serial.println("PIN OK");
      notGSMConnected = false;
    } else {
      Serial.println("Keine GSM Verbindung");
      delay(1000);
    }
  }

  Serial.println("GSM Verbindung besteht");

  delay(5000);
  
}

void loop() {

  /* Test
  testEingang = digitalRead(EINGANG_01);
  Serial.print("1 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_02);
  Serial.print("2 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_03);
  Serial.print("3 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_04);
  Serial.print("4 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_05);
  Serial.print("5 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_06);
  Serial.print("6 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_07);
  Serial.print("7 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_08);
  Serial.print("8 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_09);
  Serial.print("9 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_10);
  Serial.print("10 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_11);
  Serial.print("11 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_12);
  Serial.print("12 = ");
  Serial.println(testEingang);
  testEingang = digitalRead(EINGANG_13);
  Serial.print("13 = ");
  Serial.println(testEingang);
   Test Ende */
  
  // pruefen ob TempAlarm anliegt
  alarmStatus = digitalRead(EINGANG_32);
  Serial.print("Eingang 32 = ");
  if( alarmStatus == 0 ) Serial.println("LOW");
  if( alarmStatus == 1 ) Serial.println("HIGH");

  // Wenn kein Alarm ist nichts unternehmen
  if( alarmStatus == 0 ) {
    alarmStatus_saved = 0;
    digitalWrite(AUSGANG_22, 1); // grün an
    digitalWrite(AUSGANG_23, 0); // gelb aus
    digitalWrite(AUSGANG_24, 0); // rot aus
    digitalWrite(AUSGANG_25, 0); // blau aus
  } else {
    // Wenn Alarm anliegt pruefen ob es ein neuer Alarm ist
    if( alarmStatus_saved == 0 ) {
      // Neuer Alarm
      jetzt = RTC.now();
      alarmBeginUnix = jetzt.unixtime();
      Serial.print("alarmBeginUnix = ");
      Serial.println(alarmBeginUnix);
      alarmStatus_saved = 1;
    } else {
      // Bereits laufender Alarm
      jetzt = RTC.now();
      jetztUnix = jetzt.unixtime();
      alarmDauer = jetztUnix - alarmBeginUnix;

      if( smsStatus == 2 ) {
        if( jetzt.unixtime() % 2 == 0 ) {
          digitalWrite(AUSGANG_23, 1);   
        } else {
          digitalWrite(AUSGANG_23, 0);
        }
      }

      
      if( alarmDauer >= (alarmDauerMax * 2 ) ) {   // Zum Testen
      //if( alarmDauer >= (alarmDauerMax * 60 ) ) {

        digitalWrite(AUSGANG_22, 0); // grün aus
        digitalWrite(AUSGANG_24, 1); // rot an
        
        Serial.println("Alarm SMS senden");
        txtMessage = txtMessage + jetzt.hour() + ":";
        Serial.println(txtMessage);
        txtMessage = txtMessage + jetzt.minute() + ":"; 
        Serial.println(txtMessage);
        txtMessage = txtMessage + jetzt.second() + " - " + "Status Fehler";
        Serial.println(txtMessage);
      
        sms.beginSMS(PHONENUMBER);
        sms.print(txtMessage);
        sms.endSMS();
        smsStatus = 1;

        // sms raus -> gelb an
        digitalWrite(AUSGANG_23, 1);
        
        txtMessage = "";
        alarmBeginUnix = jetzt.unixtime();

        // SMS empfangen ?
        if (sms.available()) {
          smsText = sms.read();
          if( smsText == 'o' ) {
            smsStatus = 2; // SMS empfangen mit Inhalt o oder O
          }
        }
      }
    }
  }
  delay(1000);
}

Off Topic: generell solltest du dir mal anschauen wie Arrays funktionieren. Man kann Pin-Nummern in Arrays ablegen und dann mit for-Schleifen darüber iterieren. Dadurch sparst du dir die ständigen Wiederholungen im Code.

Das Problem kann auch elektrisch sein. Bei der DS1307 hast du keinen Zugriff auf die RTC wenn die Betriebsspannung unter 1,25 * VBat fällt

Danke für den Tipp. Die VBat liegt bei 3.4 hab gerade gemessen

Hast du denn die RTC mal solo getestet, ob diese auch funktioniert? Bei der Library sollte doch ein einfacher Beispielsketch zum Testen dabei sein.

die RTCLib.h verwendet standartmäßig 0x68 als Adresse, passt das?

kannst du nochmal sagen was da passen soll mit der Adresse0x68

wenn du einen I2C Scanner laufen lässt, wird dir die I2C Adresse deiner RTC angezeigt.

Danke für die schnelle Antwort
Ich habe an den Code nix geänder aber geht jetzt sorry das ist komisch.

Aber das mit den Scanner werd ich mal machen den code gibs ja schon. Danke für den Tip

OniudraDUE: Danke für die schnelle Antwort Ich habe an den Code nix geänder aber geht jetzt sorry das ist komisch.

Aber das mit den Scanner werd ich mal machen den code gibs ja schon. Danke für den Tip

Nicht komisch, bekannt. Das sind vielfach die "schlechten" Kontakte der Steckkontakte im Arduino oder wenn vorhanden im Steckbrett.