beim Programmieren des Attiny45 kommt die Fehlermeldung:
E:\Arduino\Sketchbuch\Test\Wohnhaus\Wohnhaus\Wohnhaus.ino: In function 'void setup()':
E:\Arduino\Sketchbuch\Test\Wohnhaus\Wohnhaus\Wohnhaus.ino:39:3: error: 'Serial' was not declared in this scope
Serial.begin(9600);
^~~~~~
E:\Arduino\Sketchbuch\Test\Wohnhaus\Wohnhaus\Wohnhaus.ino:39:3: note: suggested alternative: 'Stream'
Serial.begin(9600);
^~~~~~
Stream
exit status 1
Compilation error: 'Serial' was not declared in this scope
Dazu brauchst du kein Serial.
Ich empfehle die einen PCF8574. Gibt es als SMD und auch mit Beinchen.
Den hängst du an den i2c und fertig ist.
An die Ports des PCF8574 hast du 8 "Ausgangspins". Wenn du ein oder mehre auf High (je nach Schaltung) machst, dann geht die LED an den Pin an/aus.
Wenn du (wie ich auch) noch an einen PIN des Atiny eine IR-Empfänger setzt, kannst du via FB mehre "Programme" ausführen oder einfach die Lampen einzeln schalten.
Ich habe das in einen Modelauto so gemacht, das wenn ich die 1 auf der FB drücke, das Auto nach Links blinkt (vorne + hinten) = OUT 1 + Out 2 am PCF8574.
Falls du mehr als 8 LED's einzeln schalten willst, ist sein großer Bruder der PCF8575 (16 x Out) vielleicht eine Idee.
Das ist das Layout was ich für meine Autos gemacht habe. In die Mitte ist der PCF8574 in SMD-Bauweise. Die R-Teile sind die passenden Widerstände in 1206 Baugröße.
Die Löcher vor den Widerständen sind für die Leitungen die zu den LED's führen.
Oben ist i2c , VCC + GND.
Das loch unten den Chip ist für einen Kondensator gedacht.
@to
Gehört nicht wirklich hier her, aber in deinen Fall schon.
Wenn du darauf achtest das die LED's keine Hitze erzeugen, kannst du jede LED an eine Fenster machen, Wenn du dann um jedes Fenster eine Alu-Hütte bastelst (damit die nicht ins Haus abstrahlst) kannst du sogar via Script jemand abends ins Schlaffzimmer gehen lassen.
Ablauf so.
LED 1 im Wohnzimmer ist an.
LED 2 im Flur ist an, LED 1 geht aus.
Delay (= warte x Sekunden)
LED 3 = Obergeschoss geht an, LED 2 im Flur geht aus
Wieder warten
LED 3 geht aus. und die Bewohner kuscheln im Dunkeln.
8 LED's sollte dafür ausreichen.
Wenn du eine Spezial-LED nimmst, oder alternativ eine flackern lässt, ist sogar eine Kamin-Simulation drin.
Bevor sich jemand aufregt. Das ist zwar aufwendiger aber Bei eine Modellhaus sicherer als die Neopixcel. Die sind nämlich zickig wenn man sie "Verlegt" und dabei auseinanderschneidet.
Um es mal mit einfachen Worten auf den Punkt zu bringen:
Ein AtTiny "tiny" ist das englische Wort für winzig.
ist so winzig, dass ihm alle möglichen "Zusätze" im inneren des Chips die man in den meisten Programmen braucht fehlen und er hat wenig Speicher.
Wenn du auf deiner Modellbahnanlage rein platzmäßig einen Microcontroller unterbringen kannst dessen Grundfläche ca. drei mal so groß ist wie die eines AtTiny
dann nimm einen Arduino Nano.
Damit löst sich das
"error: 'Serial' was not declared in this scope"-Problem in Luft auf.
Wenn du so gar nicht Programmieren lernen wolltest, dann müsstest du ein vorhandenes Projekt gaaaanz exakt nachbauen nur dann wird es funktionieren.
Wenn du es nicht gaaaanz exakt nachbauen willst sondern es Abweichungen gibt, dann muss man - wohl oder übel - manche Dinge anpassen.
Und dazu braucht man - du ahnst es - ein Stück weit Programmierkenntnisse.
Das Forum hier ist gerne behilflich Unterstützung zu geben.
Auch sehr ausdauernd. Es gibt hier threads die mehrere hundert postings haben.
Das Forum ist aber kein
"Kann mir mal einer das Programm umschreiben bis es läuft"-Service
Dein Programm braucht keine hunderte Postings bis es läuft, sondern vielleicht 10 bis 30 Postings.
in Post # 18 als ZIP-Datei. Das ist schon sehr ungünstig weil man in eine ZIP-Datei auch einen Software-Schädling hineinpacken könnte. Eine ZIP-Datei lädt sich fast niemand herunter aus genau dem Grund.
Hier entpackt als Code-Section:
Source-Code aus wohnhaus.zip aus Post # 18
/** Source-Code aus wohnhaus.zip aus Post # 18
*** Beleuchtung eines Mehrparteinen-Wohnhauses mit TV Flimmern
*** Räume werden zufällig beleuchtet, es gibt eine Treppenhausbeleuchtung mit dem typischen Leuchtstoffröhren-Einschaltflackern, oder eine Simulation, die dem TV-Flackern ähnelt
***
*** Ansteuerung eines LED-Strang mit WS2812B mit Attiny85 oder Attiny45
*** CPU Clock mindestens auf 8Mhz stellen!
**/
#include <Adafruit_NeoPixel.h>
// diese Definitionen nach Geschmack anpassen
#define PIN 4 //Ausgabepin des Attiny
#define ANZAHL_RAEUME 14 //Anzahl der Räume im Haus
#define TREPPENHAUS 1 //Der Raum im Haus, der das Treppenhaus darstellt
#define PAUSE 50 //Pause zwischen den Schritten des Zeitzählers
#define TIMER_MAX 250 //Zeit für die nächste Raumauslosung (TIMER_MAX * PAUSE msec)
#define MSEKUNDEN 200 //Zeitvorgabe fuer die minimale Beleuchtungsdauer
#define RAND_TEIL 125 //Zufallszugabe für die Beleuchtungsdauer
#define ROOM_BRIGHTNESS 16 //Helligkeitseinstellung der LED's bei Raumbeleuchtung
#define TV_BRIGHTNESS 8 // Helligkeit des TV-Flimmerns
#define LS_ROEHRE 125 //msec für Leuchtstoffröhren-Flackern
// die folgenden Definitionen nicht anfassen!
#define LICHT_AUS 0
#define LICHT_AN 1
#define TV_AN 2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(ANZAHL_RAEUME, PIN, NEO_GRB + NEO_KHZ800);
byte Room[ANZAHL_RAEUME];
byte Zeit = 0;
byte Counter = TIMER_MAX;
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// Initialisierung des Zufallsgenerators
Serial.begin(9600);
randomSeed(analogRead(0));
// Initialisierung der LED-Kette
pixels.begin();
// Alle LEDs abschalten
for (byte i = 0; i < ANZAHL_RAEUME; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
Room[i] = LICHT_AUS;
}
// LEDs ansteuern
pixels.show();
}
void loop() {
// LEDs ansteuern
pixels.show();
// Fernsehsimulation aufrufen und Treppenhausbeleuchtung prüfen
tvFlimmern();
// Prüfen, ob der Zeitintervall um ist
if (Counter == TIMER_MAX) {
Counter = 0;
// Raum auslosen
byte r = random(ANZAHL_RAEUME);
// Wenn das Treppenhaus ermittelt wurde, die LLeuchtstoffröhren-Simulation für den Raum aufrufen und den Timer starten
if (r == TREPPENHAUS) {
TreppenhausBeleuchtung();
}
else {
// prüfen, ob das Licht im Raum aus ist
if (Room[r] == LICHT_AUS) {
// falls ja, einmal würfeln
byte w = random(6);
// bei 0-3 geht nur das Licht an
if (w <= 3) {
pixels.setPixelColor(r, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS)); //Leuchstärke der lED Farben festlegen
Room[r] = LICHT_AN;
}
// bei 4-5 geht der Fernseher an
else {
Room[r] = TV_AN;
}
}
// ist in dem Raum bereits eine Beleuchtung an, dann diese ausschalten
else{
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r] = LICHT_AUS;
}
}
}
// warten
delay(PAUSE);
// Zeitzähler hochzählen
Counter++;
}
void tvFlimmern() {
for (byte r = 0; r < ANZAHL_RAEUME; r++) {
// Dort, wo ein Fernseher laufen soll, für Flimmern sorgen
if (Room[r] == TV_AN) {
pixels.setPixelColor(r, pixels.Color(random(TV_BRIGHTNESS), random(TV_BRIGHTNESS), random(TV_BRIGHTNESS)));
}
// Timer im Treppenhaus prüfen und ggfs runterzählen
// wenn die Zeit abgelaufen ist, Licht ausschalten
if(r == TREPPENHAUS ){
// wenn die Zeit angelaufen ist, Licht abschalten
if((Zeit==0)&&(Room[r]==LICHT_AN)){
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r]=LICHT_AUS;
}
// Sonst Timer runterzählen
else{
Zeit--;
}
}
}
// LEDs ansteuern
pixels.show();
}
void TreppenhausBeleuchtung() {
// Einschaltflackern nur, wenn im Treppenhaus kein Licht brennt
if (Room[TREPPENHAUS] == LICHT_AUS) {
// dreimal blinken
for (byte i = 0; i < 3; i++) {
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
pixels.show();
delay(LS_ROEHRE);
pixels.setPixelColor(TREPPENHAUS, pixels.Color(0, 0, 0));
pixels.show();
delay(LS_ROEHRE);
}
// Licht einschalten und Timer starten
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
Room[TREPPENHAUS] = LICHT_AN;
Zeit = MSEKUNDEN+random(RAND_TEIL);
}
// LEDs ansteuern
pixels.show();
}
Dann einen
Source-Code in post # 20
/*Beleuchtung eines Mehrparteinen-Wohnhauses mit TV Flimmern
*** Räume werden zufällig beleuchtet, es gibt eine Treppenhausbeleuchtung mit dem typischen Leuchtstoffröhren-Einschaltflackern, oder eine Simulation, die dem TV-Flackern ähnelt
***
*** Ansteuerung eines LED-Strang mit WS2812B mit Attiny85 oder Attiny45
*** CPU Clock mindestens auf 8Mhz stellen!
**/
#include <Adafruit_NeoPixel.h>
// diese Definitionen nach Geschmack anpassen
#define PIN 4 //Ausgabepin des Attiny
#define ANZAHL_RAEUME 14 //Anzahl der Räume im Haus
#define TREPPENHAUS 1 //Der Raum im Haus, der das Treppenhaus darstellt
#define PAUSE 50 //Pause zwischen den Schritten des Zeitzählers
#define TIMER_MAX 250 //Zeit für die nächste Raumauslosung (TIMER_MAX * PAUSE msec)
#define MSEKUNDEN 200 //Zeitvorgabe fuer die minimale Beleuchtungsdauer
#define RAND_TEIL 125 //Zufallszugabe für die Beleuchtungsdauer
#define ROOM_BRIGHTNESS 16 //Helligkeitseinstellung der LED's bei Raumbeleuchtung
#define TV_BRIGHTNESS 8 // Helligkeit des TV-Flimmerns
#define LS_ROEHRE 125 //msec für Leuchtstoffröhren-Flackern
// die folgenden Definitionen nicht anfassen!
#define LICHT_AUS 0
#define LICHT_AN 1
#define TV_AN 2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(ANZAHL_RAEUME, PIN, NEO_GRB + NEO_KHZ800);
byte Room[ANZAHL_RAEUME];
byte Zeit = 0;
byte Counter = TIMER_MAX;
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// Initialisierung des Zufallsgenerators
Serial.begin(9600);
randomSeed(analogRead(0));
// Initialisierung der LED-Kette
pixels.begin();
// Alle LEDs abschalten
for (byte i = 0; i < ANZAHL_RAEUME; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
Room[i] = LICHT_AUS;
}
// LEDs ansteuern
pixels.show();
}
void loop() {
// LEDs ansteuern
pixels.show();
// Fernsehsimulation aufrufen und Treppenhausbeleuchtung prüfen
tvFlimmern();
// Prüfen, ob der Zeitintervall um ist
if (Counter == TIMER_MAX) {
Counter = 0;
// Raum auslosen
byte r = random(ANZAHL_RAEUME);
// Wenn das Treppenhaus ermittelt wurde, die LLeuchtstoffröhren-Simulation für den Raum aufrufen und den Timer starten
if (r == TREPPENHAUS) {
TreppenhausBeleuchtung();
}
else {
// prüfen, ob das Licht im Raum aus ist
if (Room[r] == LICHT_AUS) {
// falls ja, einmal würfeln
byte w = random(6);
// bei 0-3 geht nur das Licht an
if (w <= 3) {
pixels.setPixelColor(r, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS)); //Leuchstärke der lED Farben festlegen
Room[r] = LICHT_AN;
}
// bei 4-5 geht der Fernseher an
else {
Room[r] = TV_AN;
}
}
// ist in dem Raum bereits eine Beleuchtung an, dann diese ausschalten
else{
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r] = LICHT_AUS;
}
}
}
// warten
delay(PAUSE);
// Zeitzähler hochzählen
Counter++;
}
void tvFlimmern() {
for (byte r = 0; r < ANZAHL_RAEUME; r++) {
// Dort, wo ein Fernseher laufen soll, für Flimmern sorgen
if (Room[r] == TV_AN) {
pixels.setPixelColor(r, pixels.Color(random(TV_BRIGHTNESS), random(TV_BRIGHTNESS), random(TV_BRIGHTNESS)));
}
// Timer im Treppenhaus prüfen und ggfs runterzählen
// wenn die Zeit abgelaufen ist, Licht ausschalten
if(r == TREPPENHAUS ){
// wenn die Zeit angelaufen ist, Licht abschalten
if((Zeit==0)&&(Room[r]==LICHT_AN)){
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r]=LICHT_AUS;
}
// Sonst Timer runterzählen
else{
Zeit--;
}
}
}
// LEDs ansteuern
pixels.show();
}
void TreppenhausBeleuchtung() {
// Einschaltflackern nur, wenn im Treppenhaus kein Licht brennt
if (Room[TREPPENHAUS] == LICHT_AUS) {
// dreimal blinken
for (byte i = 0; i < 3; i++) {
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
pixels.show();
delay(LS_ROEHRE);
pixels.setPixelColor(TREPPENHAUS, pixels.Color(0, 0, 0));
pixels.show();
delay(LS_ROEHRE);
}
// Licht einschalten und Timer starten
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
Room[TREPPENHAUS] = LICHT_AN;
Zeit = MSEKUNDEN+random(RAND_TEIL);
}
// LEDs ansteuern
pixels.show();
}
beide lassen sich compilieren mit der Arduino-IDE-Einstellung
Und das ist überhaupt kein Wunder weil diese beiden Sketche überhaupt kein Serial enthalten.
Joachim: Hast du noch alle Tässchen in der Vitrine?
Du postest zwei Sketche die sich problemlos compilieren lassen selbst für AtTiny und hast aber ein Problem mit Serial. (= serielle Schnittstelle)
Das Ansprechen der seriellen Schnittstelle ist aber in den zur Verfügung gestellten Sketches überhaupt nicht drin!
Wie soll man das jetzt verstehen? Willst du mit diesen Postings trollen?
Stellst du dich absichtlich dumm in der Hoffnung, dass sich dann schon jemand bereit erklärt das Programm anzupassen?
Jetzt lese mal diese Anleitung und dann poste DEN Sketch der die Fehlermeldung wirft.
Ich habe damals 5 Volt WS2812B als Strip (mit Schere nach jeder LED) gekauft.
Dann die auseinander geschnitten und mit Litzen wieder zusammen gelötet. Die sollten in ein großes Modellbauhaus (h0 = 1:87) rein. Einfach hinter jedes Fenster geklebt.
Ich habe sie vorher getestet und sie liefen einwandfrei.
Nach den trennen und neu verbinden gab es Stress aller Art. Mal wollten Sie garnicht mal mit falscher Farbe. Meine VERMUTUNG ist, das die Datenleitung durch die Zwischenstücke irgendwie ein zu hohen Widerstand erzeugt hat, und die Signale "versaut" wurden. Weil Strom habe ich gemessen und der war I.O.
Naja, lange Rede kurzer Sinn. Ich habe dann die Platine oben entwickelt und das Problem damit in den Griff bekommen. Da die Platine aber in viele Autos (1:24/25) nicht passt löte ich die Leitungen an die SMD-Pins der Chips und Widerstände (1206) direkt an. Das geht ziemlich gut wenn man die dann ins Auto klebt.
Ach ja, die WS2812b Stripe war aus China über Ebay. (Noch vor der Zolländerung gekauft).
Keine Ahnung ob es auch an der Qualität selbst liegt. Ich habe nur die Eine. ;(
Das ist sein Standard Verhalten.
Andere anschreien, mit fetter bunter Schrift, dazu der Versuch bloß zu stellen und dann noch beschimpfen.
Er ist so geblendet von seinem eigenen Glanz, das er herzlich wenig um sich herum mitbekommt.
Hier noch nicht mal den Thread, die Fehlermeldung und den Quelltext liest.
Seine Wahrnehmung begrenzt sich fast ausschließlich auf seinen eigenen irrationalen Innenweltorbit.
Garnicht. Ich nehme normale LED's. Meist die 1206 SMD Teile. Die sind preiswert und man kann ne Litze dran löten. Dann "fixiere" ich die mit Isolierband im Modellauto.
Für Modellbau ist das übrigens die gänige Methode. Ich habe vor einigen Jahren (vor Corona) auf der Modelleisenbahn in Köln Mikro-Leds gesehen die sie in Polizeiauto in Z-Spur Massstab eingebaut habe. Da die aber Schweineteuer waren, habe ich mich für die preiswerten 1206er entschieden.
Klarer Nachteil. Ich muss die LED-Farbe VORHER bestimmen.
Vorteil. Fällt eine aus, kann ich die Stressfrei austauschen oder es auch lassen.
Wenn der Platz in Objekt es zulässt, setze ich immer Steckverbindungen ein. ABER keine PSK oder so. Einfach Leistenstecker die ich passend trenne und da dann die passenden Stecker drauf.
Aber mir ist noch nie eine LED ausgefallen. Und ich habe auch noch keine gekillt.
Es gehr sehr wohl darum den TO zu helfen. Aber man muss auch das Umfeld sehen.
I.d.R. will kein Modellbauer eine BUNTE Lichtershow in seinen Modellhaus. Man will heutzutage eine fein abgestimmte Beleuchtung die den Eindruck macht, das in einigen Zimmern Licht an ist.
Damals als ich mein erstes Häuschen gebaut habe, hat man eine Glühbirne von Faller in eine Fassung gestellt, die Häuser mit schwarzer Pappe ausgestattet und sich gefreut wenn das Licht nicht durch die Wand scheinte.
Heutzutage mach man das wie oben geschrieben. Und NEIN, ich will nicht nur zeigen was ich gemacht habe, sondern eine Mio-Fach bewehrte Methode liefern wie man das heutzutage macht.
Ach und übrigens. Im Fachhandel gibt es sehr teure Steuermodule für die Leute die genau sowas wollen und nicht mit einen Arduino umgehen können/wollen.