Arduino Problem beim Variablen initialisieren

#5692828
Lesenswert?

Hallo,

Ich hätte da mal eine Frage:

Momentan baue ich mir eine Uhr mit Vfd Röhren und die ist soweit 
eigentlich auch fertig.

allerdings funktioniert eine Kleinigkeit nicht.

Ich habe zwei Pins zur Bedienung. Dazu habe ich unter anderem eine 
Funktion geschrieben um die Uhrzeit und die Beleuchtung der Röhren 
einzustellen.

Nun funktioniert das ganze aber nicht wie gewünscht. Wenn ich die 
aktuelle Farbe mit 0 initialisiere kann ich die Farben nicht weiter 
schalten. Initialisiere ich sie allerdings mit 1, dann funktioniert das 
schon.
Woran liegt denn das? Ich komm nicht drauf...

Was mir noch aufgefallen ist.
Wenn ich Serial.begin mit drin habe und etwas auslesen will, dann 
verhält sich das ganze auch wieder anders... woran liegt denn dasß=

Vielen Dank schon mal für eure Hilfe!!

1
// Zeiten und Variablen für die Drückzeitabfrage
2
static unsigned long startzeit2;
3
static unsigned long vergangenezeit2;
4
static bool gestartet2;
5

6
//Global: Variable für die aktuell einzustellende Stelle
7
// static int aktstelle = 0;
8
// ist global: static bool uhrstellenaktiv = 0;
9
//variablen für flanke weiterPin
10
static bool flweiter;
11
static bool weiteralt;
12
//variablen für flanke uhrzeitPin
13
static bool fleinstellen;
14
static bool einstellenalt;
15
// aktuelle Farbe__________________________________hier habe ich das Problem
16
static int aktFarbe = 0;
17

18
void ZeitStellen ()
19
{
20
  //Variablen für die Pins
21
  bool einstellen = digitalRead (uhrzeitPin);
22
  bool weiter = digitalRead (weiterPin);
23

24
  //Flanke vom weiter Pin abfragen
25
  if (weiter == 0 && weiteralt == 1)
26
  {
27
    flweiter = 1;
28
  } else
29
  {
30
    flweiter = 0;
31
  }
32
  weiteralt = weiter;
33

34
  //Flanke vom uhrzeitPin abfragen
35
  if (einstellen == 0 && einstellenalt == 1)
36
  {
37
    fleinstellen = 1;
38
  } else
39
  {
40
    fleinstellen = 0;
41
  }
42
  einstellenalt = einstellen;
43

44
  // Wenn der uhrzeitPin auf 0 geht, wird die Startzeit gesetzt
45
  if (gestartet2 == 0 && einstellen == 0 )
46
  {
47
    gestartet2 = 1;
48
    startzeit2 = millis();
49
  }
50
  // Geht der uhrzeitPin wieder auf 1, rücksetzten der zeiten
51
  if (einstellen == 1)
52
  {
53
    startzeit2 = 0;
54
    gestartet2 = 0;
55
    vergangenezeit2 = 0;
56
  }
57
  // Wurde die Startzeit gesetzt und die Vergangene Zeit ist zu groß, wird wird das stellen aktiv
58
  if (einstellen == 0 && gestartet2 == 1 )
59
  {
60
    vergangenezeit2 = millis() - startzeit2;
61
  }
62
  // Wenn die Vergangene zeit zu groß ist, dann uhrzeitstellen aktiv
63
  if (vergangenezeit2 > 2000)
64
  {
65
    uhrstellenaktiv = 1; // uhrzeitstellen wird aktiv, solange bis alle stellen durch sind
66
  }
67

68

69
  // Farbe ändern
70

71
  if (flweiter == 1 && uhrstellenaktiv == 0)
72
  {
73
    if (aktFarbe < 5)
74
    {
75
      aktFarbe++;
76
    }
77
    else
78
    {
79
      aktFarbe = 0;
80
    }
81
 
82
    switch (aktFarbe)
83
    {
84
      case 0:
85
        rot = 1;
86
        blau = 1;
87
        gruen = 1;
88
        break;
89
      case 1:
90
        rot = 0;
91
        blau = 1;
92
        gruen = 1;
93
        break;
94
      case 2:
95
        blau = 0;
96
        rot = 1;
97
        gruen = 1;
98
        break;
99
      case 3:
100
        gruen = 0;
101
        rot = 1;
102
        blau = 1;
103
        break;
104
      case 4:
105
        rot = 0;
106
        blau = 0;
107
        gruen = 1;
108
        break;
109
      case 5:
110
        rot = 0;
111
        gruen = 0;
112
        blau = 1;
113
        break;
114
      default:
115
        aktFarbe = 0;
116
        break;
117
    }
118
  }
119

120

121

122
  //Wenn Uhrstellen aktiv ist, dann ablauf
123
  if (uhrstellenaktiv == 1)
124
  {
125
    switch (aktstelle)
126
    {
127
      case 0:
128
        fleinstellen = 0;
129
        aktstelle = 1;
130
        break;
131
      case 1:
132
        if (flweiter == 1 && EinerMinuten == 9)
133
        {
134
          EinerMinuten = -1;
135
        }
136
        if (flweiter == 1 && EinerMinuten < 9)
137
        {
138
          EinerMinuten++;
139
        }
140
        if (fleinstellen == 1)
141
        {
142
          aktstelle = 2;
143
        }
144
        break;
145
      case 2:
146
        if (flweiter == 1 && ZehnerMinuten == 5)
147
        {
148
          ZehnerMinuten = -1;
149
        }
150
        if (flweiter == 1 && EinerMinuten < 5)
151
        {
152
          ZehnerMinuten++;
153
        }
154
        if (fleinstellen == 1)
155
        {
156
          aktstelle = 3;
157
        }
158
        break;
159
      case 3:
160
        if (flweiter == 1 && EinerStunden == 9 || (ZehnerStunden == 2 && EinerStunden == 4))
161
        {
162
          EinerStunden = -1;
163
        }
164
        if (flweiter == 1 && EinerStunden < 9)
165
        {
166
          EinerStunden++;
167
        }
168
        if (fleinstellen == 1)
169
        {
170
          aktstelle = 4;
171
        }
172
        break;
173
      case 4:
174
        if (flweiter == 1 && ZehnerStunden == 2)
175
        {
176
          ZehnerStunden = -1;
177
        }
178
        if (flweiter == 1 && ZehnerStunden < 2)
179
        {
180
          ZehnerStunden++;
181
        }
182
        if (fleinstellen == 1)
183
        {
184
          // nach letzter zahl wieder zurück zum anfang und alles wieder auf default
185
          aktstelle = 0;
186
          uhrstellenaktiv = 0;
187
          gestartet2 = 0;
188
          startzeit2 = 0;
189
          vergangenezeit2 = 0;
190
          zeiten_generieren();
191
        }
192
        break;
193
    }
194
  }
195

196
}
#5692936
Lesenswert?

my2ct schrieb:

> Ohne die Funktionen setup() und loop() geht beim Arduino gar nichts.

was meinst du? Es funktioniert ja eigentlich, aber wenn ich Serial.begin 
raus nehme und eben die eine Variable mit 0 initialisiere geht das 
Uhrzeit-einstellen und der Farbwechsel nicht mehr. eben beides in der 
Funktion die ich in meinem ersten Betrag rein kopiert hab. Da macht er 
dann lauter schmarrn..

Ich versteh nur irgendwie nicht wie das zusammen hängt.
#5693194
Lesenswert?

Du wirst wahrscheinlich die library für das Zeitmodul nicht haben oder? 
Ist die einzige die ich verwendet hab.
Könnt sie dir noch schicken, bin allerdings nicht mehr zuhause.

Hier gäbe es das ganze zum runter laden, da ist die dabei.
https://www.elegoo.com/tutorial/Elegoo%20The%20Most%20Complete%20Starter%20Kit%20for%20UNO%20V1.0.2018.12.24.zip

Ansonsten schick ich die einfach morgen :)

Danke für deine Hilfe schon mal :)
Gast #5693196
Lesenswert?

Wiso ist den momentan der Dauertrend Nixi/VFD Anzeigen mit blauen LEDs 
zu beleuchten? Die Röhren leuchten doch solbst schön? Abgesehen davon 
wenn eine Vakuum Röhre blau innerlich leuchtet ist diese meistens Kaputt 
und hatt nur noch ein schlechtes Vakuum...
#5693218
Lesenswert?

Ich schrieb:
> Wiso ist den momentan der Dauertrend Nixi/VFD Anzeigen mit blauen LEDs
> zu beleuchten? Die Röhren leuchten doch solbst schön? Abgesehen davon
> wenn eine Vakuum Röhre blau innerlich leuchtet ist diese meistens Kaputt
> und hatt nur noch ein schlechtes Vakuum...

Keine Ahnung... Ich hatte Platz und hab halt rgb leds drunter gemacht.
Aber stimmt schon, ohne ist es fast schöner :)
Gast #5693878
Lesenswert?

Stefan H. schrieb:
> my2ct schrieb:
>
>> Ohne die Funktionen setup() und loop() geht beim Arduino gar nichts.
>
> was meinst du? Es funktioniert ja eigentlich, aber wenn ich Serial.begin
> raus nehme und eben die eine Variable mit 0 initialisiere geht das
> Uhrzeit-einstellen und der Farbwechsel nicht mehr. eben beides in der
> Funktion die ich in meinem ersten Betrag rein kopiert hab. Da macht er
> dann lauter schmarrn..
>
> Ich versteh nur irgendwie nicht wie das zusammen hängt.

Wenn sich solche Fehler zeigen, und kein logischer Fehler erkennbar ist, 
dann würde ich als erstes untersuchen, ob sich Variablenbereich und 
Stackbereich in die Quere kommen. Wenn die sich gegenseitig 
überschreiben können, dann kann es zu den seltsamsten Fehlern kommen. 
Vom Programmabsturz bis zu unerklärlichem Verhalten.
#5694107
Lesenswert?

Monster schrieb:
>, ob sich Variablenbereich und
> Stackbereich in die Quere kommen. Wenn die sich gegenseitig
> überschreiben können, dann kann es zu den seltsamsten Fehlern kommen.
> Vom Programmabsturz bis zu unerklärlichem Verhalten.

Hm okay... Du meinst quasi heap und stack oder?
Wie geht man dem dann aus dem Weg? Bzw wie kann man erkennen ob die zwei 
kollidieren?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren