Steven45141:
Jetzt habe ich allerdings das Problem, dass ich die Programmiersprache überhaupt nicht beherrsche.
a) du sollst nicht schreiben was du nicht kannst, sondern beschreiben was du kannst.
b) weiters sollst du eine Quelle angeben, woher du den Sketch hast den du verändert hast
c) sollst du im Forum suchen, da findest du bereits ähnliches.
d) habe ich was ausprobiert und das hänge ich drann
e) wenn du eine Zeile nicht verstehst sollst du fragen
// Lauflicht in zwei Richtungen http://forum.arduino.cc/index.php?topic=558863.0
// Ähnlich dem Muster von http://forum.arduino.cc/index.php?topic=518131.0
// Beigesteuert von noiasca.
// Version 2018-07-19
/* ***************************
* Configuration/Konfiguraton
* ************************* */
// 5432109876543210 // das Muster, einfach als Bitfolge in einem 2-Byte dann kann man es einfach in der IDE "hinmalen"
const uint16_t pattern[] = {0b0000100000000001, // Led 0 und 11 sollen leuchten
0b0000010000000010,
0b0000001000000100,
0b0000000100001000,
0b0000000010010000,
0b0000000001100000,
0b0000000010010000,
0b0000000100001000,
0b0000001000000100,
0b0000010000000010
};
const uint8_t ledPin[] = {13, 12, 2, 11, 3, 10, 4, 9, 5, 8, 6, 7}; // maximal 16 Pins - vorsicht der erster PIN ist Index 0 - und das ist im Bit-Muster/Pattern die letzte Stelle!!!
//const uint8_t ledPin[] = {2,3,4,5,6,7,8,9,10,11,12,13}; // maximal 16 Pins! - auf meinem Board
const uint16_t myIntervall = 300; // Hinweis: falls weniger als 254ms gewünscht sind, kann man auch auf uint8_t umstellen
#define DEBUG_UART 1 // Debugausgaben auf Serieller Schnittstelle falls man keine LEDs hat: 0 nein / 1 ja
/* ***************************
* Globals / Variablen für den Sketch
* ************************* */
uint32_t lastMillis = 0; // wann wurde das letzte mal ein Update der LEDs gemacht
uint16_t totalNoPattern = 0; // soviele Pattern gehen zwar nie auf einen UNO, aber mehr als uint8_t könnten es schon werden. man könnte ein paar Byte sparen wenn man ein fixes precompiler #define oder ein const macht.
uint8_t actualPattern = 0; // welches Muster soll aktuell ausgegeben werden
uint8_t totalNoPins = 0; // Anzahl der Leds wird einmal zur Laufzeit ermittelt
/* ***************************
* Setup
* ************************* */
void setup() {
#if DEBUG_UART
Serial.begin(115200);
Serial.println(F("\nLED Lauflicht in 2 Richtungen"));
#endif
totalNoPattern = sizeof(pattern) / sizeof(pattern[0]); // Ermittlung wie viele Pattern definiert wurden, ich mach das zur Laufzeit, weil ich mir das abzählen sparen wollte.
totalNoPins = sizeof(ledPin) / sizeof(ledPin[0]); // Ermittlung wie viele Pins definiert wurden um die Konfiguration zu vereinfachen
for (uint8_t i = 1; i < totalNoPins; i++) {
pinMode(ledPin[i], OUTPUT);
}
}
/* ***************************
* Main - Loop
* ************************* */
void loop() {
if (millis() - lastMillis >= myIntervall)
{
actualPattern++;
if (actualPattern >= totalNoPattern) actualPattern = 0;
for (uint8_t i = 0; i < totalNoPins; i++) // von der Vorgabe her reichen die 10 - werden alle 16 Leds benötigt müsste man auch im setup() mehr initialisieren
{
if (pattern[actualPattern] & (1 << i)) {
#if DEBUG_UART
Serial.print(F("X"));
#endif
digitalWrite(ledPin[i], HIGH);
}
else {
#if DEBUG_UART
Serial.print(F(" "));
#endif
digitalWrite(ledPin[i], LOW);
}
}
#if DEBUG_UART
Serial.print(F(" - "));
Serial.println(actualPattern);
#endif
lastMillis = millis();
}
// do what ever you want to do unblocked here
}