Suche Hilfe zu int Variable und Print

Hallo,

wer kann bitte helfen?
Mein Problem: Ich setze im Vorfeld drei Variable mit Wertzuweisung.
In der Setuproutiene werden sie geändert und auch richtig ausgedruckt.
In der Loopanweisung die Überraschung, die Variablen haben nun auf einmal wieder ihren alten Wert.
Wie kommts? Was mach ich falsch?

#include <Wire.h>
#include "RTClib.h"
 RTC_DS1307 RTC;

int stde = 11;
int minu = 59;
int seku = 0;
//------------------------
void setup() 
{ 
 Serial.begin(9600);
 Wire.begin();
 RTC.begin();
 
 // read time
  DateTime now = RTC.now();
  int stde = now.hour();
  int minu = now.minute();
  int seku = now.second();
  
   Serial.print(stde);
   Serial.print(":");
   Serial.print(minu);
   Serial.print(":");
   Serial.println(seku);
}
//--------------------------
void loop() 
{
       Serial.print(stde);
       Serial.print(":");
       Serial.print(minu);
       Serial.print(":");
       Serial.println(seku);
       delay(10000);
}

Wer weis einen Rat?

Tschüß
der Lokgeist

Was soll der Variablen Typ noch mal in setup()? Du legst da lokale Variablen gleichen Namens an die die globalen Variablen überdecken

lass ich die Zuweisung im Anfang weg, kommt die Fehlermeldung:

Arduino: 1.6.4 (Windows 8.1), Platine: "Arduino Nano, ATmega328"

Build-Optionen wurden verändert, alles wird neu gebaut

TestPrint.ino: In function 'void loop()':
TestPrint:30: error: 'stde' was not declared in this scope
TestPrint:32: error: 'minu' was not declared in this scope
TestPrint:34: error: 'seku' was not declared in this scope
'stde' was not declared in this scope

  Dieser Report hätte mehr Informationen mit
  "Ausführliche Ausgabe während der Kompilierung"
  aktiviert in Datei > Einstellungen

Was nun?

Die globale Deklaration muss natürlich vorhanden sein. Aber du darfst du Variablen nicht nochmal in setup() deklarieren!

Statt:

void setup()
{

  DateTime now = RTC.now();
  int stde = now.hour();
  int minu = now.minute();
  int seku = now.second();
}

So:

void setup()
{

  DateTime now = RTC.now();
  stde = now.hour();
  minu = now.minute();
  seku = now.second();
}

Dann wird der Wert den globalen Variablen zugewiesen, statt lokale Variablen gleichen Namens anzulegen die am Ende der Funktion aufhören zu existieren

Vielen, vielen Dank.

So funktioniert es super. :slight_smile:
Und so lern ich immer wieder gut dazu. :smiley:

Danke
der Lokgeist