Hallo zusammen,
mein Name ist Joachim und bin kompletter Neuling beim Programmieren. Für meine Modelleisenbahn wollte ich die Lichtsteuerung der Häuser über Arduino bzw. Attiny machen.
Nun habe ich einen Sketch für 14 Wohnungen aus dem Netz runtergeladen. Als ich ihn installieren wollte kam folgende Fehlermeldung:
E:\Arduino\Sketchbuch\Wohnhaus\Wohnhaus.ino:9:10: fatal error: Adafruit_NeoPixel.h: No such file or directory #include <Adafruit_NeoPixel.h>
^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: Adafruit_NeoPixel.h: No such file or directory
Meine Frage bzw. Bitte an euch: kann ich jemanden den Sketch senden der sich ihn anschaut um den Fehler zu finden?
Ich wäre euch sehr dankbar.
herzlich willkommen im Arduino-Forum.
Die Arduino-IDE und C++-Programmierung hat zehntausende vorgefertigte Programmteile die man sich je nach dem was man braucht dazu installiert.
Diese Programmteile heißen "library".
Wann immer eine Fehlermeldung in mit dem Text
fatal error: Dateiname.h: No such file or directory #include <Dateiname.h>
kommt
dann wird im Programm so eine zusätzliche library benutzt.
Die der Compiler (meist wegen noch nicht installiert) nicht gefunden hat.
Die kann man wie von @combie und @Plumps kurz erwähnt hinzuinstallieren.
noch nicht in deutsche übersetzt eine Anleitung wie man das macht
allgemeine Infos wie man am besten in diesem Forum postet gibt es hier
das mit dem Adafruit hat funktioniert. Danke an combie und Plumps.
Jetzt kommt eine neue Fehlermeldung:
E:\Arduino\Sketchbuch\Wohnhaus_copy_20240201232138\Wohnhaus_copy_20240201232138.ino:39:3: error: 'Serial' was not declared in this scope
Serial.begin(9600);
^~~~~~
// Initialisierung des Zufallsgenerators
Serial.begin(9600);
randomSeed(analogRead(0));
Das soll der Zufallsgenerator sein der die LEDs zufällig ein bzw. wieder ausschalten soll.
Was muss ich hier eingeben?
Besten Dank Joachim
Dann versuche bitte mal den Fehler bei dir zu reproduzieren.
Ich bin mir zu fast 100% sicher, dass dir das auf einem beliebigen Arduino (UNO,Mega usw.) nicht gelingen wird.
Auf einem Tiny ist das allerdings sofort der Fall, ohne jede falsche Klammer usw.
Wie immer hast du recht. Was mir im Geiste rumschwirrte bringt folgende Fehlermeldung
sketch_feb02a:4:3: error: 'Serial' does not name a type
Serial.begin(9600);
^~~~~~
void setup() {}
// put your setup code here, to run once:
// Initialisierung des Zufallsgenerators
Serial.begin(9600);
randomSeed(analogRead(0));
void loop() {
// put your main code here, to run repeatedly:
}
Welche Tinys betrifft deine Vermutung eigentlich? Ich habe mal wahllos in den Einstellungen rausgepickt und den Fehler des TOs wirft es mir nicht
ATTiny85 mit der Spence Konde Erweiterung (ATTinyCore 1.5.2) auf der IDE 1.8.19 wirft mir keinen Fehler bei diesem Code:
void setup() {
// put your setup code here, to run once:
// Initialisierung des Zufallsgenerators
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop() {
// put your main code here, to run repeatedly:
}
Der Sketch verwendet 1390 Bytes (16%) des Programmspeicherplatzes. Das Maximum sind 8192 Bytes.
Globale Variablen verwenden 83 Bytes (16%) des dynamischen Speichers, 429 Bytes für lokale Variablen verbleiben. Das Maximum sind 512 Bytes.
c:\temp\untitled839886249.tmp\sketch_feb02b\sketch_feb02b.ino: In function 'void setup()':
sketch_feb02b:6:3: error: 'Serial' was not declared in this scope
6 | Serial.begin(9600);
| ^~~~~~
Hallo combie, hallo Plumps,
bei dem was ihr da schreibt verstehe ich immer nur "Bahnhof", also nichts. Meine Frage an euch, weil ihr euch so reinkniet, wäre es vielleicht möglich, dass sich jemand bei mir direkt meldet?
Es geht einfach darum, dass ich meine Häuser auf der Modellanlage beleuchten möchte. Und da die Beleuchtung nicht einfach komplett angehen soll wollte ich sie über ein Arduino bzw. Attiny steuern. Alles klappt, Verdrahtung, Schaltung usw. Nur mit der Programmierung klappt es eben nicht.
Es grüßt euch freundlichst Joachim
Hallo,
leider war ich einige Tage außer Gefecht gesetzt (krank) so, dass ich erst jetzt antworten kann.
Als Anlage der original Sketch für 14 Wohnungen. Dabei sollen die einzelnen LEDs (adressierbar WS2812) so angesteuert werden, dass sie zufällig an und wieder ausgeschaltet werden.
Es liegt auch ein Schaltplan bezüglich der Programmierung und dem Anschluss der LEDs dabei.
Gruß Joachim
Hallo Plumps,
da ich Anfänger bin kann ich mit einigen Wörter leider nichts anfangen, so wie CodeTags.
Ich hoffe nun, dass ich unten den richtigen Code eingefügt habe.
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();
}