Fehlermeldung Compilation error: Adafruit_NeoPixel.h: No such file or directory

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.

Mit freundlichen Grüßen Joachim

Du könntest die fehlende Library, in die IDE, einbinden.

Das wird keiner!

Du kannst ihn in dein Post, mit Code-Tags einbinden. So kann jeder, der möchte, dir helfen.

Aber wie von @combie schon erwähnt, musst du eine Bibliothek, die Adafruit_NeoPixel.h, über den Bibliotheksverwalter herunterladen und installieren.

Hallo @schlittenfahrer,

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

Dein Tiny kennt wohl kein Serial.
Und nein, mit dem Zufallsgenerator hat Serial nichts zu tun.

Ich denke da braucht es mal dein kompletten Sketch. Vermutlich ein Klammerfehler.

STRG + T in der Arduino IDE hilft dir beim Einrücken des Codes. Dann fällt ein Fehler schneller auf.

Ganz schmales Brett!

Ja. Aber ohne Code vollständigen kann man es nicht prüfen.

Hmm....

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.

Siehe:

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 :thinking:

Alle Tiny ohne UART.
Also z.B. der ATTiny85

Und nicht "Vermutung", sondern Gewissheit

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.

Habe ich nicht.

Mein Tiny Core sagt:

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

Nein. Das Forum lebt von der öffentlichen Diskusion.

Außerdem solltest du deinen Sketch zeigen, damit man dir helfen kann.

Ein Schaltplan wäre auch hilfreich.

Ok, hier ist die Erklärung. Auszug aus der Doku des Cores.

Daher wirft es mir den Fehler nicht.

1 Like

Wohnhaus.zip (1,9 KB)


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

Es ist besser du zeigst deinen Sketch in CodeTags hier im Forum. Nicht einen anderen als ZIP.

Auch welche ATTiny Erweiterung du nutzt könnte hilfreich sein.

Und nochmal deine Frage dazu. Bzw. was funktioniert nicht so wie erwartet, was hast du erwartet, was passiert stattdessen.

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