Array - Anfänger

Hallo Zusammen,

ich weiß, dass ist normale einfach aber irgendwie kapier ich das nicht. :wink:
ich möchte ein Array schreiben um das an dem Shift Ausgang 74HC595 zu senden.

ausgeschrieben funktioniert das auch aber nicht wenn ich das in ein Array schreiben möchte.

Kann mir da jemand einen Tipp geben?

void RTC()
{ 
UhrzeitStunde = rtc.getHour();
UhrzeitMinute = rtc.getMinute();
/*/
if (UhrzeitStunde == 17) {   LEDOut(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); }
if (UhrzeitStunde == 18) {   LEDOut(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0); }
if (UhrzeitStunde == 19) {   LEDOut(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0); }
if (UhrzeitStunde == 20) {   LEDOut(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0); }
/*/

if (UhrzeitStunde == 20) {   (binOutput[16] = 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0);
/*/
binOutput[0] = 0; 
binOutput[1] = 0;
binOutput[2] = 0;  
binOutput[3] = 1;  
binOutput[4] = 0;  
binOutput[5] = 0;  
binOutput[6] = 0;  
binOutput[7] = 0; 
binOutput[8] = 0; 
binOutput[9] = 0; 
binOutput[10] = 0; 
binOutput[11] = 0; 
binOutput[12] = 0; 
binOutput[13] = 0; 
binOutput[14] = 0; 
binOutput[15] = 0;
/*/
LEDOut(); }

}

also binOutput[0 -16] ausgeschrieben funktioniert das.

aber oben mit binOutput[16] = 0,......0 geht das nicht.

Wo mach ich denn da den Fehler?

Danke

Wo mach ich denn da den Fehler?

Du könntest ein lokales Array erzeugen, und per memcpy() in das globale kopieren.
Alternativ: Deiner Ausgabe Routine einen Zeiger auf das lokale Array übergeben.

{ ( binOutput[16] = 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 ); }

Ich wette, du willst das nicht.
Auch wenn ich nicht weiss, was binOutput ist, bin ich relativ sicher, dass du da eine 0 in fremden Speicher schreibst. Ausserdem macht das sonst nichts, und dir viel Mühe umsonst.

Alternativ: Deiner Ausgabe Routine einen Zeiger auf das ... Array übergeben.

oder so ( den richtigen Ausschnitt auf ein größeres Array ) :

byte binOutPut[20] = {0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; // mit Reserve-Platz für 4 Stunden 

void output() {
...
   if (17 <= UhrzeitStunde && UhrzeitStunde >= 20) 
   LEDOut(binOutPut + (20 - UhrzeitStunde)); 20 = ab Anfang ... 17 = ab binOutPut+3 = {1, 0, 0, 0 ...}
}

void LEDOut(byte data[16]) {
  // Writes to Pins 4 .. 19
  const byte FIRSTLED= 4;
  for (byte i = 0; i < 16; i++) {
    digitalWrite( FIRSTLED+i, data[i]);  
  }
}

Die eigentliche Antwort beim Thema "Array - Anfänger" ist übrigens meist: Du brauchst vermutlich kein Array. Was ist dein Ziel ? :wink: