- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 13

Thema: speakjet mit mega 2560

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180

    speakjet mit mega 2560

    halloallerseits,

    angeregt durch basteluwes projekt für den RP6 baute ich auch etwas:
    Klicke auf die Grafik für eine größere Ansicht

Name:	2016_04_16_speak_jet_pcb_fertig-1.jpg
Hits:	13
Größe:	50,1 KB
ID:	31514

    das modul funktioniert im demo modus,bei der verwendung eines sketches mit der arduino speakjet lib gab aber es beim kompilieren fehlermeldungen, die ich nicht verstanden habe,deshalb probierte ich diesen code, der ohne die lib auskommt


    Code:
    //set up a new software serial port
    #include<SoftwareSerial.h>
    //rxPin:the pin on which to receive serial data
    //txPin:the pin on which to transmit serial data
    //SpeakJet shield versions 1.0 thru 1.2 uses these pins
    #definetxPin 2
    #definerxPin 3
    //SpeakJet shield version 1.3 or later uses these pins
    //#definerxPin 5
    //#definetxPin 6
    //set up the SoftwareSerial port to connect to theSpeakJet
    SoftwareSerialspeakJet = SoftwareSerial(rxPin, txPin);
    
    voidsetup()
    {
    //define pin modes for tx, rx pins:
    //pinMode(rxPin, INPUT); //not needed for this simpledemo
    pinMode(txPin,OUTPUT);
    speakJet.begin(9600);
    delay(1000);// wait a second for the Arduino resets to finish (says"ready")
    
    
    /*HELLO WORLD SpeakJet MSA phonemes (see page 16 of SpeakJet UserManual)
    20,96, 21, 114, 22, 88, 23, 5, 183, 7, 159, 146, 164, 147, 151, 145,176
    */
    //byte array holding speech data
    bytesayThis[] = {20, 96, 21, 114, 22, 88, 23, 5, 183, 7, 159, 146, 164,147, 151, 145, 176}; //say "hello world"
    //send it to the SpeakJet
    for(int i=0; i<sizeof(sayThis); i++) 
    {
    speakJet.write(sayThis[i]);
    }
    }
    
    voidloop()
    {}
    das hört sich leider nicht wie "hello world" an...

    Ich verstehe das so, dass die zu den codes zuhörigen phoneme aus dem speakjet chip mit dem sketch herausgelesen werden und nach der verstärkung wiedergegeben werde. Nur kommt da ganz was anderes an...

    Ich habe verschiedene dinge an dem sketch ausprobiert, z.b. mit einer schleife verschiedene codes direkt zu senden:
    Code:
    void setup()
    {
      // define pin modes for tx, rx pins:
      // pinMode(rxPin, INPUT); //not needed for this simple demo
      pinMode(txPin, OUTPUT);
      speakJet.begin(9600);
      delay(1000); // wait a second for the Arduino resets to finish (says "ready")
    }
    
    
    void loop()
    {
      for (uint8_t i = 128; i <= 164; i++)
      {
        speakJet.write(i);
        delay(500);
      }
    
    
    }
    oder per direkte write anweisungen nur einzelne phoneme geschickt:
    Code:
    speakJet.write("147");
    speakJet.write("191");
    speakJet.write("156");
    irgendwelche töne kamen immer an, nur nicht die, die ich erwartet habe



    Wo sollte ich nach der ursache suchen?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Erstens: wozu softSerial beim Mega?
    Lass das weg-der Mega hat vier serielle Schnittstellen. Sind auch beschriftet, nimm eine davon, das schliesst schon mal Fehler mit der Bibliothek aus.

    Serial1.begin(9600)- startet die Kommunikation auf Serial1.

    Zweitens, (hier bin ich aber nicht _ganz_ sicher):
    Versuch mal, nur Werte unterhalb 128 zu senden.
    Könnte sein, dass unsigned int mit write nich klappt.

    Guck mal hier, wie man Strings sendet:
    https://www.arduino.cc/en/Serial/Write
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Lass das weg-der Mega hat vier serielle Schnittstellen. Sind auch beschriftet, nimm eine davon, das schliesst schon mal Fehler mit der Bibliothek aus.
    hast natürlich recht, das progrämmchen war für den uno, die änderung brachte diese änderung

    ausgabeschleife zum video:
    Code:
    for (int i = 128; i <= 199; i++)
      {
        Serial1.write(i);
      }
      delay(5000);
    Zweitens, (hier bin ich aber nicht _ganz_ sicher):
    Versuch mal, nur Werte unterhalb 128 zu senden.
    Könnte sein, dass unsigned int mit write nich klappt.
    eine ausgabe von 1 bis 127 gibt nichts aus, weil der speakjet keine codes für phoneme unterhalb von 128 kennt (nach manual)

    könnte der fehler bereits hier passiert sein?

    der sketch ist ja schon älter:
    Code:
    void setup()
    {
      // define pin modes for tx, rx pins:
      // pinMode(rxPin, INPUT); //not needed for this simple demo
      pinMode(txPin, OUTPUT);
      speakJet.begin(9600);
      delay(1000); // wait a second for the Arduino resets to finish (says "ready")
    
    
      /* HELLO WORLD SpeakJet MSA phonemes (see page 16 of SpeakJet User Manual)
       20, 96, 21, 114, 22, 88, 23, 5, 183, 7, 159, 146, 164, 147, 151, 145, 176
       v       s        p       b       H   f   E    L    O    W    A    L    E
       o       p        i       e       E   a   H    O    W    W    X    E    D
       l       e        t       n           s   L         W         R
               e        c       d           t   L         W         R
               d        h
      */
      // byte array holding speech data
      byte sayThis[] = {20, 96, 21, 114, 22, 88, 23, 5, 183, 7, 159, 146, 164, 147, 151, 145, 176}; //say "hello world"
      // send it to the SpeakJet
      for (int i=0; i<sizeof(sayThis); i++)
      {
        speakJet.print(sayThis[i], BYTE);
      }
    }
    
    
    void loop()
    {}
    da gab es wegen BYTE fehlermeldungen beim compilieren. geändert habe ich das:

    Code:
        // byte array holding speech data
        byte sayThis[] = {20, 96, 21, 114, 22, 88, 23, 5, 183, 7, 159, 146, 164, 147, 151, 145, 176}; //say "hello world"
        // send it to the SpeakJet
        for (int i = 0; i < sizeof(sayThis); i++)
        {
          //    speakJet.write(sayThis[i]);
          Serial1.write(sayThis[i]);
        }
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Ja, das rumgebastele an der IDE nervt mitunter.
    Arrays sind leider ne ganz schwache Seite von mir (im allgemeinen kann ich eigentlich fast alles ohne lösen ), eventuell mal einfach die entsprechenden Bytes einzeln nacheinander senden?
    Mach ich beim Midi-Keyboard auch:

    Serial1.write(eventMsg);
    Serial1.write(pitchBendRechts&0x00);
    Serial1.write(pitchBendRechts>>7);
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Hallo Inka,
    ich würde gern helfen, bin aber was Arduino angeht selbst Anfänger und auch nur, weil ich mein Spracherkennungsmodul nicht anders zum Laufen kriegen konnte.
    Was den SpeakJet angeht, zeigt der Link, den du oben angegeben hast, wie es mit einem Mega8 unter Bascom sehr leicht geht.
    Und unter diesem Link hab ich meine Lösung für den RP6 mit C-programmierung gezeigt. Auch das funktioniert, allerdings aufwändiger. Vielleicht gibt dir das ja einen Schubs.

    Zu den Codes (Seite 15 des Manuals):
    000-031 sind Steuercodes, die die Ausgabe der Allophone beeinflussen, selbst aber keinen Sound erzeugen.
    032-127 sind reservierte Codes (wohl nicht nutzbar für User)
    128-254 sind echte Sound-Codes (Allophone)
    255 Rücksetzbefehl

    Gruß Uwe

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    http://airspayce.com/mikem/arduino/SpeakJet/ guck mal-damit wird es bestimmt einfacher.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hängt das evtl. mit der verbindung des speakjet mit dem arduino zusammen?

    bei mir ist (außer +5V und GND) nur der pin RCX(10) des speakjet mit dem serial ausgang 1 des mega (TX1) verbunden. Mancherorts ist aber auch die rede von CHIPREADY PIN? Was wäre denn das für ein pin?

    btw: beim üben mit den anweisungs-codes und pause-codes merkt man, dass sich was verändert. Das herumprobieren ist aber recht zeitaufwändig...
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    übrigens Uwe, Deine Sätze für den RP6 (z.b. "RP6 is ready to go") klingen einfach super. Wie hast Du es genau gemacht?
    gruß inka

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von inka Beitrag anzeigen
    übrigens Uwe, Deine Sätze für den RP6 (z.b. "RP6 is ready to go") klingen einfach super. Wie hast Du es genau gemacht?
    Das ist recht einfach und macht sogar Spaß (mir zumindest). Das Geheimnis lautet: Phrase-A-Lator
    Es ist eine Software, die von Magnevition kostenlos hier angeboten wird. Unten auf der Seite unter Dokumente gucken. Dann klemmst du den Speakjet über USB an den Computer.
    Nach dem Start der Software hast du dieses Fenster:
    Klicke auf die Grafik für eine größere Ansicht

Name:	bild1.JPG
Hits:	2
Größe:	29,8 KB
ID:	31522
    Du wählst den richtigen Com Port und drückst auf Test. Der Speakjet sagt nun das übliche "ready" und das Port-Fenster wird grün, wenn alles OK ist.
    Nun hast du jede Menge Möglichkeiten. Starte einfach mal den "Dictionary Editor":
    Klicke auf die Grafik für eine größere Ansicht

Name:	bild2.JPG
Hits:	2
Größe:	91,8 KB
ID:	31523
    Er zeigt alle Wörter, die schon vorab von jemandem definiert wurden, du also nicht mehr selbst "erfinden" musst. Hier werden auch die Wörter oder Phrasen abgelegt, die du selbst programmierst. Zum Test merke dir einfach ein Wort, das hier in der Liste schon drin ist und starte den Phrase editor:
    Klicke auf die Grafik für eine größere Ansicht

Name:	bild3.JPG
Hits:	2
Größe:	135,4 KB
ID:	31524
    In "Say Data" kannst du ein Wort, das es in der Liste schon gibt eintippen. dann auf "Say it" klicken und das Wort wird gesprochen.
    Viel interessanter ist aber das selbst gestalten von neuen Wörtern. Einfach mal auf die buttons klicken und du hörst, was der Chip jeweils sagt. Bei Doppelklick auf einen button wird das Kommando in das Say Data Fenster übernommen. So kannst du die einzelnen Allophone aneinander reihen und auch Pausen usw. einfügen. Zwischendurch immer mal auf "Say it" klicken, um zu hören wie's klingt. Wenn du meinst es ist OK, kannst du die neue Phrase im Dictionary abspeichern. Bei Klick auf "View Codes" werden die Werte angezeigt, die eigentlich wichtig sind:
    Klicke auf die Grafik für eine größere Ansicht

