Bluetooth Erweiterung Pin Verwendung

Hallo,

ich habe eine Frage zur Bluetooth Erweiterung für die AiO.

Ich würde gerne, aufgrund der Planbarkeit meines Forks, wissen, welche Pins für die BT Erweiterung verbraucht werden.

Könntbihr dazu eine Aussage treffen?

Schöne Grüße

Vermutlich alle verfügbaren.

Ich bekomme gerade kein Zitat. Aber da steht: „Wenn du das BT Modul dran hast, 5 Buttons verwendest und die LEDs ansteuerst ist alles belegt.“

1 „Gefällt mir“

Danke
Und schade.
Hatte gehofft das wenigstens ein Analoger Pin übrig bleibt, den bräuchte ich.

Was hast du mit dem Pin vor? Für dich selber könntest du ggf. tricksen. Auf dem Button Board steht D6 zur Verfügung. Wenn einen Button da drauf umlegst kannst du einen beliebigen A Pin (von A1,2,3,4) frei machen.

Ich wollte ein Drehschalter/ Tastenfeld mit Shortcuts, einen IR Empfänger und einen Rotary Encoder anschließen.
Aber ich muss eines davon weg lassen.
Oder ich muss den Rotary Encoder doppelt belegen.

Ich wollte nur meine Möglichkeiten kennen, damit ich den Fork entsprechend anpassen kann und keine bösen Überraschungen erlebe.

7 Beiträge wurden in ein neues Thema verschoben: AiO Start Up Sound

@stephan ich habe noch eine Frage zu den Analogen Input Pins.
Welche Referenzspannung benut ihr auf der AiO?
3,3V oder 5V?
Auf die Button Erweiterung ist nur 5V raus geführt, richtig?

„Wir“ benutzen da gar nix. Das kannst du per Software wählen. Ist allerdings noch etwas buggy. Siehe z.B. hier oder hier. Was default ist weiss ich nicht. Um deine eventuell nächste Frage direkt mit zu beantworten, nein der AREF Pin ist nicht rausgeführt.

Richtig. Die 5V Spannung und GND dort gehört „eigentlich“ zu D6 welcher dann für z.B. WS281X LEDs benutzt werden könnte. Deswegen haben wir da die passende Spannung und GND hin gelegt.

1 „Gefällt mir“

Danke, dann muss ich mich mal einlesen in den Controller.

Falls es von Interesse ist was ich mit den ganten Pins vor habe:

Hallo @marco-117, hätte da ne schmutzige Idee. Leg doch den IR Empfänger zusammen mit einem Button auf einen Eingang.
Das Bitmuster des IR lässt du dann in der Tastenentprellung unter gehen. Und das jemand die Taste so schnell drückt, das ein gültiges IR Telegramm dabei raus kommt, ist unwahrscheinlich. Auch das jemand gleichzeitig das Gerät über Taste und IR bedient ist unwahrscheinlich. Und wenn, dann gewinnt halt die Taste.
Ansonsten kannst du aus den Analogen Pins auch mehrere Signale machen. Z.B. über nen Spannungsteiler auf Vcc/2. Das ist dann dein Ruhepegel. Eine Taste zieht auf Gnd, die zweite auf Vcc. Theoretisch kann man da noch mehr Stufen draus machen mit einem Widerstandsarray. Quasi wie bei den Adkey des DF Players. Ich meine gesehen zu haben, dass AceButtons solche Matrixkeys unterstützt. Mit Analog read kannst du das unterscheiden.

