IR Sensor zu auslösen LED Stripe

Moin Moin

Habe mal wieder ein Problem.
Ich möchte durch einen IR Sensor TCRT 5000 einen LED Stripe ( 60 LED´s) WS 2812 ansteuern.
Ich möchte wie beim letzten Post ( nochmals Danke an alle ), das wenn ein RC->Car den IR-Sensor auslöst, das die LED Stripe´s für 10 Sekunden ausgelöst werden.

Ich habe den Standard Sketch genommen und würde den wenn möglich erweiter.
Weiß aber wieder nicht wie :upside_down_face:

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        6 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 10 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(255, 0, 0));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop
  }
}

Den IR Sensor habe ich wie folgt angeschlossen.
VCC und GRN ist ja klar.
DO habe ich auf dem Arduino R3 Board an Digital PWM 2 angeschlossen.

Ich hatte folgendes ausprobiert was aber nicht funktioniert hat.

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#include <IRremote.h>   // Habe ich eingefügt
int IR_PIN = 2; // Pin, an dem der IR-Sensor angeschlossen ist
int LED_PIN = 6; // Pin, an dem der LED-Streifen angeschlossen ist. Das ist wahrscheinlich doppelt ??

IRrecv irrecv(IR_PIN);
decode_results results;


// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        6 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 10 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

{
pinMode(LED_PIN, OUTPUT);  // Habe ich eingefügt 
irrecv.enableIRIn(); // Starten des IR-Empfangs
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(255, 0, 0));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop

{
if (irrecv.decode(&results)) {
if (results.value == 0xFFA25D) { // Hier den Wert für die erkannte Infrarotstrahlung eintragen
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // LED-Streifen umschalten

irrecv.resume(); // Weiterempfang von IR-Signalen
}
}

  }
}

Bekomme folgende Fehlermeldungen :-(


C:\Users\Frei\Documents\Arduino\IR_Steuerung_LED_Streifen\IR_Steuerung_LED_Streifen.ino:43:1: error: expected unqualified-id before '{' token
 {
 ^
C:\Users\Frei\Documents\Arduino\IR_Steuerung_LED_Streifen\IR_Steuerung_LED_Streifen.ino: In function 'void loop()':
C:\Users\Frei\Documents\Arduino\IR_Steuerung_LED_Streifen\IR_Steuerung_LED_Streifen.ino:73:1: error: expected '}' at end of input
 }
 ^

exit status 1

Compilation error: expected unqualified-id before '{' token


Wer könnte mir hierbei behilflich sein ??

Danke

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Formatiere den Code mal ordentlich, dann fällt Dir vielleicht auf, wo deine geschweiften Klammern falsch gesetzt sind. Jede geöffnete "{" braucht auch eine geschlossene "}".

Anweisungen müssen innerhalb einer Funktion stehen. Sie einfach irgendwo hin zu schreiben ohne einen Funktionsnamen mit Rückgabe und Übergabetyp definiert zu haben, funktioniert nicht. Es reicht nicht, Anweisungen einfach in geschweifte Klammern einzuschließen.

{
pinMode(LED_PIN, OUTPUT);  // Habe ich eingefügt 
irrecv.enableIRIn(); // Starten des IR-Empfangs
}

Sowas für sich... geht nicht.

Hi

Ich bin absoluter Anfänger.

Es ist doch eine Anfangs- und Endklammer gesetzt.

Wo ist mein Fehler ?

Gruß

Der ist doch eine Reflexlichtschranke.
Da braucht es keine IR-Lib für.
Der Ausgang ist an einen digitalpin zu legen und dann einfach auf HIGH/LOW abzufragen wie ein Taster.

Ja aber wozu gehört es ? Zu setup() zu loop() ? Ich bin der Meinung, dass Du da alleine durch musst. Nur so lernst Du es...

Ich habs Dir rein geschrieben:

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#include <IRremote.h>   // Habe ich eingefügt
int IR_PIN = 2; // Pin, an dem der IR-Sensor angeschlossen ist
int LED_PIN = 6; // Pin, an dem der LED-Streifen angeschlossen ist. Das ist wahrscheinlich doppelt ??

IRrecv irrecv(IR_PIN);
decode_results results;


// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        6 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 10 // Time (in milliseconds) to pause between pixels

void setup()
{
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
} // DIESE

{ // UND DIESE sind zuviel
  pinMode(LED_PIN, OUTPUT);  // Habe ich eingefügt
  irrecv.enableIRIn(); // Starten des IR-Empfangs
}

void loop()
{
  pixels.clear(); // Set all pixel colors to 'off'
  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for (int i = 0; i < NUMPIXELS; i++) // For each pixel...
  {
    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(255, 0, 0));
    pixels.show();   // Send the updated pixel colors to the hardware.
    delay(DELAYVAL); // Pause before next pass through loop
    {
      if (irrecv.decode(&results))
      {
        if (results.value == 0xFFA25D)   // Hier den Wert für die erkannte Infrarotstrahlung eintragen
        {
          digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // LED-Streifen umschalten
          irrecv.resume(); // Weiterempfang von IR-Signalen
        }
      }
    }
  }

Am Ende fehlte zudem eine Klammer.
Ich weiss nu blos nicht warum...
Unbedingt STRG-T drücken, dann kommen die Formatierungen wieder in einigermaßen Ordnung...

Hi

Ich habe gerade die beiden Klammern entfernt und bekomme nun diese Fehlermeldung.

C:\Users\Frei\AppData\Local\Temp\.arduinoIDE-unsaved2024318-6564-egj2zd.aeesw\sketch_apr18b\sketch_apr18b.ino: In function 'void loop()':
C:\Users\Frei\AppData\Local\Temp\.arduinoIDE-unsaved2024318-6564-egj2zd.aeesw\sketch_apr18b\sketch_apr18b.ino:70:3: error: expected '}' at end of input
   }
   ^

exit status 1

Compilation error: expected '}' at end of input

Ich verstehe es leider nicht.

Hab ich geschrieben:

Wenn Du den Sketch ansiehst, stellst Du fest, dass die letzte schliessende Klammer nicht an der ersten Position im Editor ist.
Da gehört also noch eine hin :slight_smile:

Hallo

Fehlermeldung ist weg.
Aber Die LED Leiste läuft einfach ohne das sie durch den IR Sensor ausgelöst wurde.
Habe ich noch einen Fehler im Sketch ?

Ist alles nicht so einfach für mich :smiling_face:

Gruß

Ich hab doch in #5 geschrieben, dass der Sensor m.E. anders funktioniert.
Nu hab ich mal quer gelesen.
Der Ausgang gibt ein Analogsignal ab.
Das heisst, dass Deine gesamte Codebasis geändert werden muss.

Hast Du ein Modul mit dem TCRT (dann bitte mal einen Link dazu) oder ist der blank und muss beschaltet werden?

Das ist mein Sensor

https://www.az-delivery.de/products/linienfolger-modul-mit-tcrt5000-und-analog-ausgang?variant=19570363957344&utm_source=google&utm_medium=cpc&utm_campaign=16964979024&utm_content=136656817158&utm_term=&gad_source=1&gclid=EAIaIQobChMIu7WnmJXMhQMVdJWDBx1YDQNeEAQYBCABEgKr1vD_BwE

Oder der

https://www.ebay.de/itm/375223049461?mkcid=16&mkevt=1&mkrid=707-127634-2357-0&ssspo=sffzppf8rva&sssrc=4429486&ssuid=&var=&widget_ver=artemis&media=COPY

Die Ebay-Variante gefällt mir!

Der hat einen D0 und einen A0 und mit dem Poti kannst Du ein wenig die Empfindlichkeit einschränken.

Mit dem D0 kannst Du dem Modul mit einem DigitalPin des Arduino sagen, dass er senden soll und mit dem A0 gehst auf einen AnalogIn und kannst das Signal auswerten.

Es gibt ein kleines Tutorial dazu.

Wenn Du das erfolgreich nachgebaut hast, dann steht Deinem Project nix mehr im wege

Guten Morgen

Nun weiß ich zwar wie ein IR Sensor funktioniert kann aber trotzdem nicht viel damit anfangen.
Wie gesagt bin ein absoluter Anfänger bzw. nur ein Anwender.

@ my_xY_projekt

Du hattest mir doch schon bei meinem andren Projekt geholfen ( Vielen Dank nochmal .
Das ist doch sehr ähnlich. Besteht evtl die Möglichkeit, dass du mir noch einmal unter die Arme greifst ??
Wäre sehr sehr nett.

Gruß

Moin

Ich habe nun ein Lauflicht was funktioniert.
Aber ich bekomme die Ansteuerung mit dem IR Sensor TCRT5000 nicht hin.
Ich habe die Labrary Adafruit_NEOPixel, IRremote hinzugefügt.

#include <Adafruit_NeoPixel.h>
#ifdef AVR
#include <avr/power.h>
#endif


// Habe ich eingefügt (Muss das so sein ?? )
#include <IRremote.h>
int IR_PIN = 2; // Pin, an dem der IR-Sensor angeschlossen ist ( von D0 auf Digital 2 aufn Board)

#define PIN 7 // Hier wird angegeben, an welchem digitalen Pin die WS2812 LEDs bzw. NeoPixel angeschlossen sind
#define NUMPIXELS 60 // Hier wird die Anzahl der angeschlossenen WS2812 LEDs bzw. NeoPixel angegeben


IRrecv irrecv(IR_PIN);  // Habe ich eingefügt
decode_results results;  // Habe ich eingefügt



Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 50;


void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
pixels.begin();

// pinMode(LED_PIN, OUTPUT);  // Habe ich eingefügt bekomme aber eine Fehlermeldung wenn aktiv
irrecv.enableIRIn(); // Starten des IR-Empfangs


}

void loop() {
  pixels.clear();

  for(int i=0; i<NUMPIXELS; i++) {

    pixels.setPixelColor(i, pixels.Color(255, 000, 0));
    pixels.show();
    delay(10);
  }
}

Wenn ich das so uploade startet das Lauflicht sofort. Der IR Sensor wird nicht betrachtet.

hmmm, ich kriege das einfach nicht hin.

Dir wurde schon gesagt dass das ist Unsinn oder willst eine Fernbedienung damit auslesen, was der Sensor auch nicht kann, einfach gesehen ist das ein Taster grob gesagt.
Hier was zum Lernen :wink:

Nein, es soll wohl eine Lichtschranke werden:

Do initialisierst den IR Sensor in der setup() Funktion. Dann geht das Programm endlos in loop(). Soweit so gut. Innerhalb von loop wird der Zustand des Sensors nicht ausgelesen. Also passiert auch nichts.

Darum mein Vorschlag. Du lässt das Programm erst mal liegen und lernst mit dem Sensor umzugehen. Beispielprogramme und Projektbeschreibungen gibt es genug dazu.

Wenn Du das weisst, dann kannst Du damit die Onboard-LED an und aus schalten.
Es kommt nur drauf an, wann welches Ereignis ausgelöst werden soll.
Bei Erkennung einer Reflektion oder wenn keine Reflexion erfolgt.

Und wenn das geht, dann kannst Du damit auch Dein Lauflicht an und ausmachen.

Und dann, wenn das alles geht, dann machen wir das so, das es nur für ein paar Sekunden geht.

Ja, und das hast Du trotz meines Hinweises nicht als gelöst gekennzeichnet.