RE: Belebtes Haus zum Schnäppchenpreis

#201 von fantux , 03.03.2014 09:53

Hallo Sharp57,

Zitat von Sharp57
hat schon mal jemand einen Sketch geschrieben der mehr als 5 Ausgänge ansteuert??



Ja, einfach machen. Oder was ist deine Frage?

Zitat von Sharp57
Ich benötige mindestens 14 Ausgänge plus 3 TV Ausgänge und komme im Moment nicht so richtig weiter damit. Bin leider immer noch im Anfangsstadium mit der Programmierungsumgebung.



Ein "normaler" Arduino (z.B. mit Atmega 32 hat 16 frei belegbare Pins. Mit Tricksereien (z.B. Serielle Schnittstelle abstellen, Internen Oszillator benutzen,...) kann man noch ein paar mehr herausholen. Oder möchtest du mit einem Attiny arbeiten? Da ist das Problem wohl eher, dass es einfach nicht mehr Beinchen gibt und du in irgend einer Form einen IO-Expander bauen musst.

Aber was sind TV-Ausgänge?

Gruß,
fantux


Märklin Keyboards, LocoNet und MobileStation2 vernetzten: Neues Leben für Märklins Keyboard 6040 - Connect 6021 light - mit Code!

Das Aussteigen und Blumenpflücken während der Fahrt ist strengstens untersagt!


fantux  
fantux
InterCity (IC)
Beiträge: 665
Registriert am: 29.01.2012
Gleise Märklin C
Spurweite H0
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#202 von Bodo , 03.03.2014 10:29

Hallo zusammen,

zunächst vielen Dank für die Infos zu den Platinenherstellern - da werde ich mal vergleichen.

Anbei noch meine Hardware-Lösung zum Programmieren des ATtiny85 (Kondensator und Vorwiderstand für die LED befinden sich auf der Unterseite) - sieht in der Vergrößerung etwas grobschlächtig aus, erfüllt aber seinen Zweck:



Viele Grüße, Bodo

PS: Auf Seite 7 dieses Threads habe ich ein Beispiel zum Erweitern der Port-Anzahl über Schieberegister veröffentlicht (3 auf 8 Ausgänge). Durch Koppeln von zwei Schieberegistern könnte man auch 16 Ports ansteuern - alternativ mehrfach 3 Ports zu 8 machen (dann geht´s mit dem ATtiny45/85 aber schon kaum noch). Der Arduino bietet außerdem einen I2C-Bus - damit können auch "recht viele" LEDs adressiert werden.


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.476
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#203 von Sharp57 , 03.03.2014 10:46

Hallo Fantux,

ich habe einen UNO und wollte halt mehrere Zimmer eines großen Gebäudes damit beleuchten. In drei Zimmern befinden sich LEDs um ein TV Gerät flackern zu lassen. Dieses soll genau wie in Herberts Projekt kurz nach dem einschalten der dazu gehörigen Zimmerbeleuchtung passieren.

Da fangen meine Probleme aber schon mal an, ich bekomme das nicht umgesetzt. Es scheitert darann dass ies mir nicht gelingt die 3 TV LEDs in Abhängigkeit zu den dazu gehörigen Zimmern flimmern zu lassen.

Im ersten Schritt würde es schon mal ausreichen die Ausgänge 0 bis 13 zu verwenden, ein IO-Expander ist dann der zweite Schritt.

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#204 von fantux , 03.03.2014 10:53

Hallo Sharp57,

Zitat von Sharp57
Im ersten Schritt würde es schon mal ausreichen die Ausgänge 0 bis 13 zu verwenden, ein IO-Expander ist dann der zweite Schritt.



Das hier sollte LEDs an allen 14 Ausgängen anknipsen:

1
2
3
4
 
for (int i(0); i < 14; ++i) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
 



Oder was ist sonst das Problem?

Gruß,
fantux


Märklin Keyboards, LocoNet und MobileStation2 vernetzten: Neues Leben für Märklins Keyboard 6040 - Connect 6021 light - mit Code!

Das Aussteigen und Blumenpflücken während der Fahrt ist strengstens untersagt!


fantux  
fantux
InterCity (IC)
Beiträge: 665
Registriert am: 29.01.2012
Gleise Märklin C
Spurweite H0
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#205 von spielbahn ( gelöscht ) , 03.03.2014 11:43

Zitat von Sharp57
....Im ersten Schritt würde es schon mal ausreichen die Ausgänge 0 bis 13 zu verwenden, ...


Ein Arduino UNO hat 20 Ausgänge!, die Ports A0 bis A5 lassen sich genausogut als Ports 14 bis 19 ansprechen. Mit folgendem Code werden 20 Ausgänge angelegt:

for(byte i=0;i<20;i++){
pinMode(i,OUTPUT);
}

Diese 20 Ausgänge lassen sich wie gewohnt mit digitalWrite(i, HIGH/LOW); ansprechen. Von der Arduino-IDE werden von diesen Ports jedoch nur die Ports 3,5,6,9,10,11 als PWM-Ausgänge unterstützt.

Grüße
Uli


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#206 von spielbahn ( gelöscht ) , 03.03.2014 12:02

Zitat von Bodo
...
PS: Auf Seite 7 dieses Threads habe ich ein Beispiel zum Erweitern der Port-Anzahl über Schieberegister veröffentlicht (3 auf 8 Ausgänge). Durch Koppeln von zwei Schieberegistern könnte man auch 16 Ports ansteuern .....


Was macht es für einen Sinn, drei ICs (1x ATtiny 2x Schieberegister) einzusetzen, um 18 Ports (2 restliche vom ATtiny plus 16 von den Schieberegistern) zu erhalten, wenn man mit einem IC, nämlich dem ATmega328, wie er auf dem UNO verbaut ist, gleich 20 Ports erhält?

Grüße
Uli


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#207 von Sharp57 , 03.03.2014 12:40

Hallo Zusammen,

wenn ich die Schaltung wie gewünscht umgesetzt bekomme werde ich ehedem einen Atmega 328 oder ggf. einen Attiny mit mehr Ausgängen einsetzen oder gleich den UNO weiter verwenden (die kosten ja nun auch nicht mehr die Welt).

@Fantux: Das Problem ist nicht das einschalten der LEDs, wie man das hin bekommt ist mir schon klar. Also mein Wunsch ist es das Flimmern das in Herberts Sketch ja bereits umgesetzt ist auf 2 weitere LEDs zu erweitern, ohne das diese gleichzeitig flimmern.
Also jetzt flimmert ja LED 10 wenn LED 13 eingeschaltet ist, (Herberts Sketch).
Des weiteren soll LED 11 in einem eigenen Intervall flimmern wenn LED 12 an ist und ebenso mit eigenen Intervall die LED 9 flimmern lassen wenn LED 8 eingeschaltet ist.

So habe ich 3 Räume die beleuchtet werden können und eine LED wird in diesen Räumen hinzu geschaltet und simuliert das TV Gerät. Diese 3 "Räume" sollen komplett unabhängig voneinander und in eigenen Intervallen durchlaufen.

@Uli: Das mit den Analogen Ports hatte ich auch schon mal irgendwo gelesen, aber auf die Schnelle nicht gefunden.

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#208 von Bodo , 03.03.2014 13:39

Zitat von spielbahn

Zitat von Bodo
...
PS: Auf Seite 7 dieses Threads habe ich ein Beispiel zum Erweitern der Port-Anzahl über Schieberegister veröffentlicht (3 auf 8 Ausgänge). Durch Koppeln von zwei Schieberegistern könnte man auch 16 Ports ansteuern .....


Was macht es für einen Sinn, drei ICs (1x ATtiny 2x Schieberegister) einzusetzen, um 18 Ports (2 restliche vom ATtiny plus 16 von den Schieberegistern) zu erhalten, wenn man mit einem IC, nämlich dem ATmega328, wie er auf dem UNO verbaut ist, gleich 20 Ports erhält?



ich rechne halt anders ... um 8 LEDs sensorabhängig mit einem ATtiny45/85 anzusteuern macht das Sinn. Um in einem Arduino-Projekt, bei dem auch noch Ports für Motortreiber und Servos benötigt werden, mit 3 Pins 8 LEDs anzusteuern macht das Sinn ... auch wenn es bei einer beliebigen konkreten Anforderung vielleicht keinen Sinn macht, muss das Prinzip nicht sinnlos sein. Welche Methode Sinn macht, kann man nur entscheiden, wenn man zu einer konkreten Anforderung die möglichen Lösungsansätze kennt und vergleichen kann. Da könnte man jetzt auch noch den I2C-Bus mit dem LED-Treiber von ELV ins Spiel bringen ...

Viele Grüße, Bodo

PS: Ich weiß ... gefragt war nach einem fertigen Sketch, der ein nicht näher beschriebenes Projekt optimal löst ...


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.476
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#209 von moppe , 03.03.2014 14:33

Ob sie brauchen mehren outputs als ein ATtiny kann ihn geben, schau mal hier:
http://www.ebay.de/itm/New-Pro-Mini-atme...=item1c37a1c27a

Klaus


"Meine" Modellbahn:http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.759
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: Belebtes Haus zum Schnäppchenpreis

#210 von Sharp57 , 03.03.2014 14:36

Zitat von Bodo

Zitat von spielbahn

Zitat von Bodo
...
PS: Auf Seite 7 dieses Threads habe ich ein Beispiel zum Erweitern der Port-Anzahl über Schieberegister veröffentlicht (3 auf 8 Ausgänge). Durch Koppeln von zwei Schieberegistern könnte man auch 16 Ports ansteuern .....


Was macht es für einen Sinn, drei ICs (1x ATtiny 2x Schieberegister) einzusetzen, um 18 Ports (2 restliche vom ATtiny plus 16 von den Schieberegistern) zu erhalten, wenn man mit einem IC, nämlich dem ATmega328, wie er auf dem UNO verbaut ist, gleich 20 Ports erhält?



ich rechne halt anders ... um 8 LEDs sensorabhängig mit einem ATtiny45/85 anzusteuern macht das Sinn. Um in einem Arduino-Projekt, bei dem auch noch Ports für Motortreiber und Servos benötigt werden, mit 3 Pins 8 LEDs anzusteuern macht das Sinn ... auch wenn es bei einer beliebigen konkreten Anforderung vielleicht keinen Sinn macht, muss das Prinzip nicht sinnlos sein. Welche Methode Sinn macht, kann man nur entscheiden, wenn man zu einer konkreten Anforderung die möglichen Lösungsansätze kennt und vergleichen kann. Da könnte man jetzt auch noch den I2C-Bus mit dem LED-Treiber von ELV ins Spiel bringen ...

Viele Grüße, Bodo

PS: Ich weiß ... gefragt war nach einem fertigen Sketch, der ein nicht näher beschriebenes Projekt optimal löst ...





Wie darf ich das jetzt verstehen Bodo?

Das Problem ist beschrieben und ich suche keinen fertigen Sketch sondern einen Tipp wie ich 3 Leds dazu bringe in Abhängigkeit zu jeweils einer anderen LED zu flimmern. Siehe meinen Beitrag 03 Mär 2014 12:40

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#211 von fantux , 03.03.2014 14:45

Hallo Sharp57,

Zitat von Sharp57
@Fantux: Das Problem ist nicht das einschalten der LEDs, wie man das hin bekommt ist mir schon klar. Also mein Wunsch ist es das Flimmern das in Herberts Sketch ja bereits umgesetzt ist auf 2 weitere LEDs zu erweitern, ohne das diese gleichzeitig flimmern.



jetzt muss ich ein paar Annahmen treffen:
- "Herberts Sketch" ist der hier.
- Mit "Flimmern" ist eine per PWM gedimmte LED gemeint.

Wenn dir die PWM-Pins ausgegangen sind, sehe ich prinzipiell zwei Möglichkeiten:
- Probieren, PWM per Bit-Banging zu erzeugen. Also nimm einen "normalen" Ausgang und definiere einfach einen LED-Takt, der deiner PWM-Frequenz entspricht. Dann musst du, wie bei "normalen" LED-Ausgängen, den einfach mit dieser Frequenz ein- und ausschalten. Zur Unterstützung kannst du auch nach Software-PWM-Libraries suchen, z.B. dieser hier.
- IO-Expander-Chip mit PWM-Ausgängen kaufen. Der Erste über den ich beim Googlen gestolpert bin ist ein MAX7313, die Trefferliste ist aber lang. Da ist bestimmt auch was für dich dabei.

Gruß,
fantux


Märklin Keyboards, LocoNet und MobileStation2 vernetzten: Neues Leben für Märklins Keyboard 6040 - Connect 6021 light - mit Code!

Das Aussteigen und Blumenpflücken während der Fahrt ist strengstens untersagt!


fantux  
fantux
InterCity (IC)
Beiträge: 665
Registriert am: 29.01.2012
Gleise Märklin C
Spurweite H0
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#212 von spielbahn ( gelöscht ) , 03.03.2014 15:02

Zitat von Sharp57
....
Da fangen meine Probleme aber schon mal an, ich bekomme das nicht umgesetzt. Es scheitert darann dass ies mir nicht gelingt die 3 TV LEDs in Abhängigkeit zu den dazu gehörigen Zimmern flimmern zu lassen.
....


Ich nehme mal an, Du lehnst Dich an den von Herbert eingestellten Sketch an. Ich habe mir diesen Sketch mal angesehen und kann Dir "auf die Schnelle" einige Tipps geben. Folgende Tipps sind nicht unbedingt die elegantesten, aber der UNO hat soviel Speicher, da kann es auch etwas umständlicher zugehen.

Bei den Deklarationen der Variablen setzt Du für jedes TV:
byte pwmFlimmerPin5=5;
wobei Du anstatt der 5 für jedes TV einen eigenen PWM-Pin wählst.
Genauso kannst Du eigene Variablen flimmerStart5,flimmerEnd5 anlegen.
Bei leds[] musst Du Deine neuen Zimmer einfügen, z.B. leds[]={9,.....,12}, wenn an Pin 12 ein neues Zimmer (z.B. mit TV an Pin 5) hängt.
Entsprechend wirst Du ledtakt[] ergänzen müssen....
Bei blinkenImTakt() kopierst Du ab if (leds[i]==13 den gesamten IF-Block, änderst jedoch die 13 in 12 ab und anstatt flimmerStart und FlimmerEnd schreibst Du flimmerStart5 und FlimmerEnd5 mit evtl. anderen Anfangs-und Endzeiten.
Die gesamte flimmerPwmPin() kopierst Du und nennst die Kopie in flimmerPwmPin5() um. In der Kopie hängst Du an alle Variablen eine 5, also alterWert5 usw. bis analogWrite(pwmFlimmerPin5, flimmerHelligkeit5);
Wobei es sinnvoll sein kann, den Wert flimmerDauer5 nicht konstant auf 200 zu setzten sondern z.B. auf random(100,300);
In loop() kommt dann noch der Aufruf
flimmernPwmPin5();
dazu.

Und dasselbe Spielchen dann nochmal mit z.B. Zimmer 11 und PWM-Pin 6.

Wie gesagt, nicht elegant - aber der Weg sollte gangbar sein.

Grüße
Uli


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#213 von Sharp57 , 03.03.2014 15:04

Hallo Fantux,

mein Sketch sieht im Moment so aus dass ich erst mal Herberts Sketch auf die Ausgänge die ich zusätzlich benötige erweitert habe.
Der Ausgang 13 gibt das Starsignal für die LED am PWM-Ausgang 11 und simuliert dort das flimmern der LED.

Die PWM Ausgänge 10 und 9 möchte ich ebenfalls "flimmern" lassen, eingeschaltet durch z.B. die Ausgänge 7 und 8.

Zitat

/*  Simulation "belebtes Haus für die Modellbahn" */
/*  Version "Flimmern nur wenn die Pin-13 LED an ist */
byte pwmFlimmerPin=10; // PWM Pin für das "analoge" Flimmern
long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[] ={1, 2, 3, 4, 5, 6, 7, 8, 12, 13};
// LED Blinktakt in Millisekunden für diese Pins
  long ledtakt[]={4000, 2000, 2500, 3000, 3500, 3750, 4000, 5000, 5210, 6000};
// Variablen zum Merken von millis()-Zeiten beim Schalten/Blinken
long ledtime[sizeof(leds)];

void setup() {
//  Serial.begin(9600);
  // Alle verwendeten Pins auf OUTPUT setzen
  pinMode(pwmFlimmerPin, OUTPUT);
  for (int i=0;i<sizeof(leds);i++)
    pinMode(leds[i], OUTPUT);
}

boolean milliSekundenTakt(int dauer, long &alterWert) {
// Parameter "dauer": Dauer einer Blinkphase (an bzw. aus)
// Parameter "alterWert": Variable zum Speichern des millis() Timers
// Rückgabewert: true wenn die Zeit bis zum nächsten Umschalten abgelaufen ist, sonst false
  if (millis() - alterWert < dauer) return false;
  while (millis() - alterWert >= dauer) alterWert+=dauer;
  return true;
}

void blinkenImTakt() {
  
// Alle gleichmäßig blinkenden LEDs in ihrem eigenen Takt blinken lassen  
  for (int i=0;i<sizeof(leds);i++) // alle LEDs in einer Schleife durchgehen
  {
    if (milliSekundenTakt(ledtakt[i],ledtime[i])) // Takt für diese LED abgelaufen?
    {
      digitalWrite(leds[i],!digitalRead(leds[i])); // wenn ja ==> Umschalten
      if (leds[i]==13 && digitalRead(leds[i])) // Pin-13 LED wurde gerade eingeschaltet
      {
       flimmerStart=millis()+2000; // Anfangszeit für das Flimmern setzen
       flimmerEnd =millis()+5000; // Endzeit für das Flimmern setzen
       
       }  
//      Serial.print("Pin ");Serial.print(leds[i]);Serial.print(" = ");Serial.println(digitalRead(leds[i]));
    }
  }
}

void flimmernPwmPin() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
  static long alterWert;
  static int flimmerDauer=200;
  static byte flimmerHelligkeit;
  if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
  {
    flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
    if (millis()>flimmerStart && millis()<flimmerEnd)
      flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
    else
      flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
    analogWrite(pwmFlimmerPin, flimmerHelligkeit);
  }  
}

void loop() {
  blinkenImTakt();
  flimmernPwmPin();
}




Mir fehlt allerdings das know-how wie ich das Problem angehen muss.

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#214 von Sharp57 , 03.03.2014 15:05

Danke Uli,

ich werde mich heute Abend mal da einlesen.

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#215 von spielbahn ( gelöscht ) , 04.03.2014 12:09

Hallo!

Wer viel mit LEDs experimentiert, dem sei dieses Shield empfohlen. Da sind 20 LEDs für alle 20 Ports des Arduino drauf und es kann somit einfach eine Funktionsprüfung des Sketch vorgenommen werden.

Grüße
Uli


PS: Bekomme leider keine Provision....


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#216 von herbi39 , 04.03.2014 17:53

Hallo Uli,

danke für den Tip!

Habe eben ein solches Shield bei Voelkner für 19,54€ bestellt.
https://www.voelkner.de/products/318911/...uino-65146.html

Nur noch heute gibts schon ab 25,- versandkostenfreie Lieferung!

Viele Grüße
Herbert
http://www.herberts-n-projekt.de


 
herbi39
InterRegio (IR)
Beiträge: 193
Registriert am: 06.11.2009
Homepage: Link
Spurweite N
Stromart DC, Digital


RE: Belebtes Haus zum Schnäppchenpreis

#217 von spielbahn ( gelöscht ) , 04.03.2014 19:38

Zitat von herbi39
....Habe eben ein solches Shield bei Voelkner für 19,54€ bestellt.....


Super! Bei meinem Link wären 25 EUR fällig gewesen.
Suchen lohnt sich doch...

Grüße
Uli


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#218 von Sharp57 , 04.03.2014 20:08

Ebenfalls bestellt.

Danke für den Link.

@Uli, hast eine PN.

Gruß,

Ingo


Ein Pola H0 Verrückter
zu meiner Homepage:http://www.ingomoegling.de Bauanleitung für einfache Wagenbeleuchtung im Lowcost Bereich.


 
Sharp57
EuroCity (EC)
Beiträge: 1.351
Registriert am: 14.01.2009
Homepage: Link
Ort: Sharp57
Gleise Roco Line
Spurweite H0
Steuerung Lenz DCC + Digikeijs DR 5000
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#219 von spielbahn ( gelöscht ) , 04.03.2014 20:16

Zitat von Sharp57
....@Uli, hast eine PN....


Ebenfalls


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#220 von Instandsetzung , 11.03.2014 02:43

Hallo zusammen,

nun auch ich.

Habe mir nun auch einen Arduino besorgt und mache die ersten Gehversuche.
Zum brennen eines Attiny bin ich mangels Attiny noch nicht gekommen.
Ich probiere das alles erst mal mit dem Arduino aus.

Ich habe mir das hier alles bestimmt schon 3 mal durchgelesen und habe immer noch so meine “Einstiegsschwierigkeiten“. Klar, man muss sich da erst mal reinarbeiten, aber ich habe da auch etwas „Manöverkritik“.

Versteht die folgenden Ausführungen bitte nicht als Angriff auf irgend jemanden – erst recht nicht auf Herbert. Ich möchte mich daher auch noch mal bei allen Aktiven vornehmlich Herbert bedanken. Nur durch Euch bin ich zu diesem Thema gekommen und freue mich einen neuen Bastelbereich für mich gefunden zu haben, an dem ich auch außerhalb der MOBA Werkstätten noch werkeln kann, ohne die Wohnung zu verwüsten. ( In der Familienwohnung finden sich weder MOBA-Untensilien noch Hinweise darauf )

Nur mit dem Sketch für das Haus komme ich noch nicht so recht klar.
( Vermutlich ist er auch schon fachlich optimiert )
Klar ist mir zumindet, daß man nicht alles in einer Nacht lernen kann.
Dazu gehört natürlich auch „learning by doing“.
Schön wäre es wenn die Erklärung der Programmierung weiter aufgedröselt werden könnte. ( In etwa nicht nur was der Befehl bedeutet, sondern auch wie er an dieser Stelle was bewegt , diese vielen i’s verwirren mich da )
Vermutlich ist dieser Sketch auch nicht an einem Tag enstanden, sondern es ist bestimmt immer was hinzugekommen.
Von daher ist er schon in Dimensionen vorgestoßen, die nicht für jeden Anfänger sofort zu verstehen sind.
Vielleicht könnte man, falls es wirklich diese verschiedenen Abstufungen geben sollte, auch mal diese Stufen ( mit den verschiedenen Schwierigkeitsgraden ) zeigen.
So werde ich z.B. versuchen den “Fernseher“ wieder aus dem Sketch heraus zu bekommen ( In der EP. III gab es noch nicht so viele davon ) ,
oder halt den Sketch von Moppe nehmen.

Schaun wa ma. Jeden Tag kommt etwas Erleuchtung dazu.

Und dann will auch bei mir der Ausgang Nr 8 nicht so wie er soll.
Bei mir will der Ausgang Nr 8 nicht angehen.
( 10 flimmert / 9, 11, 13 gehen an und aus )
Die Led selber ist in Ordnung.
Der Arduino auch.
( Ich habe einfach mal einen Blinker auf den Ausgang 8 gelegt und der funktioniert )


Mit freundlichen Grüßen
Oliver


Instandsetzung  
Instandsetzung
EuroCity (EC)
Beiträge: 1.364
Registriert am: 27.02.2009
Ort: Revier


RE: Belebtes Haus zum Schnäppchenpreis

#221 von tom75 , 11.03.2014 09:00

Hallo Oliver,

ich weiß jetzt nicht, ob du meinen Sketch vom beleuchteten Haus meinst, da ich aber den TV auf Pin 8 habe gehe ich mal davon aus.

Ich weiß nicht, wie der Pin 8 am Arduino selbst ausgeführt ist... ich habe Pin 8 genommen, da dieser mit PWM umgehen kann (Beim Arduino 44 können Das die Pins 5,6,7,8). Alle anderen Pins sind beim Arduino reine Ein/Ausschalter, können also nicht Flimmern. Also musst du dir da einen anderen Pin aussuchen, der beim Arduino selbst auch PWM beherrscht, denk ich jetz mal

Das mit den vielen i's

i ist nur eine definierte Variable, die man in diesem Fall nur als Zähler in einer For-Schleife benutzt. Du kannst da auch jede andere Variable definieren, das ist egal. Hier mal nur kurz ein Auszug:

for(int i=0;i<sizeof(nightPins);i++)
{
pinMode(nightPins[i],OUTPUT);
}

Mal kurz aufgedröselt

int i=0;
-> Hier wird die Variable definiert und mit dem Wert 0 belegt.

i<sizeof(nightPins);
-> Hier wird in der For-Schleife die Bedingung festgelegt, die festlegt, wie lange die For-Schleife durchlaufen werden soll. sizeof(nightPins) ermittelt dabei die Anzahl der in nightPins enthaltenen Elemente (nightPins ist ein Array); Wenn du genau weißt, wie weit du Zählen willst, dann kannst du auch direkt eine Zahl hineinschreiben, z.B: i<5... dann musst du dich aber später, wenn sich die Anzahl der Elemente in nightPins mal ändert, diese For-Schleife aber anpassen... mit sizeOf kriegst du immer die exakte Anzahl der Elemente

i++
-> das bedeutet, das bei jedem Schleifendurchlauf der For-Schleife i um 1 erhöht wird. Du könntest auch i+1 oder i+2 schreiben, dann wird i halt auch um 1 oder um 2 erhöht.... genau so gäbe es i-- bzw. i-1 oder so.... wie mans halt grad braucht

das was dann in den geschweiften Klammern steht {} ist der Teil der for-Schleife, der bei jedem Schleifendurchlauf ausgeführt wird.

pinMode(nightPins[i],OUTPUT);

In diesem Fall werden die einzelnen Pins auf OUTPUT gesetzt. Das i wird bei jedem Durchlauf dabei durch die entsprechende Zahl ersetzt.

Anstatt der oben genannten for-Schleife könntest du also auch das hier schreiben:

pinMode(nightPins[1],OUTPUT);
pinMode(nightPins[2],OUTPUT);
pinMode(nightPins[3],OUTPUT);
pinMode(nightPins[4],OUTPUT);
pinMode(nightPins[5],OUTPUT);
pinMode(nightPins[6],OUTPUT);
pinMode(nightPins[7],OUTPUT);
pinMode(nightPins[8],OUTPUT);
pinMode(nightPins[9],OUTPUT);
pinMode(nightPins[10],OUTPUT);

Wie du siehst, ist eine for-Schleife da wesentlich eleganter und vor allem auch flexibler

Ich hoffe, das dies auch die Erklärung war, die du gerne haben wolltest ? Ansonsten kannst du mir ja auch mal ne PN schreiben, wenn du mehr wissen willst

Grüße

Tom75


Schaut doch auch mal bei mir vorbei ;)

Aktuelle Anlage:
http://stummiforum.de/viewtopic.php?f=64&t=123785

Alte Anlage Kellerhausen
viewtopic.php?f=64&t=87438


tom75  
tom75
InterCity (IC)
Beiträge: 625
Registriert am: 08.01.2013
Gleise Märklin K-Gleis
Spurweite H0
Stromart AC


RE: Belebtes Haus zum Schnäppchenpreis

#222 von spielbahn ( gelöscht ) , 11.03.2014 09:40

Zitat von Instandsetzung
.....Klar ist mir zumindet, daß man nicht alles in einer Nacht lernen kann.
Dazu gehört natürlich auch „learning by doing“.
Schön wäre es wenn die Erklärung der Programmierung weiter aufgedröselt werden könnte. ( In etwa nicht nur was der Befehl bedeutet, sondern auch wie er an dieser Stelle was bewegt , diese vielen i’s verwirren mich da ).....Vielleicht könnte man, falls es wirklich diese verschiedenen Abstufungen geben sollte, auch mal diese Stufen ( mit den verschiedenen Schwierigkeitsgraden ) zeigen........Schaun wa ma. Jeden Tag kommt etwas Erleuchtung dazu.....


Was Du hier schwerlich erwarten kannst, ist ein Lerngang im Schreiben eines Sketch - dazu gibt es im Netz viele gute Beispiele, nicht zuletzt auf den Arduino-Seiten.

@Oliver:Gebräuchlich ist z.Z. der Arduino UNO und der kann an Pin 8 kein PWM sondern an den Pins 3,5,6,9,10,11.

@all: Ich stelle hier mal meine Lösung für ein "belebtes Haus" vor. Der Sketch macht nicht nur eine "Lightshow" sondern er simuliert einen Tagesablauf, wobei ein Ausgang des Arduino über eine geeignete Schnittstelle auch die Raumbeleuchtung steuern könnte.

Grüße
Uli


spielbahn

RE: Belebtes Haus zum Schnäppchenpreis

#223 von Instandsetzung , 12.03.2014 01:46

Hallo zusammen,

Zitat von Uli
Was Du hier schwerlich erwarten kannst, ist ein Lerngang im Schreiben eines Sketch - dazu gibt es im Netz viele gute Beispiele, nicht zuletzt auf den Arduino-Seiten.


Wirklich nicht
[ironiemodus/on] Das hätte ich aber jetzt erwartet [ironiemodus/off]

Hallo Tom 75,

danke für die genauere Erklärung.
Langsam dämmert es mir auch wieder. Ich hatte mal zu Schulzeiten einen VC 20 und da gab es ja die Programmiersprache Basic und nun ist es mir wieder eingefallen: es hieß damals die „FOR / NEXT“ Schleife.

Daher ist es für mich momentan auch noch so schwierig in diese neue Programmiersprache einzusteigen. Man hat halt noch die alten “eingebrannten“ Basicerinnerungen.

Und dann steht da immer das Wort „VOID“.
Auf allen Elektronikteilen steht doch immer:
“Void Warranty if removed“
Void heißt “Ungültig“.
Und nun lese ich andauernd “Ungültig“ in diesem Programm.
Was glaubt Ihr eigentlich was ich dabei dann immer denke ? flaster:


Worauf ich eigentlich eher hinaus wollte:
Klar kann man mit Internetzlernhilfen da so manches erfahren und erlernen, aber es scheint so daß hier mehrere Wege nach Rom führen.
Herbert schreibt:

Zitat

byte leds[] ={9, 11, 8, 13};


Bei Moppe aber:

Zitat

const int led1Pin = 13; // Led number 1 connected to output 13
const int led2Pin = 12; // Led number 2 connected to output 12
const int led3Pin = 11; // Led number 3 connected to output 11
const int led4Pin = 10; // Led number 4 connected to output 10
const int led5Pin = 9; // Led number 5 connected to output 9


Daher also die Frage nach dem Was macht was.

Und, daß ich nach den verschiedenen Stufungen der Entwicklung des Programmes gefragt habe liegt daran, daß ich zumindest daran dann vielleicht das Wachsen dieses Programmes erkennen könnte. Und wenn man dann diese Schritte nachvollzieht, kann man ja davon vielleicht am besten lernen.
( Jeder hat da so seine eigene Herangehensweise an solche Lernprobleme )


Was den Ausgang 8 ( am Arduino Uno ) angeht:
Es geht hier um Herberts Sketch und ich schirieb ja auch :
Bei mir will der Ausgang Nr 8 nicht angehen.
( 10 flimmert / 9, 11, 13 gehen an und aus )
Das habe ich aus dem Anfang von Herberts Sketch. Da steht:

Zitat

byte pwmFlimmerPin=10; // PWM Pin für das "analoge" Flimmern
long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[] ={9, 11, 8, 13};


Daher gehe ich davon aus daß eben 8, 9, 11 und 13 “blinken“ und Nr. 10 “flimmert“.
Das Flimmern funktioniert ja auch. Nur in “Zimmer“ 8 geht keiner rein.

Mit freundlichen Grüßen
Oliver


Instandsetzung  
Instandsetzung
EuroCity (EC)
Beiträge: 1.364
Registriert am: 27.02.2009
Ort: Revier


RE: Belebtes Haus zum Schnäppchenpreis

#224 von Bodo , 12.03.2014 07:06

Hallo Oliver,

Zitat von Instandsetzung
Herbert schreibt:

Zitat

byte leds[] ={9, 11, 8, 13};


Bei Moppe aber:

Zitat

const int led1Pin = 13; // Led number 1 connected to output 13
const int led2Pin = 12; // Led number 2 connected to output 12
const int led3Pin = 11; // Led number 3 connected to output 11
const int led4Pin = 10; // Led number 4 connected to output 10
const int led5Pin = 9; // Led number 5 connected to output 9