Richtig cool ist der Trick mit einem zusätzlichen Bitmustern. Dabei nimmst du wie oben beschrieben einen Analogeingang Pin1 und spannst ihn per Spannungsteiler auf Vcc/2. Dazu kannst du denn internen Pullup mit verwenden. Ruhepegel ist Vcc/2. Button 1 zieht auf Gnd. Button 2 zieht auf Vcc. Beide Entprellt mit z.B. 200ms.
Das Selbe machst du an einem Pin2 für Button3 und 4.
Jetzt haben wir schon 4 Buttons auf zwei Pins.
Jetzt erzeugst du durch ein und aus schalte des Bullups von Pin1 ein Bitmuster z. B. mit 50ms Pulsweite.
Button 5 schliest jetzt Pin1 und Pin2 kurz. Dadurch kannst du bei gedrücktem Button 5 das Pulsmuster von Pin 1 auf Pin2 sehen. Die Erkennung von Button 1-4 störrt das nicht, weil dein Pulsmuster mit 50ms in der Entprellung geschluckt wird.
So haben wir schon 5 Buttons auf 2 Pins.
Du könntest jetzt noch irgendeinen Ausgangspin von einer LED nehmen und darauf ein anderes Bitmuster modelieren. Das menschliche Auge sieht das nicht. Dieses Signal leitest du über Button 6 auf Pin 1 und über Button 7 auf Pin2. Wenn du auf Pin 1 bzw. 2 das LED Bitmuster siehst, dann sind Button 6 oder 7 gedrückt. Bei geschickter Wahl der Bitmuster kann man auch gleichzeitig gedrückte Tasten erkennen.

Mfg Nick

2 „Gefällt mir“

Hui, okay so viel Trickserei hätte ich mit nicht ausdenken können.

Ich habe ja eigentlich nur vier Analoge und einen Digitalen IO für alles was ich realisieren will.
A7, der aktuell für den Randomwert floatet, könnte man auch nehmen und das Random durch z.B. mit millis() generieren.

Aber ich will eigentlich keine Hardware Hacks. Der Fork soll auch für die Hardware Erweiterungen zugänglich bleiben.

Den Digital IO werde ich sicher für den IR Empfängfer brauchen müssen. Habe noch nicht nachgesehen ob die Analogen auch in der Lage wären, den IR zu beteriben.

Weiter war mein Plan einen Analogen Eingang für eine Matrix Tastatur zu verwenden. Es soll wohl möglichsein, diese so auf zu bauen, dass man auch Tastenkombis aus zwei Tasten erkennt. Hab mich damit aber noch nicht weiter befasst.

Bleiben noch zwei Analoge IOs.
Entweder ich nehme noch einen Analogen IO für eine kleinere Matrix, mit den vier Standardbuttons (Pause ist ja unveränderbar definiert) oder ich lege die vier auch auf die große Matrix. Wenn mein Plan aufgeht ist am Ende beides möglich und frei Konfigurierbar.

Alternativ kann man die zwei analogen Pins verwenden um den Rotary Encoder dran zu hängen. Dann muss man nur noch zwei der vier Standardpins auf die Matrix legen.

Ich stelle auch gerade in meinem Fork die Eingabenerkennung komplett um, sodass ich die Fernbedienung auch vollumfänglich nutzen kann. Ich abstrahiere die Eingaben auf Triggervariablen, die man dann setzt und im loop in Aktion umgewandelt werden.
So ist es egal wie viele Eingabetypen ich einbaue, die müssen nur die Trigger setzen.
So kann ich auch die Serielle Schnittstelle als Steuerelement für den ganzen TonUINO nutzen. Wäre vieleicht auch was für ein externes Tool interressant, weiß nur noch nicht genau wie :sweat_smile: mal sehen.

Ich weiß ja nicht wann dieser Wert gelesen wird. Sollte es aber im Setup geschehen, hast du jedesmal den gleichen „Zufall“, weil jedesmal der gleiche Milliwert entsteht.
Das kannst du umgehen wenn du einen EEPROM Wert abfragst, den du bspw. bei jedem Shutdown Befehl (oder wer per Hardware ausschaltet dann bei jedem Kartelesen) mit Millis() beschreibst.

Mit dieser kurzen Anmerkung hilfst du mir wahnsinnig weiter.

Erst gestern habe ich mich mit einer Excel- Tabelle dran gemacht sinvolle Widerstandskombinationen zu finden um dort eine recht verlässliche Kombination zu finden.
Nun werde ich mich auf diese Bibliothek stürzen.

Freut mich, hoffe ich habs nicht falsch gedeutet. Bei der Bib sind sehr viele Beispiele mit dabei. Die kann scheint es doch einiges.
Was mich allerdings stört ist der Ansatz mit dem Eventhandler. Der ist zwar grundsätzlich genial, wenn man relativ starre Zuordnungen zwischen Taste und Funktion hat. Wenn vordefiniertes Tastenereignis → Call Function. Aber eigentlich verbirgt sich hinter dem Tonuino eine Systematik, bei der die Tasten je nach Betriebsmodus die Funktion verändern. Es gibt keine feste Zuordnung zwischen Taste und einer einzelnen Funktion. Man muss die Eventhandler dynamisch an- bzw. abmelden. Das ist schon etwas umständlich.

