Buttons um Ordner direkt abzuspielen

Keypad

Die hattest du schon gepostet, oder?
Entschuldige meine Unaufmerksamkeit.

Die Tatstaur ist nicht symmetrisch, hab mich kurz eingelesen.

Hab auch eine Bib zu der gefunden, die Methide zur Auswertung kann ich da raus kopieren.
Dann nehmnuch das als #define Auswahl rein.

:innocent:

Das hätte ich nie rausgefunden. Aber bitte keine zu grossen Umstände.
Das ist ja nur eine Testtastatur.

das hat mich jetzt 5min gekostet.
Also der Rede nicht wert.

Die Funktionsergänzung wird einfach sein, ich muss nur meine, mit der neuen, schon vorhandenen, ersetzen.

hab den develop branch angepasst, sodass die Robotdyn Tastatur laufen sollte.
Bei Gelegenheit mach ich das alles noch etwas universeller.
Auch die Bennenung ist nich nicht ideal.

Aver für deine Zwecke müsdte das passen.
Du musst nur das define ROBOTDY_3X4 zusammen mit dem Rotary Switch aktivieren

Update
Hab eben doch nich schnell die Namen angepasst zu Analog Input.

Update 2:
hatte den Syntaxcheck nicht richtig laufen lassen…Fehler ist jetzt behoben und ich habe die defines in eine extra Datei „Configuration.h“ ausgelagert. Dort müsssen nun alle relvanten Einstellunge gemacht werden.

1 Like

Ich hab mir mal ein kleines Developer Board mit verschiedenen Eingabemöglichkeiten für die AiO gebaut, da sie jetzt die Grenzen festlegt für weitere Entwicklungen an meinem Fork.

Ich hab hier eine 4x4 Tastatur, eine IR Empfänger, einen Rotary Switch, einen Drehschalter und die typischen 5 Tasten.

Drehschalter, IR und Matrix werden alle gleichermaßen mit den Schortcuts belegt.
Die Matrix sollte sogar Tastenkombinationen ermöglichen von 2 Tasten.

1 Like

Moin Marco

Hab mir jetzt 10 Tasten mit 12 Widerständen á 1kOhm nach dem sugpanischen Vorbild zusammen gebaut und deinen Fork installiert. So richtig klappt die Zuordnung aber noch nicht, Taste 2 und 9 funktionieren… ich hab die alte Platine mit dem Nano und bekomme aber die Debug Funktion wegen Speichermangel nicht aktiviert. Hast Du zufällig einen Testcode der die gemessenen Analog Werte inkl. der Tastennummer über die Konsole ausgibt?

Gruß
Papa

Kannst du mir sagen welchen Branch du benutzt? master oder develop?
Ich bräuchte auch einen Auszug der #defines

Das ist mir erst Mal egal, ich wüsste nur gerne ob alle zehn Tasten wie gewünscht funktionieren, bzw, warum nicht. Aber „blind“ die Werte einzustellen, ist irgendwie blöd. Ich schätze es liegt an der „TOLERNACE“ (soll wohl tolerance" heißen?)

Hab jetzt aktuell die develop drauf. Aber wie gesagt, den „Drehschalter“ und Debug zusammen passt nicht in den Speicher.

    //#define AiO

/////!! NICHT ENTFERNEN!!/////
#if not defined AiO
#define VERSION_TONUINO 2.1
#else
#define VERSION_TONUINO 2.2
#endif
//////////////////////////////

//#define FIVEBUTTONS 
//#define DEBUG           //Debug Ausgaben in der Konsole
#define DEBUG_QUEUE   //Debug Ausgabe der Queue
//#define EEPROM_DELETE //Löscht den EEPROM bei jedem Start

#define PUSH_ON_OFF     //Ein Ausschalten des TonUINO //mit AiO nicht mehr nötig, da standardmäßig vorhanden
#define SPEAKER_SWITCH  //mit AiO nicht mehr nötig, da standardmäßig vorhanden
//#define POWER_ON_LED
//#define FADING_LED    //nur in Verbindung mit POWER_ON_LED

#if not defined AiO     //!Folgende Funktionen sind noch nicht für die AiO frei gegeben!
#define ANALOG_INPUT  //old ROTARY_SWITCH
//#define ROTARY_ENCODER
//#define ROBOTDYN_3X4  //Ersetzt die Auswertung des ANALOG_INPUT, durch eine für die Robotdyn 3x4 Matrixtastatur angepasste. ANALOG_INPUT muss zusätzlich aktiviert sein!
//#define IRREMOTE
#endif
//////////////////////////////////////////////////////////////////////////

///////// conifguration of the input and output pins //////////////////////
#define buttonPause A0 //Default A0; Pocket A2
#define buttonUp A1 //Default A1; AiO A2; Pocket A0
#define buttonDown A2 //Default A2; AiO A1; Pocket A1
#define busyPin 4

#define shutdownPin 7 //Default 7; AiO 7

#define openAnalogPin A7 //Default A7, muss ein unbelegeter, analoger Eingang sein

#ifdef FIVEBUTTONS
#define buttonFourPin A4 //Default A3; AiO A4
#define buttonFivePin A3 //Default A4; AiO A3
#endif

#define RST_PIN 9                 // Configurable, see typical pin layout above
#define SS_PIN 10                 // Configurable, see typical pin layout above

#if defined SPEAKER_SWITCH || defined AiO
#define SpeakerOnPin 8
#endif

#ifdef POWER_ON_LED
#define PowerOnLEDPin 6
#endif

#ifdef ANALOG_INPUT
#define ANALOG_INPUT_PIN  A4
//#define ANALOG_INPUT_SUPPLY_PIN 6 //Der Referenzpegel kann auch von einem freien Output Pin kommen
#endif

#if defined IRREMOTE
#define irReceiverPin 5                    // pin used for the ir receiver
#endif

#ifdef ROTARY_ENCODER
#define ROTARY_ENCODER_PIN_A 5 //Default 5; 
#define ROTARY_ENCODER_PIN_B 6 //Default 6; 
// #define ROTARY_ENCODER_PIN_SUPPLY 8 //uncomment if you want to use an IO pin as supply
#endif
//////////////////////////////////////////////////////////////////////////

////////// Button timings ////////////////////////////////////////////////
#define LONG_PRESS 1000
#define LONGER_PRESS 2000
#define LONGEST_PRESS 5000
//////////////////////////////////////////////////////////////////////////

////////// NFC Gain //////////////////////////////////////////////////////
//#define NFCgain_max   // Maximale Empfindlichkeit
#define NFCgain_avg   // Mittlere Empfindlichkeit
//#define NFCgain_min   // Minimale Empfindlichkeit
//////////////////////////////////////////////////////////////////////////

///////// conifguration of the rotary encoder ////////////////////////////
#ifdef ROTARY_ENCODER
#define ROTARY_ENCODER_STEPS 4
#endif
//////////////////////////////////////////////////////////////////////////

///////// conifguration of the analog input ////////////////////////////
#ifdef ANALOG_INPUT
#define ANALOG_INPUT_POSITIONS 10
#define ANALOG_INPUT_TOLERNACE 0.10
#define ANALOG_INPUT_REF_VOLTAGE 5.0
#define ANALOG_INPUT_RES_TO_GND 1 //Anzahl Widerstände zwischen der erten Stufe und GND
#define ANALOG_INPUT_RES_TO_VCC 1 //Anzahl Widerstände zwischen der letzten Stufe und VCC
#define ANALOG_INPUT_TRIGGER_TIME 50
#endif
//////////////////////////////////////////////////////////////////////////

Ach, wo ich Dich grad „am Rechner“ hab, was genau war noch Mal :

#define openAnalogPin A7 //Default A7, muss ein unbelegeter, analoger Eingang sein

Danke für deinen Support!

Ich habe keine Möglichkeit eingebaut die Analogwerte aus zu lesen.
Ich arbeite daran, die Analogen eingänge über das Adminmenü mit einem Befehl zu verknüpfen, völlig unabhängig von defines. Das dauert aber noch etwas.

Bis dahgin, bleibt dir nur mit einem Multimeter oder einem eigenen Test sketch, deinen Aufbau zu prüfen.

Kannst du eine Skizze von deinem Aufbau posten? Also einen Schaltplan und eventuell auch ein Bild? Dann kann ich dir die #defines geben, die passen sollten.

Danke für den Hinweis mit TOLERANCE, das ist natürlich falsch geschrieben in meiner Software.

A7 dient der ermittlung eines Random wertes für den Party oder Hörspielmodus. Der muss offen sein damit er floatet und zufällige Werte ausspuckt.

image

Wie gesagt, ich habe mich an diesen Schaltplan gehalten, aber statt der 3,3k habe ich 1k verwendet. Kann ich irgendwie auch „schnell“ die Buttons 1 bis 10 den Ordnern 1 bis 10 zuordnen ohne mich zig Mal durch das Admin Menü zu klicken?

Ich schau Mal ob ich einen Sketch auf die Reihe bekomme um die analogen Werte auszulesen. Vielleicht komme ich dann dem Problem auf die Spur.

Du könntest deine Wunschwerte in der Softare als Default werte setzen. Hier werden die Default werte gesetzt die bei einem EEPROM Reset geschrieben werden. Unter #define ANALOG_INPUT werden die Werte für die Slots auf 0 gesetzt. Du kannst jetzt jeden Slot mit den Werten befüllen, die auch auf die Karten geschrieben werden würden.
Du kannst die for-Schleife drin lassen und darunter, nur die Werte setzen, die relevant sind. Falls dir das zu kryptisch ist, schick mir doch per PN eine Liste mit den Ordnern & Modus.

void resetSettings() {
#if defined DEBUG
  Serial.println(F("reset EEPROM"));
#endif
  mySettings.cookie = cardCookie;
  mySettings.version = 2;
  mySettings.maxVolume = 25;
  mySettings.minVolume = 1;
  mySettings.initVolume = 18;
  mySettings.eq = 1;
  mySettings.locked = false;
  mySettings.standbyTimer = 0;
#if defined AiO
  mySettings.invertVolumeButtons = false;
#else
  mySettings.invertVolumeButtons = true;
#endif
  mySettings.shortCuts[0].folder = 0;
  mySettings.shortCuts[1].folder = 0;
  mySettings.shortCuts[2].folder = 0;
  mySettings.adminMenuLocked = 0;
  /* mySettings.adminMenuPin[0] = 1;
    mySettings.adminMenuPin[1] = 1;
    mySettings.adminMenuPin[2] = 1;
    mySettings.adminMenuPin[3] = 1;*/
  mySettings.savedModifier.folder = 0;//Default: 0
  mySettings.savedModifier.special = 0;//Default: 0
  mySettings.savedModifier.special2 = 0;//Default: 0
  mySettings.savedModifier.mode = 0;//Default: 0
  mySettings.stopWhenCardAway = false;
#if defined ANALOG_INPUT
  for (uint8_t i = 0; i <= ANALOG_INPUT_POSITIONS - 1; i++) {
    mySettings.anaInSlots[i].folder = 0;
    mySettings.anaInSlots[i].mode = 0;
    mySettings.anaInSlots[i].special = 0;
    mySettings.anaInSlots[i].special2 = 0;
    mySettings.anaInSlots[i].special3 = 0;
    mySettings.anaInSlots[i].special4 = 0;
  }
#endif
  for (uint8_t i = 0; i <= sizeof(myTrigger) - 1; i++) {
    mySettings.irRemoteUserCodes[i] = 0;
  }
  writeSettingsToFlash();
}

Deine #defines sehen im übrigen passend aus.

Ja, mit dem Code komme ich leider nicht klar. Mir würde es wie gesagt reichen, wenn die Tasten 1 bis 10 mit den Ordnern 001 bis 010 im Hörspielmodus belegt werden. Dann kann ich weiter testen.
Soll ich die Tolerance lieber erhöhen oder verkleinern? Was genau besagt der Wert?

Ich verstehe leider nicht wie dein Code funktioniert. Ich hatte bei einem anderen Projekt Mal vier Tasten an einem analogen Port und da musste ich zuerst für jede Taste den Wert ermitteln und dann im Sketch einen Bereich deklarieren innerhalb dessen die Tasten 1 bis 4 auslösen sollen. Dein Code scheint aber universell zu sein, egal wie viele Tasten ich anschließe?

Gruß
Papa - der jetzt langsam ins Bett muss.

ja ich habe das universell gestaltet, solange der Teiler aus gleichen Widerständen besteht.

Ich teile die ANALOG_INPUT_REF_VOLTAGE Spannung durch ANALOG_INPUT_POSITIONS + ANALOG_INPUT_RES_TO_GND + ANALOG_INPUT_RES_TO_VCC

auf jeden Wert wird +/- ANALOG_INPUT_TOLERNACE gerrechnet. Der Wert ist in Prozent/100 angegeben.

Wenn ANALOG_INPUT_TOLERNACE zu hoch ist schieden sich eventuell die Werte der einzelnen Schritte. Zu niedrig kann es passieren das der Wert nicht erkannt wird.

Wenn du Ordner 1-10 je im Hörbuch nutzen willst musst du den Code wie folgt anpassen und einemal den EEPROM Reseten. Über das Menü oder all drei Tasten bei Start gedrückt halten.

void resetSettings() {
#if defined DEBUG
  Serial.println(F("reset EEPROM"));
#endif
  mySettings.cookie = cardCookie;
  mySettings.version = 2;
  mySettings.maxVolume = 25;
  mySettings.minVolume = 1;
  mySettings.initVolume = 18;
  mySettings.eq = 1;
  mySettings.locked = false;
  mySettings.standbyTimer = 0;
#if defined AiO
  mySettings.invertVolumeButtons = false;
#else
  mySettings.invertVolumeButtons = true;
#endif
  mySettings.shortCuts[0].folder = 0;
  mySettings.shortCuts[1].folder = 0;
  mySettings.shortCuts[2].folder = 0;
  mySettings.adminMenuLocked = 0;
   mySettings.adminMenuPin[0] = 1;
    mySettings.adminMenuPin[1] = 1;
    mySettings.adminMenuPin[2] = 1;
    mySettings.adminMenuPin[3] = 1;
  mySettings.savedModifier.folder = 0;//Default: 0
  mySettings.savedModifier.special = 0;//Default: 0
  mySettings.savedModifier.special2 = 0;//Default: 0
  mySettings.savedModifier.mode = 0;//Default: 0
  mySettings.stopWhenCardAway = false;
#if defined ANALOG_INPUT
  for (uint8_t i = 0; i <= ANALOG_INPUT_POSITIONS - 1; i++) {
    mySettings.anaInSlots[i].folder = 0;
    mySettings.anaInSlots[i].mode = 0;
    mySettings.anaInSlots[i].special = 0;
    mySettings.anaInSlots[i].special2 = 0;
    mySettings.anaInSlots[i].special3 = 0;
    mySettings.anaInSlots[i].special4 = 0;
  }
for (uint8_t i = 0; i <=10; i++) {
mySettings.anaInSlots[i].folder = i+1; 
mySettings.anaInSlots[i].mode = AudioDrama;
}
#endif
  writeSettingsToFlash();
}

Ich habe für jede Taste die analogen Werte drei Mal ausgelesen. Kannst Du daraus den besten Wert für die Toleranz ermitteln? Oder muss ich an den Widerständen noch was ändern?

Keine Taste -> 567
Keine Taste -> 568
Keine Taste -> 570
Taste 1 -> 190
Taste 1 -> 189
Taste 1 -> 187
Taste 2 -> 308
Taste 2 -> 307
Taste 2 -> 304
Taste 3 -> 395
Taste 3 -> 395
Taste 3 -> 395
Taste 4 -> 464
Taste 4 -> 469
Taste 4 -> 465
Taste 5 -> 521
Taste 5 -> 521
Taste 5 -> 521
Taste 6 -> 607
Taste 6 -> 605
Taste 6 -> 605
Taste 7 -> 651
Taste 7 -> 652
Taste 7 -> 652
Taste 8 -> 712
Taste 8 -> 711
Taste 8 -> 709
Taste 9-> 783
Taste 9 -> 786
Taste 9 -> 785
Taste 10 -> 886
Taste 10 -> 882
Taste 10 -> 885
Keine Taste -> 567
Keine Taste -> 567
Keine Taste -> 569

Die Toleranz liegt hier bei weniger als einem Prozent.
Jetzt sehe ich auch eventuell das Problem.
Im Leerlauf bist du auf 50% der Referenzspannung. Das ist bei mir so nicht vorgesehen, da muss ich mal schauen was man da machen kann.
Aber nicht mehr heute, auch mein Bett ruft :yawning_face:

Ist doch gut, oder?

Ja, so ist der Schaltplan, hat mich auch gewundert. Bei Dir ist es nur eine Reihe? Kann ich ja schnell umlöten… bevor Du dir einen Kopf machst. :slight_smile:
Aber wo greife ich dann das Signal ab? Hmmm…

Danke & Gute Nacht

Habe mir deinen Schaltplan vom Drehschalter angesehen und meine Taster analog dazu verkabelt. Jetzt müsste es eigentlich funktionieren… die Zahlen sprechen für sich:

11:25:34.543 -> 1023
11:25:35.551 -> 1023
11:25:36.561 -> 134
11:25:37.549 -> 134
11:25:38.567 -> 242
11:25:39.581 -> 242
11:25:40.565 -> 341
11:25:41.585 -> 341
11:25:42.565 -> 434
11:25:43.584 -> 434
11:25:44.574 -> 521
11:25:45.594 -> 521
11:25:46.602 -> 605
11:25:47.587 -> 605
11:25:48.607 -> 686
11:25:49.591 -> 686
11:25:50.608 -> 766
11:25:51.593 -> 767
11:25:52.604 -> 848
11:25:53.591 -> 848
11:25:54.608 -> 932
11:25:55.622 -> 932
11:25:56.609 -> 1023
11:25:57.623 -> 1023
1 Like

Klappt leider nicht wie gewünscht. Habe jetzt die DEBUG Ausgabe für den Analog_Input gefunden und aktiviert. Auch ohne das ich irgend einen Taster drücke, erkennt er wahllos neue Positionen und spielt irgendwas ab… ich warte jetzt was Du dazu sagst.