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
14.04.2016, 19:03
Beitrag #1
Lichtsteuerung für Modellbahn
Hallo zusammen,

habe mir einen Sketch gebastelt um zufällig LED ein bzw auszuschalten. Das gefällt mir soweit auch schon ganz gut, allerdings wollte ich über millis das ganze beenden und alle Ports wieder aus LOW stellen. Das funktioniert leider nicht. Kann mir da bitte mal jemand unter die Arme greifen? Später soll das ganze zusätzlich über einen Photowiderstand geschaltet werden, aber das später.

Hier der Sketch:

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);
}}

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

void loop()
{
digitalWrite(0, HIGH);
int time = 0;
for (int zaehler = 0; zaehler<500; zaehler++); //
for (int ausgang = 1; ausgang<12; ausgang ++); //Ausgänge 1-12 zufällig an bzw ausschalten
digitalWrite(random(3,13), HIGH);

delay (100);
digitalWrite(random(3,13), LOW);
delay (random(0,50) * 60);
time=millis();
if (time=100) ports_low();
}
}


Besten Dank
Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 19:16
Beitrag #2
RE: Lichtsteuerung für Modellbahn
Ich komme zwar noch nicht klar wie das funktionieren soll, aber einen Fehler habe ich gefunden.

Code:
if (time=100)

Muss heißen
Code:
if(time==100)

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 19:40
Beitrag #3
RE: Lichtsteuerung für Modellbahn
(14.04.2016 19:16)hotsystems schrieb:  Ich komme zwar noch nicht klar wie das funktionieren soll, aber einen Fehler habe ich gefunden.

Code:
if (time=100)

Muss heißen
Code:
if(time==100)

Ja, ich denke eine FOR Schleife kann rausfliegen. War ursprünglich anders geplant. Aber trotz der Abänderung schaltet er mir die Ports nicht nach bestimmter Zeit auf LOW und beendet das Programm. Sollte ich am Anfang von void loop eine Tasterabfrage einbauen, um eine photodiode zu simulieren und so keinen permanenten Loop zu bekommen? Seh grad den Wald vor Bäumen nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 20:54
Beitrag #4
RE: Lichtsteuerung für Modellbahn
Dann setze den endgültigen Sketch hier rein und verwende dazu Code-Tags (# Schaltfläche) verwenden.
Dann ist der Sketch auch besser lesbar.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 22:13
Beitrag #5
RE: Lichtsteuerung für Modellbahn
(14.04.2016 20:54)hotsystems schrieb:  Dann setze den endgültigen Sketch hier rein und verwende dazu Code-Tags (# Schaltfläche) verwenden.
Dann ist der Sketch auch besser lesbar.

Wenn ich den Sketch fertig hätte bräuchte ich keine Hilfe Wink Aber trotzdem Danke, ich bastel weiter.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 22:44
Beitrag #6
RE: Lichtsteuerung für Modellbahn
(14.04.2016 22:13)Markus0815 schrieb:  Wenn ich den Sketch fertig hätte bräuchte ich keine Hilfe Wink Aber trotzdem Danke, ich bastel weiter.
Wie, soll ich jetzt raten, welche Änderungen du gemacht hast.

Du hast doch geschrieben, das da eine "for-Schleife" rausfliegt. Woher soll ich wissen, welche das ist?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2016, 23:47
Beitrag #7
RE: Lichtsteuerung für Modellbahn
Hallo,
laß den einmal laufen, dann kommst Du dahinter "wie" millis() ticken.
Code:
unsigned long Timestamp = 0;
long intervall = 2000;
int Zaehler = 1;

void setup()    
{
  Serial.begin(19200);
}
void loop()
{  
if (millis() - Timestamp > intervall)  
{  
  Timestamp = millis();
(Zaehler++);
  Serial.print("Zaehler ");
  Serial.println(Zaehler);
    if (Zaehler == 12)
  {
  (Zaehler = 0);
}

}}

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2016, 08:12 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2016 10:46 von rkuehle.)
Beitrag #8
RE: Lichtsteuerung für Modellbahn
Hallo Markus

der Empfehlung von Andreas kann ich nur zustimmen. So kommt man erst einmal in die Grundlagen rein. Ein gutes online Buch dazu findest du hier: http://hems.de/fileadmin/_migrated/conte...torial.pdf

Da siehst du dann auch, dass Anweisungen wie diese
Code:
for (int i = 0; i<13; i++); //Ausgänge definieren
{
pinMode(i, OUTPUT);
}
nichts machen außer (Ausführungs-)Zeit und Strom zu verbrauchen. Warum?
Viele Steuerungsbefehle wie if, while, for sind in der Lage einen einzelnen Befehl auszuführen ohne diesen in {} zu setzen. Durch
Code:
for (int i = 0; i<13; i++); //Ausgänge definieren
werden nicht etwa die Ausgänge auf OUTPUT gesetzt, sondern es wird 13 mal das gemacht was vor dem ; steht, nämlich nichts. Von daher anbei der Code wie er aussehen kann wenn er das gleiche macht wie dein Original, ergänzt mit einer Laufzeit. Vielleicht hilft es ja ein wenig weiter.

Grüße Ricardo
Code:
uint32_t interval = 30000; // Laufzeit
void setup() {
  for (int i = 0; i < 13; i++) //Ausgänge definieren
  {
    pinMode(i, OUTPUT);
  }
}
void ports_low() //Ausgänge auf LOW legen
{
  for ( uint8_t i = 0; i < 13; i++ )
    digitalWrite(i, LOW);
}
void loop()
{
  digitalWrite(0, HIGH);
  uint32_t previousMillis = millis(); // unsigned Long Wert
  while (1)
  {
    digitalWrite(random(3, 13), HIGH);
    delay (100);
    digitalWrite(random(3, 13), LOW);
    delay (random(0, 50) * 60);
    if (millis() - previousMillis > interval) break; // Wenn Laufzeit erreicht raus aus dem while
  }
  ports_low();
  while (1); // solange 1 (immer wahr) mache nichts -> Ablauf stoppt
}

Nüchtern betrachtet...ist besoffen besser Big Grin
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