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
Lichtsteuerung für Modellbahn
15.04.2016, 16:40 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2016 17:11 von Markus0815.)
Beitrag #9
RE: Lichtsteuerung für Modellbahn
Ich habe das ganze noch einmal umgeschrieben, ohne millis(), ich denke das macht dabei auch keinen Sinn. Besten Dank für Eure Hilfe, ich denke ich habe viel gelernt. Sobald ich mir eine Photodiode habe hoffe ich das ganze damit zu steuern.

Hier der Sketch und korrigiert mich bitte falls es noch zu wild ist.

Besten Dank!

int i=0;

void setup(){
pinMode(A0, INPUT);
digitalWrite(A0,HIGH);
}

void ports_low() //Ausgänge auf LOW legen
{
for ( int i = 0; i<13; i++ )
digitalWrite(i, LOW);
}

void led_sub() //Ausgänge 3-12 zufällig an bzw ausschalten
{
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(random(3,13), HIGH);
delay (100);
digitalWrite(random(3,13), LOW);
delay (random(0,50) * 60);
}


void loop()
{
if (digitalRead(A0) == LOW)
led_sub();
else ports_low();
}

Den Rat mit Port 0 und 1 habe ich schon befolgt und abgeändert. Danke dafür.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2016, 16:51
Beitrag #10
RE: Lichtsteuerung für Modellbahn
Hallo!

Also in deinem Sketch sind ein paar Fehler Dodgy
Aber wenigstens versucht du einmal selbst etwas auszuprobieren. Hier nochmal mein zusätzlicher Input zu den Vorschlägen der anderen:

Code:
void setup(){
    int i=0;
    int zaehler=0;
    int ausgang=0;
    int pin=0;
    int zeit=0;

    for (int i = 0; i<=13; i++); //Ausgänge definieren
    {
        pinMode(i, OUTPUT);
    }
}
Variablen intialisieren macht man immer auserhalb des Setups, damit diese auch wirklich global sind und nicht nur im Setup verwendet werden können. In der Zeile in der die Ausgänge definiert werden, darf kein ";" verwendet werden und "{" kommt direkt nach ")". Sei dir bewusst, dass die LEDs mit dieser for Schleife nur an pin 0-12 verwendet werden können (für pin 13 brauchst du ein "<="). Pin 0 & 1 sind sowieso mit RX, TX besetzt, d.h. lieber nicht als Output initialisieren. So schauts danach aus:
Code:
int i=0;
int zaehler=0;
int ausgang=0;
int pin=0;
int zeit=0;

void setup(){
    for (int i = 2; i<13; i++) //Ausgänge definieren
    {
        pinMode(i, OUTPUT);
    }
}


Kommen wir zur Funktion die alle LEDs auf LOW setzt:
Code:
void ports_low() //Ausgänge auf LOW legen
{
    int i=0;
    for ( int i = 0; i<13; i++ );
    digitalWrite(i, LOW);
}
Die For-Schleife ist bei deinem Code völlig überflüssig, weil kein Inhalt damit ausgeführt wird (siehe oben, ";" endet die for Schleife). Die Initialisierung "int i=0" ist ebenfalls überflüssig. Diese Funktion sollte so ausschauen:
Code:
void ports_low() //Ausgänge auf LOW legen
{
    for ( int i = 2; i<=13; i++ ) digitalWrite(i, LOW); // pins 2 - 13 auf LOW
}

Jetzt zum Loop - ziehmlich wirr. Aber einige Sachen: eine "}" ist zu viel am Schluss. Wie schon gesagt pin 0&1 lieber nicht anrühren also 1. zeile fällt weg. Es gibt bereits besetzte Variablenbezeichnungen (von Bibliotheken etc.) wie z.B. "time". Diese werden mit Farben gekennzeichnet und somit besser nicht benutzen -> evtl umbennen in "Time" mit Großbuchstaben. Die For-Schleifen sind wiederum unnötig. "
digitalWrite(random(3,13), HIGH);

delay (100);
digitalWrite(random(3,13), LOW);" lässt eine zufällige LED an und und eine zufällige Aus machen -> nicht besonders nutzfull. im letzten If: Vergleiche werden immer mit "==" ausgeführt und du würdest das ganze genau bei 100ms ausschalten -> hilft nicht viel. Ein fertiger Sketch könnte so ausschauen:
Code:
void loop()
{
    zeit = millis(); // derzeitige Zeit abspeichern
    pin = random(2, 14); // zufällige LED auswählen von pin 2 bis 13
    digitalWrite(pin, HIGH); // LED aufdrehen
    delay(random(6, 21) * 50); // zufälliger Stopp von 300 bis 1000ms
    digitalWrite(pin, LOW); // LED abdrehen

    if (zeit > 10000){
        ports_low(); // wenn mehr als 10s vergangen sind, alles abdrehen
        while(1); // und in einer Endlosschleife drinnen bleiben, damit der Rest des Programms nicht mehr abläuft
    }
}
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