Funktion mit void ()

Hallo zusammen.
Endlich wider zeit um an einem Projekt zu arbeiten und stehe jetzt leider an.

Ich habe vier 74HC595 hintereinander Geschalten (4*8=32 Werte die gesendet werden müssen)
Das ich nicht jedes mal 1 und 0 Schreibe habe ich diese in einer Array gespeichert.
Davon habe ich 24 verschiedene daher wollte ich eine Funktion machen ANZEIGE.
Jedoch bekomme ich immer die Meldung :

exit status 1
invalid types 'int[int]' for array subscript

Kann mir jemand helfen?

void ANZEIGE (int Muster)
{
digitalWrite(storePin, LOW);

  for (int i = 0; i < 32; i++) {
    digitalWrite(shiftPin, LOW);                                        // Aktion passiert bei Wechsel von LOW auf HIGH drum jetzt zuerst LOW schalten
    digitalWrite(dataPin, Muster[i]);                                   // Jetzt den Wert der aktuellen Stelle ans Datenpin DS anlegen
    digitalWrite(shiftPin, HIGH);                                       // Dann ShiftPin SHCP von LOW auf HIGH, damit wird der Wert am Datenpin ins Register geschoben.
  }
    digitalWrite(storePin, HIGH);                                       // Wenn alle 32 Stellen im Register sind, jetzt das StorePin STCP von LOW auf HIGH, damit wird Registerinhalt
                                                                        //an Ausgabepins kopiert und der Zustand an den LEDs sichtbar
}

ist Muster nun ein int oder ein int Array ?

Offensichtlich array, musst du das auch so ( oder als int* ) deklarieren

aber warum int ?
Für digitalWrite wäre auch bool passend.

void anzeige (bool muster[])
{
digitalWrite(storePin, LOW);

  for (int i = 0; i < 32; i++) {
    digitalWrite(shiftPin, LOW);                                        // Aktion passiert bei Wechsel von LOW auf HIGH drum jetzt zuerst LOW schalten
    digitalWrite(dataPin, muster[i]);                                   // Jetzt den Wert der aktuellen Stelle ans Datenpin DS anlegen
    digitalWrite(shiftPin, HIGH);                                       // Dann ShiftPin SHCP von LOW auf HIGH, damit wird der Wert am Datenpin ins Register geschoben.
  }
    digitalWrite(storePin, HIGH);                                       // Wenn alle 32 Stellen im Register sind, jetzt das StorePin STCP von LOW auf HIGH, damit wird Registerinhalt
                                                                        //an Ausgabepins kopiert und der Zustand an den LEDs sichtbar
}

Warum glauben immer alle, daß der Fehler in den 5 Zeilen steckt, die sie zeigen.

BITTE DEN GESAMTEN SKETCH ZEIGEN. und zusätzlich falls nicht IDE Bibliotheken verwendet werden Link zu diesen Bibliotheken. Danke

Uwe

Okey

hier jetzt schon der Ganze Code vorne weg. Ist jedoch noch nicht komplet.
Also erst noch in der Entstehung.

#include "Wire.h"                   //Für das Uhren Modul -> I2C Komunikation (A5 und A4)
#define DS1307_ADDRESS 0x68         //Adesse des Uhr Modul


//Lyberys//
//------------------------------------------------------------------------------------------------------------------------------------------//





// Arduino-Pin verbunden mit SH_CP des 74HC595
int shiftPin = 0;
// Arduino-Pin verbunden mit ST_CP des 74HC595
int storePin = 1;
// Arduino-Pin verbunden mit DS des 74HC595
int dataPin = 3;