Daher also die Frage nach dem Was macht was.



im Prinzip das gleiche ... der Vorteil bei der Verwendung von Arrays ist halt, dass man Schleifen über den Index machen kann bzw. die Position im Array variabel ansteuern kann. Je mehr LEDs man ansteuert, desto mehr Sinn macht das.

In der Arduino-IDE gibt es unter "Datei" - "Beispiele" - "Digital" den Sketch "BlinkWithoutDelay", der das Prinzip des Blinkens ohne delay-Befehl in der einfachsten Form darstellt.

Angepasst für 5 LEDs (und um den High/Low-Teiler für unsymmetrisches Blinken ergänzt) könnte das so aussehen (Achtung - Pins für ATtiny85, für den Arduino müßten die ggf. angepasst werden):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
/* Blink without Delay
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
angepasst f&#252;r 5 LEDs
*/
int ledZahl = 5; // Anzahl der LEDs f&#252;r Schleifen
int ledPin[] = {0, 1, 2, 3, 4}; // Pins der angeschlossenen LEDs
long previousMillis[] = {0, 0, 0, 0, 0};
unsigned long currentMillis[] = {0, 0, 0, 0, 0};
int interval[] = {750, 800, 850, 950, 1000}; // interval at which to blink (millisecond)
int highlowq[] = {5, 5, 5, 2, 2};

