Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] BrickletDualRelay -> On/Off mit SetMonoflop()

Featured Replies

Geschrieben

Hallo Zusammen,

 

ich möchte mein DualRelay gerne wie folgt ansteuern:

Wenn die Temperatur unter XGrad ist, dann soll Relay1 des DualRelayBricklets für den Zeitraum A eingeschaltet werden.

Danach soll es für den Zeitraum B ausgeschaltet sein und nach ablauf dieser Zeit wieder eingeschaltet werden.

Das ganze so lange im Wechsel, bis die Temperatur X erreicht ist...

 

Ist diese erreicht, soll das Relay1 ausgeschaltet bleiben, bis die Temperatur wieder unter X Grad liegt.

 

Lässt sich das mit SetMonoflop(); machen?

oder muss ich einen eigenen Counter laufen lassen, um den Statuswechsel durchführen zu können?

 

private void TemperatureBricklet(object tmpObj)
        {
            while (myTemp < 3000)
            {
                startHeating();
            }
        }

        private void startHeating()
        {
            TF_Bricklets.BrickletDualRelay.SetMonoflop(1, true, 10000);
        }

Geschrieben

Durch das Mono-flopping wird der heizer von alleine wieder ausgehen. Allerdings musst du nach dem Starten der Erhitzung selbst die Zeit A+B abwarten, um dann den Heizer wieder erneut einzuschalten.

Geschrieben
  • Autor

Also brauche ich einen Counter, der Anspringt, sobald das Relay durch den Monoflop ausschaltet - und wenn der Timer seine Zeit durch hat, wird das Relay wieder mit SetState(true, ...) eingeschaltet - bis das Monoflop ihn wieder ausschaltet...

 

hm...

Generell wäre das ja komplett dann über eigene Timer steuerbar - mit dem Unterschied, dass der Heizer im Schlimmsten Falle bei einem Disconnect der Verbindung oder einem Absturz der Software aktiviert bleibt... stimmts?

Geschrieben

Genau. Durch Monoflop kann die verbindung wegfallen und er schaltet trotzdem ab.

Geschrieben
  • Autor

aber es ist nicht möglich, ein Relay mittels SetState(true...) zu schalten und dennoch im Falle eines Disconnects den MonoflopCounter auszulösen?!

Geschrieben

Meinst du das MonoflopDone event?

 

Das kommt definitiv nur dann, wenn du auch verbunden bist.

Geschrieben
  • Autor

Hi, nein.... (oder doch?)

 

Ich hatte mir das ganze Ursprünglich wie folgt gedacht:

 

Ich setze den Status des Relay vom Bricklet auf true... und lasse weiterhin meinen Code laufen...

 

wird jetzt plötzlich die Verbindung getrennt (warum auch immer) setzt der Monoflop-Counter ein. und das Gerät schaltet das Relay auf false, wenn der MonoflopCounter abgelaufen ist.

Geschrieben

Ja das wird auch passieren. Aber dein Programm wird bestenfalls mitbekommen, dass die verbindung getrennt wurde, aber nicht wann der Counter das Relay zurücksetzt.

Geschrieben
  • Autor

dass das Programm davon nix mitbekommt macht nichts...

wenn der Rechner hängen bleibt oder probleme macht, dann bekommt das Programm sowieso nix mehr mit.

 

Mir ist nur aufgefallen, dass wenn ich den Status mit setState auf true setze, der Monoflop Counter eben nicht runterzählt und das Relay auf Off stellt, wenn z.B. das Programm beendet wird.

 

 

Beispiel:

Ich möchte im Programm das Relay einschalten.

Wie lange usw. ist jetzt erstmal unwichtig.

 

irgndwann soll das Relay wieder ausgeschaltet werden.

"Normalerweise" mit SetState(true...) und anschließend mit SetState(false...)

 

bricht jetzt die Verbindung ab, oder beendet sich die Software, sollte "in diesem Moment" der Monoflop-Counter beginnen und das Relay nach z.B. 20000ms auf false stellen (da ja die Kontrolle über das Programm fehlt).

 

Dies funktioniert aber nicht, wenn ich z.B. im Callback den Monoflop setze und an anderer Stelle dann dem Bricklet sage: SetState(true...)

 

bei der Simulation bleibt das Relay dann nach beenden der Software an.

Der MonoflopCounter wird also in diesem Moment nicht mehr "aktiviert"

Geschrieben

So ist das auch nicht gedacht. Du nutzt nur SetMonoflop mit true und SetState mit false. Das bedeutet wenn die Verbindung nach einem SetState(false) abbricht, dann bleibt es aus. Wenn sie nach einem SetMonoflop(true) abbricht, dann geht es von alleine aus, wegen des Monoflop-Counters.

 

Sehr einfaches Beispiel:

while(true)
{
  if(temp < minimumTemp)
  {
    relay.SetMonoflop(1, true, 12000);
  }
  Thread.Sleep(10000); //etwas kürzer schlafen als das Monoflop dauert, sonst schaltet sich das Gerät zwischendurch jedes mal kurz aus
}

Geschrieben
  • Autor

danke für das Beispiel...

da stand ich irgendwie voll auf dem Schlauch^^

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.