//Pinout//
//------------------------------------------------------------------------------------------------------------------------------------------//
//___________________________________________Anode zuerst anschliessen_____________Katode
//_____________________________________________ -                                     +
//------------------------ 1 -2 -3 -4 -5 -6 -7 -8 -9 -0 -1-----2 -3 -4 -5 -6----7 -8 -9 -0 -1 -2 -3 -4 -5 -6----7 -8 -9 -0 -1 -2
int ES_IST [33]         = {1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int VOR [33]            = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 1, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int NACH [33]           = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,    0, 0, 0, 0, 0,   0, 0, 0, 1, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int UHR [33]            = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
int FUENFMIN [33]       = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int ZEHNMIN [33]        = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int VIERTEL [33]        = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 1, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int ZWANZIG [33]        = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int HALB [33]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int DREIVIERTEL [33]    = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 1, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int EIN [33]            = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int EINS [33]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int ZWEI [33]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int DREI [33]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 1, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int VIER [33]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 1, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int FUENFSTUND [33]     = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int SECHS [33]          = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1, 0, 0,   0, 0, 0, 0, 0, 0};
int SIEBEN [33]         = {1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 1, 0,   0, 0, 0, 0, 0, 0};
int ACHT [33]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1, 0, 0,   0, 0, 0, 0, 0, 0};
int NEUN [33]           = {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
int ELF [33]            = {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
int ZWOELF [33]         = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 1, 0,   0, 0, 0, 0, 0, 0};
int ZEHNSTUND [33]      = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
//Definitionen der Buchstaben//
//------------------------------------------------------------------------------------------------------------------------------------------//

void setup() {
  Wire.begin();
  // Pins 0,1,3 auf Ausgabe
  pinMode(storePin, OUTPUT);
  pinMode(shiftPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
//Setup//
//------------------------------------------------------------------------------------------------------------------------------------------//

byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val / 16 * 10) + (val % 16) );
}

//__________________________________________________________________________________________________________________________________________//


void ASK_TIME() {

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

}
//Zeit Funktionen//
//------------------------------------------------------------------------------------------------------------------------------------------//

void ANZEIGE (bool Muster[])
{
digitalWrite(storePin, LOW);

  for (int i = 0; i < 32; i++) {
    digitalWrite(shiftPin, LOW);                                        // Aktion passiert bei Wechsel von LOW auf HIGH drum jetzt zuerst LOW schalten
    digitalWrite(dataPin, Muster[i]);                                   // Jetzt den Wert der aktuellen Stelle ans Datenpin DS anlegen
    digitalWrite(shiftPin, HIGH);                                       // Dann ShiftPin SHCP von LOW auf HIGH, damit wird der Wert am Datenpin ins Register geschoben.
  }
    digitalWrite(storePin, HIGH);                                       // Wenn alle 32 Stellen im Register sind, jetzt das StorePin STCP von LOW auf HIGH, damit wird Registerinhalt
                                                                        //an Ausgabepins kopiert und der Zustand an den LEDs sichtbar
}

//Anzeigen Funktion//
//------------------------------------------------------------------------------------------------------------------------------------------//











void loop () {
}

Nun musst du deine Funktion ANZEIGE (höchst ungebräuchlich, Funktionsnamen inn GROSSBUCHSTABEN)
auch aufrufen. Und dazu deine Muster passend machen:

z.B.

const bool ES_IST [32] = { ... };

int ->bool sollte deinen Platzbedarf für Globale Variable ca. halbieren

Danke viel mal für die schnelle Antworten.
Und nextes mal kommt der ganze Code gerade am Anfang.

Bei weiteren Fragen melde ich mich wider

uwe:
Warum glauben immer alle, daß der Fehler in den 5 Zeilen steckt, die sie zeigen

... Weil sie die Fehler einen nach dem andern ausbauen wollen ? :stuck_out_tongue:

Für den Fehler exit status 1 invalid types 'int[int]' for array subscript hatte benj übrigens alles geliefert.
Da kann man sogar void setup() {}   void loop() {}   weglassen :wink:

Ich bin dafür, bei Problemen alles unnötige erstmal wegzuschmeissen, bis nur noch der Fehler da ist.
Oft sieht man das Problem dann sogar selbst so deutlich, dass es sich von allein klärt.

Oder man merkt zumindest, welche Komponenten wirklich mitspielen.

Ein kompletter Fehlerdemo-Sketch (incl. Variablendefinition) ist natürlich immer sinnvoll, da hast du vollkommen Recht, Uwe.
Zu einem  #include  gehört in der Regel auch, welche library genau dahintersteckt.
Und wenn Hardware beteiligt ist, ist da auch Information Teil der erforderlichen Fehler-Beschreibung.

int ->bool sollte deinen Platzbedarf für Globale Variable ca. halbieren

ähm, vielleicht liege ich ja total falsch, aber wenn ICH so ein Muster zu senden hätte, würde ich nicht auf ein gigantischen Array mit INT oder BOOL setzen, sondern schlicht und ergreifend z.B. auf eine Zeichenkette wie:

char Muster[] = "10010101000010111011101"... und diese dann mit Muster[n] abgrasen.

Noch besser sehe ich die Variante

unsigned long Muster = 0b010110100101101001100110... welche ich dann mit bitRead(x,y) abklappern würde. Ich denke das wäre auf Dauer übersichtlicher und lesbarer?
Oder wo ist hier mein Denkfehler?

Rudi

Ja.

unsigned long Muster = 0b010110100101101001100110...

ist deutlich platzsparender.

char Muster[33] = "010110100101101001100110";

ist ein Byte mehr als

bool Muster[32];

, braucht noch die Ende-0 zusätzlich.

Vermutlich will benj ja irgendwann mal sowas wie

ANZEIGE ( ES_IST | VIERTEL_VOR | ZWÖLF );

machen. Das spräche sehr für (bzw. geht nur mit) die unsigned long Variante.

Ja, das sehe ich auch so. Und selbst wenn das gewünschte Muster ein "unsigned long" von der Anzahl der Bits her überschreiten würde, kann man immer noch die Sachen in 3 oder mehr "unsigned int" aufteilen. Spart auf diesen kleinen µC sicherlich genau DEN Platz, den man für weitere Programmteile noch evtl. brauchen könnte.

War gerade nicht online.
Ja irgenetwas in der Art will ich schlussendlich erhalten. Jedoch habe ich ja eine Matrix, also muss ich egal wie immer zwischen den einzelnen Wörter wechseln. Also ob es jetzt

ANZEIGE (ES_IST);
ANZEIGE (VIERTEL_VOR);
...

Vermutlich will benj ja irgendwann mal sowas wie
Code: [Select]

ANZEIGE ( ES_IST | VIERTEL_VOR | ZWÖLF );

machen. Das spräche sehr für (bzw. geht nur mit) die unsigned long Variante.

Leider bin ich heute erst wider späteren Abend wider Online. Melde mich aber mich aber wider.

Grüsse Benjamin

RudiDL5:
ähm, vielleicht liege ich ja total falsch, aber wenn ICH so ein Muster zu senden hätte, würde ich nicht auf ein gigantischen Array mit INT oder BOOL setzen, sondern schlicht und ergreifend z.B. auf eine Zeichenkette wie:

char Muster[] = "10010101000010111011101"... und diese dann mit Muster[n] abgrasen.

Oder man legt seine bool Arrays per PROGMEM ins Flash. Dass man Bit-Muster verordern kann ist natürlich ein gutes Argument dafür.

Um den Fehler mal deutlicher zu machen:
Wenn du ein Array übergeben willst, kann der Parameter nicht einfach nur dessen Datentyp sein. Array-Variablen sind Zeiger auf das erste Element. Deshalb kann man bei einem int Array einen int* als Parameter nehmen (Zeiger auf int). Oder bei bool nimmt man bool*.

Hallo habe mich heute wider tatkräftig beschäftigt ::slight_smile:

Stehe aber ein wenig an ;D :blush: hc
Ich habe wie unten im Code die Buchstaben definiert (also welcher Pin von denn 4* 74hc595 (Datenblatt) wen Eingestellt werden müssen). Diese habe ich in const bool Array gespeichert. Wiso? weil ich den code besser verstehe :confused:

Jetzt lese ich die Zeit von dem Uhrenmodul (Tiny RTC I2C AT24C32 DS1307)

Jetzt habe ich die Funktion TimeToWord gemacht, und wollte eigentlich der Variabel Muster übergeben. Geht aber nicht. :slightly_smiling_face: :astonished:

Das spräche sehr für (bzw. geht nur mit) die unsigned long Variante.

Also das Problem das ich in diesem Post bearbeiten will ist, wen die Uhrzeit hour =1 dann Muster = EINS
ect.....

void TimeToWord ()
{
    ASK_TIME ();
    if(hour == 1 && minute == 0)
    { Muster = EIN;                               //=> hier Reklamiert das Programm
      }

}
#include "Wire.h"                   //Für das Uhren Modul -> I2C Komunikation (A5 und A4)
#define DS1307_ADDRESS 0x68         //Adesse des Uhr Modul


//Lyberys//
//------------------------------------------------------------------------------------------------------------------------------------------//





// Arduino-Pin verbunden mit SH_CP des 74HC595
int shiftPin = 0;
// Arduino-Pin verbunden mit ST_CP des 74HC595
int storePin = 1;
// Arduino-Pin verbunden mit DS des 74HC595
int dataPin = 3;

int second;
int minute;
int hour;
int weekDay;
int monthDay;
int month;
int year;

//Pinout//
//------------------------------------------------------------------------------------------------------------------------------------------//
//___________________________________________Anode zuerst anschliessen_____________Katode
//_____________________________________________ -                                     +
//------------------------------- 1 -2 -3 -4 -5 -6 -7 -8 -9 -0 -1-----2 -3 -4 -5 -6----7 -8 -9 -0 -1 -2 -3 -4 -5 -6----7 -8 -9 -0 -1 -2
const bool ES_IST [32]         = {1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool VOR [32]            = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 1, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool NACH [32]           = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,    0, 0, 0, 0, 0,   0, 0, 0, 1, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool UHR [32]            = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
const bool FUENFMIN [32]       = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   1, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool ZEHNMIN [32]        = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool VIERTEL [32]        = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 1, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool ZWANZIG [32]        = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool HALB [32]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool DREIVIERTEL [32]    = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 1, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool EIN [32]            = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool EINS [32]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool ZWEI [32]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 1, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool DREI [32]           = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 1, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool VIER [32]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 1, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool FUENFSTUND [32]     = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool SECHS [32]          = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1, 0, 0,   0, 0, 0, 0, 0, 0};
const bool SIEBEN [32]         = {1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 1, 0,   0, 0, 0, 0, 0, 0};
const bool ACHT [32]           = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1, 0, 0,   0, 0, 0, 0, 0, 0};
const bool NEUN [32]           = {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
const bool ELF [32]            = {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 1, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0};
const bool ZWOELF [32]         = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 1, 0,   0, 0, 0, 0, 0, 0};
const bool ZEHNSTUND [32]      = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0};
//Definitionen der Buchstaben//
//------------------------------------------------------------------------------------------------------------------------------------------//

void setup() {
  Wire.begin();
  // Pins 0,1,3 auf Ausgabe
  pinMode(storePin, OUTPUT);
  pinMode(shiftPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
//Setup//
//------------------------------------------------------------------------------------------------------------------------------------------//

byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val / 16 * 10) + (val % 16) );
}

//__________________________________________________________________________________________________________________________________________//


void ASK_TIME() {

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);

  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

   second = bcdToDec(Wire.read());
   minute = bcdToDec(Wire.read());
   hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
   weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
   monthDay = bcdToDec(Wire.read());
   month = bcdToDec(Wire.read());
   year = bcdToDec(Wire.read());

}
//Zeit Funktionen//
//------------------------------------------------------------------------------------------------------------------------------------------//


void TimeToWord ()
{
    ASK_TIME ();
    if(hour == 1 && minute == 0)
    { Muster = EIN;
      }

}




