Vorstellung: Mikas Kassettenrekorder

Ich habe noch eine 5000mAh Powerbank in der Schublade gefunden. Mal sehen ob die noch was taugt.

Ich hab jetzt endlich meine Platine bekommen und gestern angefangen zu basteln.
Soweit läuft die Kiste schon und ich hab auch schon 2 RFID Karten programmiert. Jetzt muss ich noch die beste Lösung für mein Akku Problem lösen und die Komponenten fest einbauen.

Was ist denn die beste Lösung um die ganzen Platinen fest unterzubringen? Gibt es solche Gewinde Teile zum Rand kleben ans Gehäuse damit man die dann fest schrauben kann?

Generell kann man die Tonuino-Platine verschrauben, da sie entsprechende Bohrungen hat. In deinem Fall könntest du ein Stück Holz ans Gehäuse kleben und dann die Platine festschrauben (wenn es von der Höhe passt…). Oder direkt mit Heißkleber / Patafix / Powerstrip / Doppelklebeband / Klettverschluss.

Edit: Sehe gerade, dass @magges seine Platinen direkt am Gehäuse festgeschraubt hat.

Nicht ganz richtig. Ich habe Abstandshalter für Platinen in das Gehäuse geklebt und daran dann die Platinen festgeschraubt.

1 „Gefällt mir“

Abstandshalter hab ich mir jetzt auch schon bestellt

@paulaner Danke für deine ausführliche Arbeit. Ich klemme beim iRecorder im Moment am V+ Button, der fürs Tonuino trotz durchgekratzter Leiterbahnen immer gedrückt ist. Warst du mit dem Dremel erfolgreich? Ich fände die Lösung mit den abgelösten und wiederaufgeklebten Buttons wenig charmant. Noch viel weniger will ich allerdings eine Lochrasterplatine zusammenfummeln.

Hallo,
ich habe die Leiterbahnen nur durchgekatzt, allerdings gibt es auch dafür ein spezielles Werkzeug.
Natürlich geht es auch einfach mit dem Cuttermesser.

Ich denke aber du hast nicht alle notwendigen Leiterbahnen getrennt, sonst würde ja der ‚V+‘ Button nicht ständig Durchgang haben.
Am Besten testen mit einem Multimeter.

1 „Gefällt mir“

Jetzt nochmal mit Kraft hinterhergeschnitten und es funktioniert. Super.

Ich hätte noch eine Frage zu deinem Longpress-Code für die Lautstärke im aktuellen Dev-Build. Wenn ich da auf die von dir angegebene Zeile 644 springe, bin ich im #define busyPin 4. Ich fange mal mit Copypasta ab Zeile 641 an. Wäre das hier richtig?

#define buttonPause A0
#define buttonUp A1
#define buttonDown A2
#define busyPin 4
#define shutdownPin 7
#define openAnalogPin A7

#ifdef FIVEBUTTONS
#define buttonFourPin A3
#define buttonFivePin A4
#endif

#ifdef FIVEBUTTONS
volumeUpButton();
#endif

#define LONG_PRESS 1000

Button pauseButton(buttonPause);
Button upButton(buttonUp);
Button downButton(buttonDown);
#ifdef FIVEBUTTONS
Button buttonFour(buttonFourPin);
Button buttonFive(buttonFivePin);
#endif
#ifdef FIVEBUTTONS
volumeDownButton();
#endif
bool ignorePauseButton = false;
bool ignoreUpButton = false;bool ignoreDownButton = false;
#ifdef FIVEBUTTONS
bool ignoreButtonFour = false;
bool ignoreButtonFive = false;
#endif

Es ist schon länger her, als ich mich intensiv damit beschäftigt habe. ‚Immer her mit den Fragen‘ bezieht sich daher sehr zeitah, denn ich muss mich auch komplett neu in die Materie einarbeiten (bin nicht mehr der Jüngste).

Zu deinem ‚Problem‘. Bau es erstmal normal auf! Mit 5 Button und Klicks.
Wenn das funktioniert, Software sichern und dann Stück für Stück modifizieren.
Ich habe am 19. März 2019 genau beschrieben was ich geändert habe, das solltest du auch in einer neueren Version finden.

Genau, nur hat sich halt der Code geändert :slight_smile: Wenn du die paar Zeilen von davor und danach posten würdest, wäre der Kontext klar. Und ja, glaub mir, ich hab den ganzen Thread mehrfach gewälzt um die einzelnen Lösungen zu verstehen.

Welche Software verwendest du, welche Version?
Dann schau ich die mir an und sag dir wo.

Die aktuelle DEV aus dem Github.

Es gab da ein paar Bugfixes, daher wird die Zeilennummer so nicht mehr passen.

Zeile ab 807 und ab 820

void loop(){  // ----------------------------------------------------------------------------------
  do {
    checkStandbyAtMillis();
    fadeStatusLed(isPlaying());      // StatusLED    
    mp3.loop();
    // Buttons werden nun über JS_Button gehandelt, dadurch kann jede Taste
    // doppelt belegt werden
    readButtons();

    // admin menu
    if ((pauseButton.pressedFor(LONG_PRESS) || upButton.pressedFor(LONG_PRESS) || downButton.pressedFor(LONG_PRESS)) && pauseButton.isPressed() && upButton.isPressed() && downButton.isPressed()) {
      mp3.pause();
      do {
        readButtons();
      } while (pauseButton.isPressed() || upButton.isPressed() || downButton.isPressed());
      readButtons();
      adminMenu();
      break;
    }

    if (pauseButton.wasReleased()){
      if (ignorePauseButton == false)
        if (isPlaying()){
          mp3.pause();
          setstandbyTimer();
        }
        else if (knownCard) {
          mp3.start();
          disablestandbyTimer();
        }
      ignorePauseButton = false;
    } else if (pauseButton.pressedFor(LONG_PRESS) &&
               ignorePauseButton == false) {
      if (isPlaying()) {
        uint8_t advertTrack;
        if (myFolder->mode == 3 || myFolder->mode == 9){
          advertTrack = (queue[currentTrack - 1]);
        }
        else {
          advertTrack = currentTrack;
        }
        // Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
        if (myFolder->mode == 8 || myFolder->mode == 9){
          advertTrack = advertTrack - myFolder->special + 1;
        }
        mp3.playAdvertisement(advertTrack);
      }
      else {
        playShortCut(0);
      }
      ignorePauseButton = true;
    }

// ------------------------------------------------------------------------------
// änderung der Funktion Volume button

    if (upButton.pressedFor(LONG_PRESS)){
#ifdef FIVEBUTTONS
      volumeUpButton();
#endif
#ifndef FIVEBUTTONS
      if (isPlaying()){
        if (!mySettings.invertVolumeButtons){
          volumeUpButton();
        }
        else {
          nextButton();
        }
      }
      else {
        playShortCut(1);
      }
      ignoreUpButton = true;
#endif
    } else if (upButton.wasReleased()){
      if (!ignoreUpButton)
        if (!mySettings.invertVolumeButtons){
          nextButton();
        }
        else {
          volumeUpButton();
        }
      ignoreUpButton = false;
    }

    if (downButton.pressedFor(LONG_PRESS)){
#ifdef FIVEBUTTONS
      volumeDownButton();
#endif
#ifndef FIVEBUTTONS
      if (isPlaying()) {
        if (!mySettings.invertVolumeButtons){
          volumeDownButton();
        }
        else {
          previousButton();
        }
      }
      else {
        playShortCut(2);
      }
      ignoreDownButton = true;
#endif
    } else if (downButton.wasReleased()){
      if (!ignoreDownButton) {
        if (!mySettings.invertVolumeButtons){
          previousButton();
        }
        else {
          volumeDownButton();
        }
      }
      ignoreDownButton = false;
    }
#ifdef FIVEBUTTONS
    if (buttonFour.wasReleased()){
      if (isPlaying()) {
        if (!mySettings.invertVolumeButtons){
          volumeUpButton();
        }
        else {
          nextButton();
        }
      }
      else {
        playShortCut(1);
      }
    }
    if (buttonFive.wasReleased()){
      if (isPlaying()) {
        if (!mySettings.invertVolumeButtons){
          volumeDownButton();
        }
        else {
          previousButton();
        }
      }
      else {
        playShortCut(2);
      }
    }
#endif
// Ende der Buttons ---------------------------------------------------------------------
1 „Gefällt mir“

Vielen, vielen Dank.

@Manuel: Genau deswegen hab ich ja gefragt. Und jetzt haben wir eine Longpress-Aktualisierung auf der aktuellen Codebasis. Super.

Hallo,
ich habe heute auch meinen vierten Tonuino gebaut, diesmal auf Basis des iRecorders. Vielen Dank für die tollen Anregungen und Hilfe hier im Forum! :+1:
Es ist eine Kombination aus allem hier bereits genannten geworden. Auch wenn es für die Profis bestimmt keine Neuheiten sind hier ein paar meiner „Erkentnisse“ falls es jemandem hilft…

  • Habe die original Platine mit den Tastern verwendet obwohl ich zur Sicherheit auch eine Lochrasterplatte da hatte. Es hat nach gründlichem Trennen der Verbindungen super funktioniert.
  • Die Masse, die an allen Tastern anliegt, kann man auf der Platine auch einfach weiter nutzen. Das kann man mit einem Multimeter beim der Duchgangsprüfung gut identifizieren. Auch welcher der Kontakte genau schaltete, sollte man kurz duchmessen. Einer der Taster in der Mitte schaltet nämlich auch genau entgegengesetzt zu den anderen. (Hab leider schon alles zusammengeschraubt und kein Foto gemacht)
  • Bei der Eigenbau Powerbank muss man am Stepupwandler eine ganze Weile gegen den Uhrzeigersinn dehen bis die Volt von 3,7 auf 5V steigen.
  • Um die vorhandenen LED zu verwenden, habe ich einfach einen Wiederstand mit 1K Ohm vor + der LED gelötet und mit die Spannungsversorgung an den Tonuino geklemmt.
  • Der Schalter sitzt vor dem Stepupwandler.
  • Das USB-Kabel für evtl. Firmware Updates und dergleichen habe ich einfach unten aus dem Batteriefach geführt. War einfacher als eine Buchse die auch nicht lieferbar war. Gefällt mir jetzt auch besser.

Beim nächsten Mal würde ich aber an Stelle des Schalters einen Pololu Power-Switch einbauen und mich vielleicht auch für einen größeren Akku entscheiden.


Viel Spaß beim bauen und viele Grüße

Matis

2 „Gefällt mir“

Der Vollständigkeit halber ist es bei mir ab Zeile 1012. Das ist die erste aus dem Copypaste hier. Basiert aus dem aktuellen DEV-Build (Stand Nov 2020):

if (upButton.pressedFor(LONG_PRESS)) {
#ifdef FIVEBUTTONS
  volumeUpButton();
#endif
#ifndef FIVEBUTTONS
  if (isPlaying()) {
    if (!mySettings.invertVolumeButtons) {
      volumeUpButton();
    }
    else {
      nextButton();
    }
  }
  else {
    playShortCut(1);
  }
  ignoreUpButton = true;
#endif
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    if (!mySettings.invertVolumeButtons) {
      nextButton();
    }
    else {
      volumeUpButton();
    }
  ignoreUpButton = false;
}

if (downButton.pressedFor(LONG_PRESS)) {
#ifdef FIVEBUTTONS
  volumeDownButton();
#endif

Hallo,
nachdem ich lange Zeit hier stiller Teilnehmer war, wollte ich mich jetzt auch mal anmelden, da ich Fragen zum iRecorder habe.
Das Gehäuse habe ich vor einem Jahr gekauft und seitdem wartet es darauf als zweites Tonuino-Projekt umgesetzt zu werden. Der erste läuft schon lange bei meiner Tochter ohne Probleme :smiley:

Hier habe ich allerdings Probleme speziell mit den Buttons. Ich habe sie von der ursprünglichen Platine abgelötet (bin Löt-Anfänger), habe jetzt aber Probleme mit dem Verkabeln. Kann mir da jemand weiterhelfen? Den Schaltplan oben habe ich gesehen, aber auch da komme ich nicht ganz weiter.
Kann mir einer sagen:

  • An welches Beinchen müsste ich was löten?
  • Sind alle 5 Schalter gleich?
  • Wie muss ich diese betrachten? Einfach Schrift nach oben = Standard?

Speziell das Bild von Schreinibert finde ich super, aber auch verwirrend.
Für mich sieht es so aus:

  • GND kommt beim ersten Schalter auf Bein 1 und geht dann immer über Bein 2 auf den nächsten Taster Bein 1
  • Auslösen/ Schließen bei den ersten drei Tastern über Bein 4, bei den letzten zwei Tastern über Bein 3?

Ich hoffe mir kann jemand helfen, der mehr Ahnung davon hat als ich :laughing:

Hey :smiley:

Sorry, dass ich mich jetzt erst melde. In letzter Zeit schaffe ich es leider nur noch unregelmäßig hier in den Discourse… :confused:

Schau dir mal folgendes Bild an, dann sollte es hoffentlich schon klarer werden:

image

Die gegenüberliegenden Beinchen sind jeweils verbunden. Deshalb ist bei mir „oben“ GND und „unten“ das Signal angeschlossen (vereinfacht ausgedrückt). Und da alle Schalter an einer Masse hängen, habe ich es einfach so verdrahtet.

Hoffe, das hilft dir weiter :slight_smile:

2 „Gefällt mir“