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
Erstellen eines Fake TV´s mit Zimmerlicht. GRÜNSCHNABEL Frage
26.10.2014, 13:33
Beitrag #1
Question Erstellen eines Fake TV´s mit Zimmerlicht. GRÜNSCHNABEL Frage
Hallo, mein Name ist Patrick.
Arbeie als Elektroniker für Betriebstechnik...

Ich bin ein ganz frischer Neuling mit dem Arduino, und möchte mein erstes Projekt erstellen.
Doch leider habe ich ein Problem wo ich nicht so einfach weiter komme, Ich hoffe das mir jemand einen Rat geben kann.

Material liste:

Arduino NANO
RGB LED Strip 12V (Für den FakeTV)
Kalt weiß LED Strip 12V (Für den FakeTV)
Warm weiß LED Strip 12V 2x (Für das Zimmerlicht 1 und 2)
mosfet Transistoren BS170 und 100KOhm Widerständen 6x (zum steuern der LED Strips mit dem Arduino)
Fotowiderstand 10KOhm und 22KOhm Poti ( zum Starten des Programms bei Dämmerung)

So jetzt die Funktion wie ich es mir Vorgestellt hatte:

- Sobald es zum Abend dämmert, soll das erste Zimmerlicht an gehen und für ca. 6 Stunden leuchten.
- ca. 1 Sunde Später oder durch einen anderen Dämmerungspunkt sollte der Fake TV für ca 5 Stunden laufen.
- zwischenzeitlich sollte es sobald das erste Zimmerlicht leuchtet, die ganze Nacht bis zur Morgendämmerung das zweite Zimmerlicht zwischendurch für paar Minuten leuchten.

und dieser Ablauf sollte halt zur jeden Abenddämmerung wiederholt werden.

Mein Problem liegt momentan darin das ich aus dem netz ein fertigen Algorithmus zum FakeTV gefunden habe und ihn verwenden wollte.
Doch leider sind in diesen Algorithmus delay Zeiten verbaut die mein ganzes vorhaben mit dem Lichtsensor stören.

Ich wollte die delay´s gegen millis tauschen aber leider fehlt mir die Erfahrung darin da ich wirklich ein Anfänger darin bin.


Und hier ist das Programm wo ich noch den loop teil erstellen und die delay´s tauschen muss.


Zitat:int sensor = A0;
int blu = 11;
int grn = 10;
int red = 6;
int wht = 5;
int randpwm = 0;
int licht1 = 2;
int licht2 = 3;
int sensortest = 13;



void setup()
{
Serial.begin(9600);
pinMode(red, OUTPUT);
pinMode(grn, OUTPUT);
pinMode(blu, OUTPUT);
pinMode(wht, OUTPUT);
pinMode(licht1, OUTPUT);
pinMode(licht2, OUTPUT);
pinMode(sensortest, OUTPUT);

}

void loop() {
sensor = analogRead(A0); //Lichtsensor Seiel OUT
Serial.println(sensor);


if (sensor < 120) // Blaue LED zum Lichtsensor einstellen
{digitalWrite(sensortest, HIGH);
}
if (sensor > 120){
digitalWrite(sensortest, LOW);
}


}





void scenen(){
for(int i=0;i<10;i++) //play scene 1 multiple times
{
scene1();
}
if (random(2) == 1) //Possibly call scene 2
{
scene2();
}
if (random(2) == 1) //Possibly call scene 3
{
scene3();
}
if (random(2) == 1) //Possibly call scene 4
{
scene4();
}
if (random(4) == 1) //Possibly do a commercial break
{
commercial();
}
}

void scene1()
// Changes random light levels and linger-times
// of all colors to simulate "normal" TV action
{
randpwm = random(20,255);
analogWrite(red,randpwm);
randpwm = random(20,255);
analogWrite(grn,randpwm);
analogWrite(blu,random(10,225));
analogWrite(wht,random(10,175));
delay(random(500,2000));
}

void scene2()
// Increases intensity of wht,blu (fade-in)
{
delay(1000);
for(int i=2;i<255;i++)
{
analogWrite(blu,i);
analogWrite(wht,i);
delay(20);
}
}

void scene3()
// Flickers wht,blu for a flickeriing scene effect
{
boolean sw = HIGH;
for(int i=0;i<30;i++)
{
digitalWrite(wht,sw);
digitalWrite(blu,sw);
sw = !sw;
delay(random(50,300));
}
}

void scene4()
// Changes red/grn light levels only
// wht/blu are off
{
//don't use wht/blu
digitalWrite(wht,LOW);
digitalWrite(blu,LOW);
for(int i=0;i<12;i++)
{
randpwm = random(20,255);
analogWrite(red,randpwm);
randpwm = random(20,255);
analogWrite(grn,randpwm);
delay(random(200,2000));
}
}
void commercial()
// Simulates a switch to or from a commercial break
{
analogWrite(red,2);
analogWrite(grn,2);
analogWrite(blu,0);
analogWrite(wht,0);
delay(random(1000,2500));
}


Ich entschuldige mich schon jetzt für das alles hier....Confused
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2014, 06:45 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014 06:52 von RMR.)
Beitrag #2
RE: Erstellen eines Fake TV´s mit Zimmerlicht. GRÜNSCHNABEL Frage
(26.10.2014 13:33)marschewka schrieb:  Arbeie als Elektroniker für Betriebstechnik...
....... Ich hoffe das mir jemand einen Rat geben kann.

Ich wollte die delay´s gegen millis tauschen aber leider fehlt mir die Erfahrung darin da ich wirklich ein Anfänger darin bin.

Hallo Patrik,

dann hast du doch schon erkannt woran dein Problem liegt. Der erste Ansatz zur Lösung.
Da du doch eh noch einiges um die "Fakecode" programmieren musst, und dies alles mit Ablaufzeiten zu tuen hat, wäre es da nicht sinnvoll sich in das Thema millis() einzuarbeiten? Ein Hexenwerk ist das nicht und du hast etwas dazu gelernt.
Ist doch eine schöne Sache. Lies mal hier:blink without delay

Wenn du damit umgehen kannst hast du auch dein Problem gelöst. Angel

Happy scripting.... Ralf aka RMR

PS: Da wäre noch etwas was dich noch ein Stückchen weiter bringt: KLICK
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.10.2014, 09:20
Beitrag #3
RE: Erstellen eines Fake TV´s mit Zimmerlicht. GRÜNSCHNABEL Frage
Hallo Patrick,
da die Abfrage des Sensors nicht besonders Zeitintensiv ist kannst du einfach jedes mal wenn der lineare Prozess mit delay() unterbrochen wird das Einlesen des Sensors in einer Schleife für die Zeit des Delays veranlassen.
Dafür brachst du nur das delay(x); durch SensorReadingDelay(x); in der Funktion scenen() ersetzen und die Funktion z.B. wie folgt deklarieren:
Code:
void SensorReadingDelay(unsigned long Delay){
  unsigned long timestamp = millis();
  while(millis()-timestamp<Delay)){
    digitalWrite(sensortest, (analogRead(A0) < 120));
  }
}
gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme beim Hochladen eines Sketches Thandor 8 449 08.06.2018 13:19
Letzter Beitrag: Thandor
  Vorüberlegungen zum Bau eines Hexapoden juergen001 11 1.213 20.05.2018 23:02
Letzter Beitrag: GuaAck
  Diagramm erstellen Ardusil 1 276 17.03.2018 17:52
Letzter Beitrag: hotsystems
Exclamation Frage zur I2C zwischen Master und Slave saberlucien 6 469 27.02.2018 15:49
Letzter Beitrag: Tommy56
  [Frage] Unterschied zwischen &=~ und ^= beim Bit ändern auf dem Port? avoid 13 1.012 11.01.2018 00:53
Letzter Beitrag: avoid
  Kleiner Denkanstoß - Auslesen eines KY-040 Encoders Stargazer 26 1.614 20.12.2017 16:13
Letzter Beitrag: Stargazer
  Frage zu casting Bode1979 3 422 11.11.2017 19:28
Letzter Beitrag: Bode1979
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 17 3.025 10.11.2017 22:24
Letzter Beitrag: r4c3
  Frage zu einer Lichtschrankenmessung - Nullwertabgleich Stargazer 12 1.448 03.11.2017 19:10
Letzter Beitrag: Binary1
  Frage zur Adressierung von Variablen ardu_arne 14 1.178 28.10.2017 11:16
Letzter Beitrag: ardu_arne

Gehe zu:


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