//------------------------------------------------------------------------------------------------------------------------------------------//

void ANZEIGE (bool Muster[])
{
  
digitalWrite(storePin, LOW);

  for (int i = 0; i < 32; i++) {
    digitalWrite(shiftPin, LOW);                                        // Aktion passiert bei Wechsel von LOW auf HIGH drum jetzt zuerst LOW schalten
    digitalWrite(dataPin, Muster[i]);                                   // Jetzt den Wert der aktuellen Stelle ans Datenpin DS anlegen
    digitalWrite(shiftPin, HIGH);                                       // Dann ShiftPin SHCP von LOW auf HIGH, damit wird der Wert am Datenpin ins Register geschoben.
  }
    digitalWrite(storePin, HIGH);                                       // Wenn alle 32 Stellen im Register sind, jetzt das StorePin STCP von LOW auf HIGH, damit wird Registerinhalt
                                                                        //an Ausgabepins kopiert und der Zustand an den LEDs sichtbar
}

//Anzeigen Funktion//
//------------------------------------------------------------------------------------------------------------------------------------------//

und die Fehler Meldung

Firmware-Selbst:104: error: 'Muster' was not declared in this scope

{ Muster = EIN;

^

exit status 1
'Muster' was not declared in this scope

Wie mus ich Muster definieren (also auserhalb der Funktion ist mir schon klar :grin: ) das es so funktionieren kann?
Und wie würdet Ihr das machen?

unsigned long Muster = 0b010110100101101001100110... Noch fast nie gebraucht und noch weniger verstanden :o

Gruess und Vielen Dank an alle die sich die Zeit nehmen das zu lesen.
Benjamin

Muster = EIN; //=> hier Reklamiert das Programm

'Muster' was not declared in this scope

Wenn EIN so definiert ist

const bool EIN [32] = { ... };

dann soll Muster also durch deine Anweisung auf das gleiche Array zeigen. Damit musst du es als

const bool * Muster;

definieren.

Und kannst es mit

 Anzeige(Muster);

ausgeben.

Übrigens, wenn du
const bool EIN[32] = ... ;
definiert hast, musst du auch

void Anzeige( [b]const[/b] bool Muster[] ) {

schreiben.

Genausogut geht auch

void Anzeige( [b]const[/b] bool * Muster ) {

Eine eindeutige Antwort zur Lösung deines Problems kann ich dir nicht geben - auf Grund mangelnder Informationen wie das Modul etc. angesprochen wird. Jedoch "vielleicht" für das Verständnis von "Muster":

Irgendwo oben steht:

for( int i = 0; i < 32; i++ ) 
   {
     digitalWrite(shiftPin, LOW);   
     digitalWrite(dataPin, Muster[i]);
     digitalWrite(shiftPin, HIGH);      
   }

Hierbei geht alles davon aus, dass "Muster" ein großes Byte-Array ist. Auch wenn "bool" geschrieben wird, steht je Wert ein ganzes Byte drin. Entweder 0x01 oder 0x00 (In der vorherigen Fassung war jedes einzelne Bit sogar in einem "unsigned long" hinterlegt).

Dein fettes Array "bool muster[] = { 0, 0, 0, 0, 1, 1, 1, 1 ... 1, 1, 1, 1, 0, 0, 0, 0 }; kann man viel kürzer darstellen mit z.B. (Binär-Format)

unsigned long muster = 0b00001111000011111111000000111100;

Alternativ im Hex-Format:

unsigned long muster = 0x0F0FF03C;

Und nun kann man diese einzelne Variable (ähnlich wie oben) senden:

for( int i = 0; i < 32; i++ ) 
   {
     digitalWrite( shiftPin, LOW );   
     digitalWrite( dataPin, bitRead( muster, i ) );
     digitalWrite( shiftPin, HIGH );      
   }

Es sind halt die Basics fürs Dualsystem, welches man für den µC immer wieder braucht. Die solltest du mal näher untersuchen: