2 Sketches zusammenfügen

Hallo meine lieben ich habe eine Frage wie kann ich 2 Sketches zusammenfügen ich habe einmal ein 7 Effekt lauflicht und möchte das normale blink noch hinzufügen auf einem anderen Pin wie bekomm ich das hin?

das ist der scetch den ich hab:

#define t 50
#define t1 20
#define t2 300
#define t3 100

void setup() {
// set up pins 2 to 13 as outputs
for (int i = 4; i <= 13; i++) {
pinMode(i, OUTPUT);
}
}
/////////////////////////////////////////////////////////////////////////////////Effect 1
void loop(){

effect_1();
effect_1();

effect_2();
effect_2();

effect_3();
effect_3();

effect_4();
effect_4();

effect_5();
effect_5();

effect_6();
effect_6();

effect_7();
effect_7();
}
//left to right and right to left
void effect_1()
{
for(int i=4; i<14; i++){
digitalWrite(i, HIGH);
delay(t1);
digitalWrite(i+1, HIGH);
delay(t1);
digitalWrite(i+2, HIGH);
delay(t1);
digitalWrite(i, LOW);
delay(t1);
digitalWrite(i+1, LOW);
delay(t1);
}
for(int i=13; i>4; i--){
digitalWrite(i, HIGH);
delay(t1);
digitalWrite(i-1, HIGH);
delay(t1);
digitalWrite(i-2, HIGH);
delay(t1);
digitalWrite(i, LOW);
delay(t1);
digitalWrite(i-1, LOW);
delay(t1);
}
}
/////////////////////////////////////////////////////////////////////////////////Effect 2
void effect_2()
{
int count = 13; // keeps track of second LED movement

// move first LED from left to right and second from right to left
for (int i = 4; i < 13; i++) {
clear();
digitalWrite(i, HIGH); // chaser 1
digitalWrite(count, HIGH); // chaser 2
count--;
// stop LEDs from appearing to stand still in the middle
if (count != 7) {
delay(t2);
}
}

// move first LED from right to left and second LED from left to right
for (int i = 13; i > 4; i--) {
clear();
digitalWrite(i, HIGH); // chaser 1
digitalWrite(count, HIGH); // chaser 2
count++;
// stop LEDs from appearing to stand still in the middle
if (count != 8) {
delay(t2);
}
}
}

////////////////////////////////////////////////////////////////////////////////Effect 3

void effect_3()
{
for(int i=4; i<14; i++){
digitalWrite(i, HIGH);
delay(t3);
}
for(int i=4; i<14; i++){
digitalWrite(i, LOW);
delay(t3);
}

for(int i = 14; i>=4; i--){
digitalWrite(i, HIGH);
delay(t3);
}
for(int i = 14; i>=4; i--){
digitalWrite(i, LOW);
delay(t3);
}
}
///////////////////////////////////////////////////////////////////////////Effect 4
void effect_4()
{
for(int j = 4; j <= 13; j++){
digitalWrite(j, HIGH);
delay(t2);
j=j+1;
}
for(int j = 4; j <= 13; j++){
digitalWrite(j, LOW);
delay(t2);
}

for(int k = 15; k > 4; k--){
digitalWrite(k, HIGH);
delay(t2);
k=k-1;
}
for(int k = 15; k > 4; k--){
digitalWrite(k, LOW);
delay(t2);
}
}
//////////////////////////////////////////////////////////////////////////////Effect 5
void effect_5()
{
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin, HIGH);
delay(t1);
digitalWrite(pin+1, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+1, HIGH);
delay(t1);
digitalWrite(pin+2, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+2, HIGH);
delay(t1);
digitalWrite(pin+3, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+3, HIGH);
delay(t1);
digitalWrite(pin+4, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+4, HIGH);
delay(t1);
digitalWrite(pin+5, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+5, HIGH);
delay(t1);
digitalWrite(pin+6, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+6, HIGH);
delay(t1);
digitalWrite(pin+7, LOW);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin+7, HIGH);
delay(t1);
digitalWrite(pin+8, LOW);
delay(t1);
}
for(int pin = 9; pin >= 4; pin--)
{
digitalWrite(pin+8, HIGH);
delay(t1);
digitalWrite(pin+9, LOW);
delay(t1);
}
for(int pin = 9; pin >= 4; pin--)
{
digitalWrite(pin+9, HIGH);
delay(t1);
digitalWrite(pin+10, LOW);
delay(t1);
}
for(int pin = 9; pin >= 4; pin--)
{
digitalWrite(pin+10, HIGH);
delay(t1);
digitalWrite(pin+11, LOW);
delay(t1);
}
for(int pin = 14; pin >= 4; pin--)
{
digitalWrite(pin+11, HIGH);
delay(t1);
}
for(int pin = 13; pin >= 4; pin--)
{
digitalWrite(pin, LOW);
delay(t1);
}
}
/////////////////////////////////////////////////////////////////////////////Effect 6
void effect_6()
{
for(int j=4; j<14; j++){
digitalWrite(j, LOW);
delay(t);
digitalWrite(j, HIGH);
delay(t);
digitalWrite(j-2, LOW);
delay(t);
digitalWrite(j, HIGH);
}
for(int k = 15; k>4; k--){
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k+2, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for(int k = 4; k<14; k++){
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k-2, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for(int k = 15; k>4; k--){
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k+4, LOW);
delay(t);
digitalWrite(k, HIGH);
}
for(int k = 4; k<14; k++){
digitalWrite(k, LOW);
delay(t);
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k-4, LOW);
delay(t);
digitalWrite(k, HIGH);
}
}
///////////////////////////////////////////////////////////////////////////////////Effect 7
void effect_7()
{
for(int j=4; j<14; j++){
digitalWrite(j, HIGH);
delay(t);
digitalWrite(j+2, LOW);
delay(t);
}
for(int k = 15; k>4; k--){
digitalWrite(k, HIGH);
delay(t);
digitalWrite(k+2, LOW);
delay(t);
}
}

// function to switch all LEDs off
void clear(void)
{
for (int i = 4; i <= 13; i++) {
digitalWrite(i, LOW);
}
}

und den möchte ich hinzufügen :

void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(53, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(53, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(53, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

Welche Sketche ?
Ich sehe keine.

Hallo
ich habe eine Datei mit einer Lösung angehängt.
05202021_merge_sketches-210630a.zip (3.1 KB)

  1. Feststellen das keine Resourcenkonflikte vorhanden sind (Doppelt belegte Pins, I2C, SPI, Timer, globale Variablen, ...)
  2. Die beiden loop() auf non-blocking umstellen (Siehe Blink without Delay)
  3. Die beiden loop() in loop1() und loop2() umbenennen
  4. setup() zusammenkopieren
  5. Neues loop():
void loop(){
  loop1();
  loop2();
}

Im Detail mag es Unterschiede geben die es unmöglich machen...

ich habe sie hinzugefügt

Damit das zusammenfügen überhaupt richtig funktioniert, musst du zuvor sämtliche delays entfernen. Dazu setzt du die Funktion millis(), ein und sieh dir dazu BlinkWithoutDelay an.

Hallo
was für einen Arduino hast du im Einsatz?

einen arduino mega

könntest du mir vlt das programm zusammenfügen lg dominik

Hallo,
ich habe mir das mal schnell angeschaut.
Du brauchst keine Sketches zusammenfügen.
Das Blinkprogramm wird im Hauptprogramm durch:

 digitalWrite(53, (millis() / 500) % 2);

mit der Initialisierung

 pinMode (53, OUTPUT);

im setup, ersetzt und ausgeführt.

wie muss ich denn das jetzt einfügen gnau

am Ende der loop.

könntest du es mir villeicht schnell einfügen weil bei mir geht es nicht so , wäre echt nett

Hallo,
Sorry das wird nix werden,

in der effect_1 zähle ich 5 delay(t1) hintereinander t1=20ms macht 100ms das in einer For.. schleife die 10 mal durchlaufen wird. macht 1 s . Dann noch mal rückwärts das Gleiche mach noch mal 1 s . Laufzeit von effect_1 damit 2s . Die zusätzliche LED kann also nicht mit 1000ms blinken.

zumindest die for schleifen müssen raus , aber richtiger ist zusätzlich die delay() durch millis() zu ersetzen.

Ansatz jeden effect in eine nicht blockierende Funktion umbauen und den Gesamtablauf in einer Schrittkette organisieren.
Heinz

könntest du mir dabe helfen oder beziungsweise es für mich zusammenfügen weil ich tuh mich da schwer
lg dominik

Der Weg ist das Ziel.
Ich wünsche einen schönen Tag.

also ich habe es jetzt mal probiert aber es läuft garnichts und ich weiß langsam nicht mehr weiter

Das blöde Forumteil löscht schon wieder m,einen Quote! :frowning:

Dann will ich mal helfen.
Aber dazu musst Du auch schon ein wenig mitmachen.
Erstens: Die Code da oben in Deinem Ausgangspost in Codetags packen.
Also editieren den Post und markierst den Code und drückst dann auf den </> button

Und dann erklär doch ml, was DU willst.
Der Kommentar passt nicht zum Code!

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(53, OUTPUT);

DAS ist nämlich etwas ganz anderes.

wie meinst du denn das genau tut mir leid das ich so viel frage aber ich habe erst gestern angefangen und der 7 effect code ist aus dem netz daher verstehe ich noch nicht so viel

lg dominik

Hallo,
was ist denn jetzt erst mal Dein Problem. Aus zwei Sketchen einen machen ? Da kannst Du erst mal das machen was paulpaulson vorgeschlagen hat. Allerdings wird das dann sehr unregelmässig blinken.
Deine Effekte sind da ziemlich komplex. Ich würde Dir da erst mal den Vorschlag machen Du beschäftigst dich mit millis() und wie man damit zeitliche Abläufe erstellt. Arrays wäre dann der nächste Schritt. Wenn Du dann erst mal versuchst ein Lauflicht mit jeweils nur einer LED über Deine 10 LED´s zu machen hast Du schon mal das Grundsätzliche verstanden. paulpauson hat schon recht hier ist der Weg das Ziel.
Heinz