INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Treppenlauflicht
06.12.2020, 13:28 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2020 19:11 von Strohhut.)
Beitrag #1
Treppenlauflicht
Moin Leute,
ich habe mich an einer Treppenbeleuchtung mit Schieberegistern versucht. Leider kommt es hin und wieder immer dazu, dass der Arduino abstürzt und im Code hängen bleibt. Entweder bleiben dann ein paar Stufen an oder sie laufen immer wieder von oben und unten durch.
Aufbau sind 2 Bewegungsmelder, ein geschalteter 12V Trafo, Relais-Karte, 2 Schieberegister, 5V Trafo und Ledstripes.

Code:
int sh = 9;
  int st = 8;
  int ds = 7;
  int daten [] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
  int muster [] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  int Gang = 250;
  int Dauer = 24000;
  int laufzeit = 200;
  int oben = 5;
  int unten = 6;
  int statusoben = 0;
  int statusunten = 0;
  int Licht = 4;
  int raster[16][16] = {{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

#include "oben.h"
#include "unten.h"






  
void setup()
{
pinMode(sh, OUTPUT);
pinMode(st, OUTPUT);
pinMode(ds, OUTPUT);
pinMode(oben, INPUT);
pinMode(unten, INPUT);
pinMode(Licht, OUTPUT);
  

}

void loop()
{
statusoben=digitalRead(oben);
if(statusoben ==1)
{runter();

}
delay(20);
statusunten=digitalRead(unten);
if(statusunten ==1)
{hoch();
  
}
}


Code:
void runter() {

     digitalWrite(sh,0);
     digitalWrite(st,0);
     digitalWrite(ds,0);
    
  
   for (int i=0;i<=15;i++)
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, muster[i]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
       }
  
  digitalWrite(Licht, 1);

  digitalWrite(sh,0);
  digitalWrite(st,0);
  digitalWrite(ds,0);
  
    
   for (int a=0;a<=15;a++)
       {
        digitalWrite(st, 0);
    
      for (int b=0;b<=15;b++)
            {
           digitalWrite(ds,0);
             digitalWrite(sh,0);
        
             digitalWrite(ds, raster[a][b]);
             digitalWrite(sh,1);
            }
         digitalWrite(st,1);
         delay(Gang);
         }
  
  
  delay(Dauer);

      for (int i=0;i<=15;i++)
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, muster[i]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
         digitalWrite(st,0);
       }
  

   digitalWrite(Licht,0);
   }

Code:
void hoch() {
  
     digitalWrite(sh,0);
     digitalWrite(st,0);
     digitalWrite(ds,0);

      
   for (int i=0;i<=15;i++)
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, muster[i]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
       }

  
     digitalWrite(Licht, 1);

      for (int i=0;i<=15;i++)
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, daten[i]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
       }

    delay(Dauer);

      for (int i=0;i<=15;i++)
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, muster[i]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
         digitalWrite(st,0);
       }
  

     digitalWrite(Licht,0);
  }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2020, 13:39
Beitrag #2
RE: Treppenlauflicht
Leider ist dein Sketch nicht zu lesen.
Setze den bitte in Code-Tags, wie das geht stehthier.
Dann wird dieser für alle besser lesbar auch auf mobilen Geräten.

Und was ist ein geschalteter Trafo ?
Zudem reicht ein Trafo nicht aus, du brauchst auch einen Gleichrichter und Spannungsregler oder nimmst gleich ein geeignetes Netzteil.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2020, 15:06
Beitrag #3
RE: Treppenlauflicht
Jetzt zu deinem schwer lesbaren Sketch.
Da du keine Kommentare einfügst, fällt es externen auch schwer den Sketch zu verstehen und du kannst den in 3 Wochen evtl. auch nicht mehr überblicken.
Um deinen Fehler zu finden, solltest du ein paar serielle Ausgaben auf den seriellen Monitor einbinden. Dann siehst du wie weit dein Sketch rennt.

Und mit den Kommentaren haben wir evtl. auch noch Tipps.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2020, 19:15
Beitrag #4
RE: Treppenlauflicht
Also der geschalte Trafo ist eigentlich ein 12V DC Netzteil. Dieses wird vom Arduino über ein relais geschaltet.
Der 5V Trafo ist ebenfalls ein 5V DC Netzteil.
Ich habe meinen Beitrag angepasst. Sollte so besser zu lesen sein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2020, 22:09
Beitrag #5
RE: Treppenlauflicht
Leider ist dein Sketch immer noch ohne Kommentare. Hinzu kommen die Variablennamen, die nichts aussagen.
Wie soll man da was verstehen bzw. nachvollziehen ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 17:47
Beitrag #6
RE: Treppenlauflicht
so einmal der Code in schöner mit Kommentaren
Hauptcode
Code:
int sh = 9;
  int st = 8;                                                                   /*Belegung für Schieberegister*/
  int ds = 7;
  int an [] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};                                /*Muster für alle Stufen an*/
  int aus [] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};                               /*Muster für alle Stufen aus*/
  int Gang = 250;                                                               /*Zeit zwischen zwei Stufen*/
  int Dauer = 24000;                                                            /*Dauer bis zum Abschalten*/
  int Abfrage = 50;                                                             /*Abfragezeit zwischen den Bewegungsmeldern*/
  int oben = 5;                                                                 /*Bewegungsmelder Oben*/
  int unten = 6;                                                                /*Bewegungsmelder Unten*/
  int statusoben = 0;                                                           /*Statie für die Schalterabfrage*/
  int statusunten = 0;
  int Licht = 4;                                                                /*Relais für 12V Netzteil LED-Streifen*/
  int anr[16][16]    = {{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},                      /*Muster für alle Stufen an Rückwärts*/
                        {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
                        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

#include "oben.h"
#include "unten.h"






  
void setup()
{
pinMode(sh, OUTPUT);
pinMode(st, OUTPUT);
pinMode(ds, OUTPUT);
pinMode(oben, INPUT);
pinMode(unten, INPUT);
pinMode(Licht, OUTPUT);
  

}

void loop()
{
statusoben=digitalRead(oben);
if(statusoben ==1)
{runter();
                                                                                      /*Abfrage Bewegungsmelder*/
}
delay(Abfrage);
statusunten=digitalRead(unten);
if(statusunten ==1)
{hoch();
  
}
}

Header 1
Code:
void runter() {

     digitalWrite(sh,0);
     digitalWrite(st,0);
     digitalWrite(ds,0);                                                      /*Zur Sicherheit*/
    
  
   for (int stufe=0;stufe=16;stufe++)
       { digitalWrite(sh,0);                                                 /*Vermeidung von Fehlerstufen*/
         digitalWrite(st,0);
         digitalWrite(ds, aus[stufe]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
       }
  
  digitalWrite(Licht, 1);                                                    /*Einschalten des Lichtnetzteil*/

    
   for (int stufe=0;stufe=16;stufe++)                                        /*Stufeneinschalten von Oben nach Unten*/
       {
        digitalWrite(st, 0);
    
      for (int lampen=0;lampen=16;lampen++)
            {
           digitalWrite(ds,0);
             digitalWrite(sh,0);
        
             digitalWrite(ds, anr[stufe][lampen]);
             digitalWrite(sh,1);
            }
         digitalWrite(st,1);
         delay(Gang);
         }
  
  
  delay(Dauer);                                                             /*Anbleib Dauer*/

      for (int stufe=0;stufe=16;stufe++)                                    /*Stufen auschalten von Unten nach Oben*/
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, aus[stufe]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
         digitalWrite(st,0);
       }
  

   digitalWrite(Licht,0);                                                    /*Abschalten des Lichtnetzteil*/
   }

Header 2
Code:
void hoch() {
  
     digitalWrite(sh,0);
     digitalWrite(st,0);                                       /*Zur Sicherheit*/
     digitalWrite(ds,0);

      
   for (int stufe=0;stufe=16;stufe++)                         /*Vermeidung von Fehlerstufen*/
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, aus[stufe]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
       }

  
     digitalWrite(Licht, 1);                                  /*Einschalten des Lichtnetzteil*/

      for (int stufe=0;stufe=16;stufe++)                      /*Stufeneinschalten von Unten nach Oben*/
       { digitalWrite(sh,0);
         digitalWrite(st,0);
         digitalWrite(ds, an[stufe]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
       }

    delay(Dauer);                                              /*Anbleib Dauer*/

      for (int stufe=0;stufe=16;stufe++)                       /*Stufen auschalten von Unten nach Oben*/
       { digitalWrite(sh,0);
         digitalWrite(st,0);      
         digitalWrite(ds, aus[stufe]);
         digitalWrite(sh,1);
         digitalWrite(sh,0);
         digitalWrite(st,1);
         delay(Gang);
         digitalWrite(st,0);
       }
  

     digitalWrite(Licht,0);                                      /*Abschalten des Lichtnetzteil*/
  }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 17:55 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2020 17:56 von Tommy56.)
Beitrag #7
RE: Treppenlauflicht
Ich sehe in dem Sketch aber immer noch keine seriellen Ausgaben, dafür viele unnötige Leerzeilen.

Headerdateien haben einen anderen Sinn, als das, was Du machst. Das ist besser in .ino-Dateien aufgehoben. Dazu gibt es neben Deinem gerade einen Thread.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2020, 17:16
Beitrag #8
RE: Treppenlauflicht
Sind zu viele Leerzeichen den schlimm.
Das mit dem anderen Datei-Typ stehe ich mal
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste