Wählscheibentelefon mit MSM2 Soundmodul

Hallo
Ich bin neu in der Arduino-Welt und versuche mich gerade an einem Wählscheibentelefon, der nach dem wählen einer bestimmten Nummer (Hier die 3-Stellige Nummer 573) über ein MSM 2 Soundmodul von ELV eine MP3 Datei abspielen soll.

Ich habe den Schaltplan und den Sketch über ein Projektbuch gekauft und wollte es nun für mich aufbauen. Ich habe allerdings statt des Android-UNO ein Android Nano Every verwendet.

Jetzt zu meiner Frage: Wenn ich das MSM 2 Modul ganz normal anschließe (nicht über das Nano Every) dann spielt die Datei MP3 Datei ab. Wenn ich über das Nano Every gehe, passiert nichts.
Ist der Sketch falsch? Oder hätte ich ein UNO benutzen müssen- statt des Nano Every?

Der Unterschied liegt darin, dass ich nur ein GND in der unteren Zeile (A0-A7) habe und nicht wie beim UNO 2. Bin einfach mit allen Anschlüssen an GND gegangen.

Ein Bild vom Schaltplan wie ich es angeschlossen habe und den Sketch könnt ihr hier unten sehen.

Der schreibt mir auch immer: avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description Ich weiß leider nicht was das zu bedeuten hat.

Würde mich über ein paar Antworten freuen. Wie gesagt. Ich bin noch ganz neu im Andruino Programmieren.

//Festgelegte 3 Stellige Telefonnummer wählen und anschließend mp3File abspielen

int buttonstate;
int Schalter1 = 4;        //Wählscheibenunterbrecherkontakt an D4 anschließen, gegen GND. Das ist der Kontakt, der so oft schließt wie hoch die gewählte Ziffer ist
int Schalter2 = 5;        //Wählscheibenstartkontakt an D5 anschließen, gegen GND. Das ist der Kontakt, der schließt, sobald die Wählscheibe bewegt wird
int mp3file1 = 7;         //Hier den Trigger-Pin zum Abspielen von Datei 001 am mp3-player anschließen

int Dauer = 20000;        //Hier die Länge der mp3-Ansage angeben, danach schaltet der MSM2 wieder in den Ruhemodus. Darf nicht kürzer sein als die mp3-Datei!
int previous1 = LOW; 
int previous2 = LOW; 
unsigned long last_time1 = 0; 
unsigned long last_time2 = 0; 

int counter=0; 
int b=0; 
int c=0; 
int d=0; 
int Wert=0;
int Nummer=0;
  



void setup(){
  Serial.begin(9600);
  pinMode(Schalter1, INPUT_PULLUP);
  pinMode(Schalter2, INPUT_PULLUP);
  pinMode(mp3file1, OUTPUT);
  digitalWrite(mp3file1, HIGH);

  }

void loop()
{

    int reading1 = digitalRead(Schalter1);
    int reading2 = digitalRead(Schalter2);
 
 
    if (reading1 == HIGH && previous1 == LOW && (millis() - last_time1 > 45))     //Funktion zum Entprellen der Kontakte
    { 
        Wert++;
        last_time1 = millis();     
    } 

   previous1 = reading1;           

    if (reading2 == HIGH && previous2 == LOW && (millis() - last_time2 > 150))   
    {
        Nummer = Wert;                    //Nummer speichert die gewählte Ziffer
        Wert = 0;
        counter++;                        //counter gibt die Position der gewählten Ziffer in der Code-Zahl an: counter=1 bedeutet erste Stelle
        last_time2 = millis();   
    }
 
   previous2 = reading2;      


    Serial.println(Nummer);     
    Serial.println(counter);     
    
    
      if (Nummer == 5 && counter == 1)    //wenn beim ersten Wählen die 5 gewählt wurde usw.
      {
         b = 1;
      }
      
      if (Nummer != 5 && counter == 1)
      {
         counter = 0;
         b = 0;
      }

      if (Nummer == 7 && counter == 2 && b == 1)
      {
        c = 1;
      }
      
      if (Nummer != 7 && counter == 2)
      {
        counter = 0;
        b = 0;
      }

      if (Nummer == 3 && counter == 3 && b == 1 && c == 1)
      {
        d = 1;
      }

     if (Nummer != 3 && counter == 3)
      {
        counter = 0;
        b = 0;
        c = 0;
      }

  if (d == 1)
  {
    counter = 0;
    b = 0;
    c = 0;
    d = 0;

    delay(100);
    digitalWrite(mp3file1, LOW);  //Starte Datei 001 auf der SD-Karte
    delay(100);
    digitalWrite(mp3file1, HIGH);  
    delay(Dauer);               

    digitalWrite(mp3file1, LOW);  //Starte nochmal Datei 001
    delay(100);
    digitalWrite(mp3file1, HIGH);  
    delay(Dauer);               

    digitalWrite(mp3file1, LOW);  //Starte zum dritten Mal Datei 001
    delay(100);
    digitalWrite(mp3file1, HIGH);  
    delay(Dauer);               
  }
  
}

Das hört sich nach einem falschen oder nicht registrierten Board. Was hast Du denn eingestellt?

Ich hoffe das richtige. Ich denke aber der Sketch ist für das UNO geschrieben worden. Hätte nur nicht gedacht, dass das beim Nano Every einen Unterschied macht.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Du hast mindestens eins von mehreren Problemen

  • Einen Sketch auf deinen Avery kriegen
  • Wählscheibe erfassen und auswerten
  • Player ansteuern

Vermutlich ist Player per digitalWrite(pin, HIGH); dazu bringen, was zu tun, das einfachste.
Dazu muss aber Problem 1 erstmal vom Tisch und im Problemfall unabhängig von 2 getestet werden.

Viel Dank schon mal für die Antworten.

Liegt der Fehler den darin, dass ich den Nano Every falsch eingestellt habe? Oder ist der Every grundsätzlich nicht für "so eine Art" Sketch kompatibel? Ich habe mich wegen der größe für einen Every entschieden. Aber müsste ich nicht auch ein Sketch auf den Every draufbekkommen?

Falls ich eine falsche Einstellung habe, könnt ihr mir dann sagen, was genau ich ändern müsste in den Einstellungen?

Zur Wählscheibe:
Wenn ich an der Wählscheibe drehe, dann bekommt ich beim Seriellen Plotter auch kurze 1V Signale angezeigt. Leider zu schnell um davon ein Standbild zu erzeugen. Aber ich würde vermuten, das sind die Signale, wie häufig der Kontakt öffnet und schließt.( Bei der 5, 5 mal 1V Spitzen bei der 3, 3 mal 1V Spitze usw. damit dachte ich wäre die Wählscheibe schon "erfasst". Leider finde ich keine Infos oder Bibilotheken, ob ich den MSM2 includieren soll auf dem Every. Da bin ich noch unwissend.

Vielen Dank

Wenn du einen neuen Arduino hast, solltest du natürlich erstmal den Blink-Sketch draufkriegen, bevor du dich entscheidest, ob du ihn behalten willst. Ohne irgendwas dran anzuschließen (außer dem PC). Das gilt eigentlich für alle Modelle.

Von der Beschreibung des Projekts her gebe ich dir recht: Sollte auf den ersten Blick mit jedem Arduino gehen, also auch mit einem Every.

Der Blink Sketch hat funktioniert. Das habe ich schon ausprobiert.

Wenn der Blink Sketch ohne diese Meldung kompiliert und sich laden lässt, dann muss das auch für deinen Wählscheiben-Sketch (und dasselbe Ziel-Gerät) gelten. Der unterscheidet sich vom Blink-Sketch nur durch digitalRead - Aufrufe und pinMode(x, INPUT_PULLUP);
Ist es die Hardware ( 9V an Vin ), während du über USB den Sketch hochlädst ??? Kann ich kaum glauben, aber du kannst es testen.

Zumindest bei dem Teil, die Wählscheibe abzufragen, kann ich nur auf diesen Artikel und auf diese GitHub-Datei aufmerksam machen. Damit konnte ich auch bereits erfolgreich ein "altes" Telefon wieder aktivieren und bei richtig gewählter Telefonnummer eine Sounddatei abspielen (sogar inklusive Frei- und Besetztzeichen :wink: )

Allerdings würde ich dann dafür wieder ein Soundmodul empfehlen, was sich besser an den Arduino anbinden lassen würde (DFPlayer oder JQ6500) , aber die jeweiligen Pins des MSM2 kurz auf LOW zu ziehen, sollte auch problemlos funktionieren.

Vielen Dank für die Antworten. Ich werde es am WE testen :grinning:

Schau mal hier die Erklärung zu: avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description

Und hier nochwas brauchbares für das was du da machen willst:

Würde Dir aber einen DF-Player raten. Den kannst Du über seriel steuern.
Grüße Uwe

Frage: Welches Board hast du dabei benutzt?

Ich habe mittlerweile die Vermutung, dass ich ein anderes Board brauche. Laut meiner Anleitung sollte ein UNO oder NANO passen. Ich habe ja ein NANO EVERY probiert. Das hat nicht funktioniert. Jetzt habe ich ein UNO probiert. Leider auch ohne Erfolg.

Muss ich ein LEONARDO oder ein MICRO haben damit es funktioniert? Weil nur diese mit der Keyboard.h Bibliothek klar kommen?

Danke für die Info :grinning:

Ich habe, wenn ich mich recht erinnere, einen Nano genommen. Aber auch ein ProMini (5V/16MHz) geht dafür. Wenn du den Controller und das Soundmodul nicht alles mit ins Telefon stopfen willst, kannst du auch einen Uno R3 oder Mega nehmen :wink:
Mit dem Every habe ich leider keine persönliche Erfahrung, aber da sollte an sich auch nichts dagegen sprechen?

Was hingegen einschränkt, ist die plötzliche (oder habe ich da etwas überlesen?) Anforderung, die keyboard.h-Library mit einzubinden. Ging es bisher nicht nur um Nummernschalter der Wählscheibe auslesen und Sound abspielen?
Solltest du tatsächlich noch Tastatur-Befehle via USB an einen PC übermitteln wollen, dann ja... brauchst du doch den Leonardo oder ProMicro.

EDIT: ach, ich sehe gerade... in dem von mir verlinkten Beispiel wird das Telefon dazu benutzt als Keyboard-Ersatz Zahlen am PC einzugeben. Da kann für dich an sich alles, was die Keyboard-Ausgabe betrifft, ersatzlos gestrichen werden.

EDIT2: ich suche mal am Wochenende mein Programm von damals. Vielleicht bringt das auch ein Stück weiter... :wink:

Super! Danke das wäre sehr nett. Ich habe tatsächlich vor alles ins Telefon zu stopfen..deshalb auch der Nano Every. :sweat_smile:

Vielen Dank für diesen Hinweis. Das hilft mir schon mal weiter. Dann probier ich noch mal ein bisschen rum.

Lange ist's her... :sweat_smile:
Tatsächlich habe ich mich einer anderen Bibliothek bedient: nämlich der RotaryDialer.h von markfickett. Da bin ich etwas leichter dahinter gekommen, wie alles funktioniert.. :innocent:

Vielen Dank für diese tollen Tips.
Ich habe jetzt die RotaryDialer.h benutz und den Beispielsketch von

und jetzt sehe ich im Serial Monitor meine gewählte Nummer. :slight_smile: Vielen Vielen Dank euch für die Hilfe. Jetzt bin ich schon mal einen sehr großen Schritt weiter mit meinem Bastelprojekt;)

Schön, daß Du nicht gewartet hast, bis ich aus den Tiefen meiner Projektsammlung mein Halloween-Telefon herausgekramt habe :sweat_smile: Das zwei Jahre alte Ding ist nämlich ein (ich glaube man nennt es hier so:) Spaghetti-Code-Monster, das zwar funktioniert, aber alles andere als für jemand anderen außer mir zumutbar ist ;D
Ausserdem so mit zusätzlichen Funktionen vollgestopft (Klingeln mittels Solenoid, durch externes Signal eingehenden Anruf auslösen, Frei-/Besetzt-Zeichen für realistisches Anrufer-Feeling, Soundmodul JQ6500) , daß es erst abgespeckt werden muss, um für Dich sinnvoll zu sein.. :wink:

Aber wenn der hier von dir verlinkte Sketch schon funktioniert, dann ist das wichtigste ja schonmal geschafft :+1:
Ab jetzt kannst du jede gewählte Ziffer in ein Array ablegen, bei Erreichen der maximalen Nummernlänge das Array mit vorher festgelegten Nummern abgleichen und bei Treffer den entsprechenden Sound am MSM-Modul auslösen.