void setup() {
for (int i = 0; i &lt; ledZahl; i = i++) {
pinMode(ledPin[i], OUTPUT);
}
}

void loop() {
for (int i = 0; i &lt; ledZahl; i = i++) {
currentMillis[i] = millis();
}
for (int i = 0; i &lt; ledZahl; i = i++) {
if(currentMillis[i] - previousMillis[i] &gt; interval[i]) {
previousMillis[i] = currentMillis[i];
digitalWrite(ledPin[i], HIGH);
}
else if(currentMillis[i] - previousMillis[i] &gt; interval[i]/highlowq[i]) {
digitalWrite(ledPin[i], LOW);
}
}
}
 


Durch die Verwendung von Arrays ändert sich mit der Anzahl der LEDs der Code praktisch nicht (der belegte Speicher natürlich schon) - egal ob z.B. 3 oder 8 LEDs - immer das gleiche, nur in den Schleifen läuft i mal von 0 bis 2 oder eben 7.

Die Zeiten sind jetzt für Fahrzeuge mit Warnblinker und Blaulicht ungefähr passend - für Zimmerleuchten müßten die Intervalle natürlich wesentlich länger sein .

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.476
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Belebtes Haus zum Schnäppchenpreis

#225 von Instandsetzung , 13.03.2014 01:57

Hallo Bodo,

danke für die weitergehenden Erklärungen.
Wenn ich Zeit hätte wär ich am 5.4. gern dabei gewesen um weitere Infos mitzunehmen.

MFG
Oliver


Instandsetzung  
Instandsetzung
EuroCity (EC)
Beiträge: 1.364
Registriert am: 27.02.2009
Ort: Revier


   

LED für DC mit 1V einschalten
Knopfdrücker wie im Miniaturwunderland

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz