Wenn es das ist was ich denke. Stehen da keine Fehler oder der gleichen drin!
Genau so mit dem Widerstand ist er angeschlossen. Ausser das dich den dritten GND habe und nicht den zweiten. Wieso braucht man diesen Widerstand überhaupt?
Wenn es das ist was ich denke. Stehen da keine Fehler oder der gleichen drin!
Genau so mit dem Widerstand ist er angeschlossen. Ausser das dich den dritten GND habe und nicht den zweiten. Wieso braucht man diesen Widerstand überhaupt?
Nicht denken. Machen. Neuer Code.
Einfügen.
Dann Werkzeuge - Serieller Monitor aufrufen
Dann unten rechts im Seriellen Monitor die Zahl auf 115200 stellen.
Code hochladen
Schalter bedienen - Da muss was passieren.
Wenn da nichts passiert gehe zu #42
const byte PinLed [] = { 5, 7, 9 };
const byte PinBut = 11;
enum { Off, On };
enum { ST_IDLE, ST_YELLOW, ST_RED, ST_REDwait, ST_REDYellow }; // Das ist eine Aufzaehlung der Stati
byte state = ST_IDLE; // Erster Status mit Programmstart
const unsigned long PeriodYellow = 1000; // Zeit in ms
unsigned long yellowPlus = 0; // Variable zur Berechnung der Verlaengerung der Gelbphase
unsigned long msecLst; // Merker für letzte Zeit
unsigned long msec; // Merker für aktuelle Zeit
// -----------------------------------------------------------------------------
void setLeds ( const bool green, // Funktion zur Ausgabe der Zustände
const bool yellow,
const bool red )
{
digitalWrite (PinLed [0], green);
digitalWrite (PinLed [1], yellow);
digitalWrite (PinLed [2], red);
}
// -----------------------------------------------------------------------------
void kontrol()
{
byte x = 200;
static byte y = 0;
x = x + digitalRead(5) << 1;
x = x + digitalRead(7) << 1;
x = x + digitalRead(9);
if (y != x)
{
y = x;
Serial.println(y, BIN);
}
}
void loop ()
{
kontrol();
msec = millis (); // merkt sich die aktuelle Zeit
switch (state) // verzweige je nach Zustand
{
case ST_YELLOW: // Wenn Status gelb
setLeds (Off, On, Off); // stelle die Ampel
if ((msec - msecLst) > PeriodYellow) // wenn Gelbzeit abgelaufen
state = ST_RED; // wechsle zu rot
break;
case ST_RED: // wenn Status rot
setLeds (Off, Off, On); // stelle Ampel
msecLst = msec; // merke die aktuelle Zeit
state = ST_REDwait; // wechsel Status zu rot_warten
break;
case ST_REDwait: // wenn Status rot_warten
if (digitalRead (PinBut)) // wenn Schloss geöffnet
{
yellowPlus = (msec - msecLst); // ermittle die Zeit, die das Schloß zu war
if (yellowPlus < 60000) yellowPlus = 1000; // und setze passend dazu die Verlängerungszeit
if (yellowPlus > 119900) yellowPlus = 119900;
msecLst = msec; // merke die Zeit
state = ST_REDYellow; // wechsel Status zu rot_gelb
}
break;
case ST_REDYellow: // wenn Status rot_gelb
setLeds (Off, On, On); // stelle die Ampel
if ((msec - msecLst) > (PeriodYellow + yellowPlus)) // Wenn Zeit abgelaufen
{
state = ST_IDLE; // wechsel Status zu gruen
}
break;
case ST_IDLE: // Wenn Status gruen
default: // oder Status unbekannt
setLeds (On, Off, Off); // stelle Ampel
if (!digitalRead (PinBut)) // Wenn Schloss zu
{
state = ST_YELLOW; // wechsel zu Status gelb
msecLst = msec; // merke die Zeit
}
break;
}
}
void setup()
{
Serial.begin (115200);
Serial.println(F("Start..."));
for (unsigned n = 0; n < sizeof(PinLed); n++) // Setze alle Pins
{
digitalWrite (PinLed [n], Off); // aus
pinMode (PinLed [n], OUTPUT); // auf Output
}
pinMode (PinBut, INPUT_PULLUP);
}
Meine Ausgabe:
14:42:38.159 -> Start...
14:42:38.159 -> 100000
14:42:38.159 -> 100100
14:42:41.903 -> 100010 // Hier schalter an gemacht
14:42:42.897 -> 100001
14:42:45.914 -> 100011 // hier schalter aus gemacht
14:42:47.902 -> 100100
Falls sich außer mir noch jemand fragt, hab ich mal ein paar Kommentare zugefügt...
Hab ich Dir doch einen Link gegeben.
Grüße Uwe
Danke
![]()
Der Sketch läuft durch ohne das was passiert. Oder was machst du genau?
Ach...
Dann wird das nichts. Das beisst sich. Bau mal um:
Der Taster geht mit einem Kontakt an GND. mit dem anderen Kontakt an den PIN 11.
In meinem Sketch ist der interne PULLUP aktiviert - steht im Setup und ich werte den nach GND gedrückten Taster aus.
Jetzt geht es.
![]()
Muss nur noch Grün und Rot tauschen.
VIELEN DANKE DAFÜR. Jetzt will ich noch das Programm verstehen lernen.
Ich habe eigentlich noch so viele Fragen.
Macht das jetzt was das der Ohne Widerstand läuft?
Nein, der Widerstand ist dafür gedacht einen definierten Pegel beim Nichtdrücken zu setzen.
Das habe ich im Code mit dem aktivierten internen PULLUP gemacht.
Was hat der Pegel für einen Sinn?
Gestern habe ich dich total falsch verstanden, du meintest einen Toilettenlüfter. Nein, denn habe ich nicht vorgesehen, könnte man aber noch zufügen. Habe ja ein 4Kanal Relais.
Dann muss ich aber auch noch einen Lüfter verbauen.
Verdammt, noch mehr Arbeit.
Aber du bringst mich auf eine böse Idee
, ich habe noch einen MM mit Sprachausgabe, Spracherkennung und Gesichtserkennung. Der könnte sich ja auch beschweren, wenn es ihm stinkt.
LAs den Aufbau so und las folgenden Code laufen:
Taste gedrückt - LED geht an, Taste nichtgedrückt LED geht aus.
Geht niccht?
Jetzt weisst Du warum Du einen definierten Pegel brauchst.
const byte PinLed = 9 ;
const byte PinBut = 11;
void setup()
{
Serial.begin (115200);
Serial.println(F("Start..."));
pinMode (PinLed, OUTPUT); // auf Output
pinMode (PinBut, INPUT);
}
void loop ()
{
if (!digitalRead(PinBut))
{
digitalWrite(PinLed, HIGH);
}
else
{
digitalWrite(PinLed, LOW);
}
}
Ohne definierten Pegel wirkt Dein offener Eingang wie eine Antenne und kann beliebig LOW oder HIGH werden.
Gruß Tommy
Also den Widerstand wieder einbauen und abändern?
Eigentlich würde doch ein Arduino Nano dafür langen oder geht das dann nicht mehr?
pinMode (PinBut, INPUT_PULLUP);
Wenn du den internen verwendest ist doch alles in Ordnung.
Grüße Uwe
Ich hätte noch eine kleine Herausforderung, nur wenn de willst.
Ich bin ja aus der Industrie, und bei mir/uns muss jede Anlage eine Sicherheitsschaltung haben. Sprich, wenn ich sie wieder Nutze, muss es wieder verschließen und die Zeit neu gemessen bzw. dazu addiert werden.
Und was ist die Frage?
Um aus diesem Satz eine Herausforderung zu machen, sollte @kupper erklären, welche Funktion eine "Sicherheitsschaltung" bei einer Anzeige-LED haben soll. Und wie das "bzw." bei der Zeitmessung zu verstehen ist.
Bei "Wenn ich sie wieder Nutze" ist "sie" die Anlage, d.h. die Toilette bzw. deren Schließkontakt, und "Nutze" ist ein Öffnen oder Schließen des Kontakts, richtig?
Hallo,
durch Gas können bleibende Schäden bei Personen entstehen, insofern ist die richtige Sicherheitskategorie nach EN 954-1 / ISO 13849-1 zu berücksichtigen. Und die Anlage gegen unbeabsichtigte wieder Einschaltung zu schützen. Zweikanalig natürlich . ![]()
Zum Thema Zeit : PNOZ Sicherheitsrelais da wird sowas gemacht. ![]()
duck un weg
Heinz