-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: speakjet mit mega 2560

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344

    speakjet mit mega 2560

    Anzeige

    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 Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    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 Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    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 Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    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
    Benutzer Stammmitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    79
    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 Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    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 Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    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
    Benutzer Stammmitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    79
    Die drei Anschlüsse reichen für erste Versuche auf jeden Fall.
    CTS (clear to send) wird nur benötigt, wenn lange Code-Reihen in einem Rutsch übertragen werden. Dann stoppt dieser Pin die Übertragung wenn der Buffer des Speakjet voll ist und gibt die Übertragung erst wieder frei, wenn Platz vorhanden ist. Ansonsten würde der Rest der langen Mitteilung einfach verloren gehen. Er spricht praktisch den Satz nicht zu Ende und verschluckt den Rest.
    Wie gesagt für einfache Sätze oder sogar nur Wörter spielt CTS keine Rolle.
    Auf meinem RP6 ist der SpeakJet auch nur 3-polig angeschlossen. Das reicht für ganze Sätze!

    Gruß Uwe

    - - - Aktualisiert - - -

    Noch ein Gedanke: Stimmt die Baudrate?
    Ich hatte damit anfänglich Probleme als ich mit Bascom und Mega 8 getestet hab.
    Ich musste erst lernen, das auch die richtige Taktfrequenz am Mega eingestellt sein musste, damit der Befehl "$baud = 9600" wirklich 9600 bedeutet!

    Gruß Uwe

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hallo Uwe,

    die frequenz ist es m.e. nach nicht, am mega kann ich ja relativ einfach die baudrate in der er den speakjet anspricht einstellen, es sind die 9600 baud. Es sei denn ich hätte unbewusst beim übertragen von irgendwelchem mist die baudrate des speakjet verstellt. Kann man die dort irgendwie auslesen wie sie ist? Aber eigentlich glaube ich es nicht, weill ja die kommunikation nur bei 9600 klappt...
    gruß inka

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.245
    Denk ich auch nicht-das Ding funktioniert ja. Wobei: dass man RX und TX grundsätzlich über Kreuz anschliesst, hast du bedacht?
    Also: TX von dem Chip muss an RX vom Arduino und umgedreht...
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Arduion Mega 2560
    Von Wsk8 im Forum Arduino -Plattform
    Antworten: 4
    Letzter Beitrag: 24.06.2014, 23:31
  2. Hilfe mit Arduino Mega 2560
    Von tspg im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 14.01.2014, 14:28
  3. Debuggen rn mega 2560
    Von hexarobot im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 13.06.2009, 12: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, 14:09
  5. BASCOM - Mega 2560 support??
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 13.03.2005, 23:35

Berechtigungen

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