Name:	bild4.JPG
Hits:	2
Größe:	23,5 KB
ID:	31525
    Das sind die Codes, die du per Programm übertragen musst, um dein neues Wort sprechen zu lassen. Die vier 20er Codes am Anfang (gelb) sind übrigens für die Funktion nicht unbedingt wichtig. Wenn sie fehlen benutzt der SpeakJet seine Default Werte dafür. Ich lass sie immer weg im Programm.

    Abschließend noch einige Wörter, die ich selbst im Dictionary zugefügt habe und auch teilweise im RP6 nutze:
    Klicke auf die Grafik für eine größere Ansicht

Name:	bild5.JPG
Hits:	2
Größe:	29,9 KB
ID:	31526

    Na dann viel Spaß beim "Spielen"

    Gruß Uwe

    P.S. Leider ist in der Software kein Simulator für die Wiedergabe eingebaut, man muß also tatsächlich den Speakjet immer an den Computer anschließen, um mit der Software arbeiten zu können. Ich finde das nachteilig, aber so ist es einfach.

Ähnliche Themen

  1. Arduion Mega 2560
    Von Wsk8 im Forum Arduino -Plattform
    Antworten: 4
    Letzter Beitrag: 24.06.2014, 22:31
  2. Hilfe mit Arduino Mega 2560
    Von tspg im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 14.01.2014, 13:28
  3. Debuggen rn mega 2560
    Von hexarobot im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 13.06.2009, 11:21
  4. rn mega 2560 spinnt...
    Von goara im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 5
    Letzter Beitrag: 29.06.2007, 13:09
  5. BASCOM - Mega 2560 support??
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 13.03.2005, 22:35

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test