Hallo
Ich mal kurz dabei und habe deinen Sketch aufgespielt.
Wenn ich das richtig verstanden habe, hast du meinen IR-Senso mit aufgenommen ?
constexpr byte pitPin {6};
constexpr bool ausgeloest {LOW};
constexpr uint32_t pitIntervall {25000};
uint32_t pitInTime;
pinMode(pitPin, (ausgeloest ? INPUT : INPUT_PULLUP));
bool pitIncomming()
{
bool isPit = false;
if (digitalRead(pitPin) == ausgeloest)
{ pitInTime = millis(); }
if (millis() - pitInTime < pitIntervall)
{ isPit = true; }
return isPit;
}
Ich habe zusätzlich noch im Header int sensorPin1 = 6; eingesetzt
und im Setup pinMode( sensorPin1, Input);
Ich bekomme es nicht hin.
Mein ziel ist es , dass wenn ein Auto durch die Lichtschranke fährt, die Matrix und das LCD für 15 Sekunden angehen und dann wieder aus. Sobald der IR Sensor wieder unterbrochen / angesprochen wird wiederholt sich das ganze.
Hier nochmal mein Sketch mit den beiden Änderungen ( Test / Test ende )
// LCD BLINKEDE SCHRIFT MIT 8x8 MATRIX
// SOLL DEMNÄCHST DURCH EINEN IR-SENSOR AUSGELÖST WERDEN
// SKETCH IST NOCH NICHT AUFGRÄUMT
// ICH WEISS, DASS ES UNGÜNSTIG MIT DEM DELAY IST ABER ICH BEKOOME ES ZUR ZEIT NOCH NICHT ANDERS HIN (milsec)
#include <LiquidCrystal.h> //LCD-Bibliothek laden
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird (Am besten erstmal nicht verändern).
#define PIN_DIN 13 // ANSCHLÜSSE 8x8 MATRIX
#define PIN_CLK 10
#define PIN_CS 9
#define NUM_DEVICES 1
#include <LedControl.h>
// Test
int sensorPin1 = 6; // an diesem Pin ist ein Abstandssensor angeschlossen
// Tent ende
LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_CS, NUM_DEVICES);
byte frames[3][8] =
{
{
B00011000,
B00011000,
B00011000,
B00011000,
B10011001,
B01011010,
B00111100,
B00011000
},
{
B10000001,
B01000010,
B00100100,
B00011000,
B00011000,
B00100100,
B01000010,
B10000001
},
{
B00011000,
B00011000,
B00011000,
B00011000,
B10011001,
B01011010,
B00111100,
B00011000
}
};
constexpr byte pitPin {6};
constexpr bool ausgeloest {HIGH};
constexpr uint32_t pitIntervall {25000};
uint32_t pitInTime;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 2 Zeilen.
lcd.print(F("PITSTOP")); // change this text to whatever you like. keep it clean.
lcd.setCursor(0, 1); // set cursor to column 0, row 1
lcd.print(F("IN PROGRESS"));
lc.shutdown(0, false);
// intensity level (0..15)
lc.setIntensity(0, 2);
lc.clearDisplay(0);
pinMode(pitPin, (ausgeloest ? INPUT : INPUT_PULLUP));
//Test
pinMode(sensorPin1, INPUT);
// Test ende
}
void loop()
{
if (pitIncomming())
{
pitStop();
switchDisplay();
}
}
void pitStop()
{
static byte frame = 0;
static uint32_t lastSwitch = 0;
constexpr uint32_t intervall {350};
if (millis() - lastSwitch > intervall)
{
for (int dot = 0; dot < 8; dot++)
{ lc.setRow(0, dot, frames[frame][dot]); }
frame++;
if (frame >= 3)
{ frame = 0; }
lastSwitch += intervall;
}
}
void switchDisplay()
{
static uint32_t lastDisplay = 0;
static bool isActive = false;
constexpr uint32_t intervall {350};
if (millis() - lastDisplay > intervall)
{
lastDisplay += intervall;
isActive = !isActive;
isActive ? lcd.display() : lcd.noDisplay();
}
}
bool pitIncomming()
{
bool isPit = false;
if (digitalRead(pitPin) == ausgeloest)
{ pitInTime = millis(); }
if (millis() - pitInTime < pitIntervall)
{ isPit = true; }
return isPit;
}
Was verstehe ich nicht oder was mache ich falsch ?
Gruß