Da scheint es mir fast einfacher, und vor Allem transparenter, ähnlich wie mit dem Ansatz des Modifiers in der Loop die unterschiedlichen Betriebsmodi bedarfsgerecht aufzurufen und im Bedienmodus die Tasten kontextabhängig abzufragen. Gerade bei Tastenkombinationen konnte ich nicht erkennen, wie man das mit dem Eventhandler am Besten abdecken kann.

Bin gespannt wie @Thorsten das in seiner neuen Version zusammen bringt.

Ich auch nicht ;o). Habe das aus einem sehr preiswerten Bluetooth Lautsprecher chinesischer Bauart, den ich ursprünglich als „fast schon fertig Tonuino“ verwenden wollte. Das Ding hat 2 Lautsprecher, zwei Verstärker IC’s, 5 Tasten, nen Akku, SD-Kartenslot und USB-Anschluss. Alles in einem soliden Gehäuse für 10 Euro. Der Plan war, das Original IC einfach mit nem Heißluftföhn von der Platine zu putzen und die Lödpads als Anschlusspunkte für den Tonuino zu nutzen. Aber letzterer ist ziemlich Fett. Außerdem ist mir noch nicht eingefallen, wie ich den SD-Kartenslott durch den DF-Player ersetze. Und zum Schluss kamen mir eine Holzkiste und die Oberfräse eines Bekannten dazwischen ;o).

Auf dem Weg dort hin, habe ich die Anschlüsse durchgemessen und bin drüber gestolpert, wie es die Füchse geschafft haben mit 3 Pins und einem Widerstand 5 Tasten (10 Zustände) abzufragen. Hab dafür ne Weile vor dem Oszi gesessen und noch länger aus dem Fenster geguckt, bis ich geschnallt habe, warum ich auf dem Bildschirm keine eindeutigen Schaltpegel sehe. Das war immer irgendeine krumme Spannung, die zu allem Überfluss dann noch gezappelt hat.

Aber klar, am Ende ist Bandbreite eben das Produkt aus Phase, Amplitude und Frequenz. Wir nutzen aktuell quasi nur die Amplitude. Der Macher von der Kiste hat noch die Frequenz dazu genommen.

Was meinst du an der Stelle mit Hardware Hack? Für die Doppelbelegung eines AI musst du nur einen Pulldown an deinem Taster vorsehen. Also einen von zwei Tastern mit einem 50 oder 100k Widerstand überbrücken. Das scheint mir doch durchaus breitentauglich, oder? Und dann hat man die verfügbaren Tastenanzahl schon verdoppelte. Und im Code ist das die Abfrage:

Wenn Spannung > 85% dann Taste 1, Wenn Spannung < 15% dann Taste 2. Alles dazwischen ist Ruhezustand.

Hab grad noch mal geschaut, gerade eine Zeilen / Spalten Auswertung von Tastern kann ACE Buttons wohl nicht. Das ButtonArray, das ich gesehen hatte war leider ein Array of Buttons, und keine Matrix. Schade. Aber auch da wird es was Fertiges geben.

Aber es gibt die Auswertung über eine Widerstandsleiter und einem AI zur Generierung virtueller Buttons. Vorteil ist, das man bei geschickter Wahl der Widerstandswerte auch alle Tastenkombinationen auswerten kann. Und für jede Kombinstion gibt es dann einen Virtuellen Button. Man muss also im Code nicht mehr die Kombination abfragen if Bt1 & Bt2 & Bt7. Sondern hat für jede Kombination einen eigenen Button. If Btn70. Je mehr ich drüber nachdenke, desto interessanter wird die Lösung. Hab nur noch keine Idee, wie man die Eventhandler mit den Modifiern vereinbahrt. Jemand eine Idee?

Interessant ist auch das Beispiel 8to3. Es nutzt eine binäre Codierung und kommt mit ein paar Dioden aus. Wenn man Taster mit zwei Schließern hat, dann sind es 6 Taster ohne Dioden. Nachteil dieser Lösung ist, dass man keine Tastenkombinationen erfassen kann.