Bluetoothbox inkl. TonUINO nutzen

Hi Thomas,

hab’s getestet. Läuft! Ein toter Atmel ist fast wie ausgelötet ;o).

14.08.2021 Nachtrag: Schaltung funktioniert leider doch nicht. Nachfolgende Beachreibung ist also nicht anwendbar. Details siehe Beitrag 84: Bluetoothbox inkl. TonUINO nutzen - #84 von Nick-Spick

Anbei noch ein Schaltbild und der Testcode für’s Verständnis.

R1 hält Q1 zunächst geschlossen.
S1 macht auf Tastendruck Q1 leitfähig und wirft den NANO an.
Der hält dann über R2, D3 (OUTPUT) das Gate von Q1 auf LOW und hält sich somit selbst am Leben.
INPUT_PULLUP D4 ermöglicht die weitere Auswertung von S1 im laufenden Betrieb. z.B. als Play/Pause
Diode D1 entkoppelt dafür das Netzwerk S1, R3, D4 vom Rest der Schaltung. Damit der interne Pullup von D4 den Pegel an S1 anheben kann, ohne ungewollt über Q1 das Licht aus zu knipsen.
R2 und R3 sind Schutzbeschaltung. Dienen der Strombegrenzung, falls man was falsch programmiert hat, oder D3 zum Abschalten auf HIGH geht, und grad jemand S1 gedrückt hält.

#include <timeTrigger.h>

/*
Was passiert:
Reset des Nano / Hochlauf
Betrieb 10s nach letzem Tastendruck. Dann schaltet sich der Nano selbst ab.
Jeder Tastendruck setzt die Zeit zurück, so dass der Nano weiter 10s an bleibt.
*/

//D3 Out Keep alive (LOW active)
#define KEEP_ALIVE_PIN 3
//D4 button input (e.g. Play/Pause. Here used to retrigger keep alive time)
#define BUTTON 4

timeTrigger keepAliveTimer(T_10S, false);            // Zeitgestuerter Trigger Shutdown

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(KEEP_ALIVE_PIN, OUTPUT);
  digitalWrite(KEEP_ALIVE_PIN, LOW);      // Keep alive on startup
  keepAliveTimer.start();                 // Start Timeout for Shut down
  pinMode(BUTTON, INPUT_PULLUP);          // Pullup must be enabled to rise the voltage on the button to detect a press.
  pinMode(LED_BUILTIN, OUTPUT);           // Just to show an reaktion on the Button
}

// the loop function runs over and over again forever
void loop() {

  // keepAliveTimer expired?
  if (keepAliveTimer.trigger()) digitalWrite(KEEP_ALIVE_PIN, HIGH); //Shut down

  // reset keepAliveTimer if button has been pressed
  if (digitalRead(BUTTON)==LOW) keepAliveTimer.start(T_10S); // Reset Timer if button has been pressed 

  digitalWrite(LED_BUILTIN, digitalRead(BUTTON));
}

Alles zusammen < 1 Euro ;o).

3 „Gefällt mir“