РЕШЕНО Библиотека talkie.h работает не на те пины.

Тема в разделе "Флудилка", создана пользователем Ariadna-on-Line, 28 май 2021.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Библиотека голосового вывода. Плата Ардуино Уно R3. Библа может использовать пины 3 и 11. По дефолту - вывод на пин3 (PD3 прямой сигнал) и пин11 (PB3 инверсный сигнал). Погонял в Протеусе программки примеров. Вывод только на пин11, а он нужен для других дел. Задействовать пин3 не удается ни при каких аргументах функции voice(). Что нужно изменить в библиотеке, чтобы можно было выбирать режимы и выходы ?. Нашим гуру исправить библу наверняка будет как два пальца... С уважением.
    ПС. Проверить сейчас не на чем, но вряд ли затык в Протеусе.
    ППС. В оригинале код ввода АЦП -
    int voltage = analogRead(0) * 5.000 / 1.023;
    - дает завышенное значение. Вроде бы правильно -
    int voltage = analogRead(0) * 5.000 / 1.024;
    Код (C++):
    //  Voltmeter.cpp

    #include <Arduino.h>

    #include "Talkie.h"
    #include "Vocab_US_Large.h"
    #include "Vocab_Special.h"

    // This enables pin 3 AND pin 11 to increase volume if speaker is attached between 3 and 11.
    // use Talkie voice(true, false); if you only need pin 3 or if you want to use SPI which needs pin 11.
    Talkie voice;
    void sayNumber(long n);

    void setup() {
        pinMode(LED_BUILTIN, OUTPUT);
        Serial.begin(57600);
    #if defined(__AVR_ATmega32U4__) || defined(SERIAL_USB) || defined(SERIAL_PORT_USBVIRTUAL)  || defined(ARDUINO_attiny3217)
        delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor!
    #endif
        // Just to know which program is running on my Arduino
        Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_TALKIE));
    }

    void loop() {
        int voltage = analogRead(0) * 5.000 / 1.024;   // В оригинале  - ... * 5.000 / 1.023;
        Serial.println(voltage);
        sayNumber(voltage);
        voice.say(sp2_MILLI);
        voice.say(sp2_VOLTS);
        digitalWrite(LED_BUILTIN, HIGH);
        delay(1000);
        digitalWrite(LED_BUILTIN, LOW);
    }

    /* Say any number between -999,999 and 999,999 */
    void sayNumber(long n) {
        if (n < 0) {
            voice.say(sp2_MINUS);
            sayNumber(-n);
        } else if (n == 0) {
            voice.say(sp2_ZERO);
        } else {
            if (n >= 1000) {
                int thousands = n / 1000;
                sayNumber(thousands);
                voice.say(sp2_THOUSAND);
                n %= 1000;
                if ((n > 0) && (n < 100))
                    voice.say(sp2_AND);
            }
            if (n >= 100) {
                int hundreds = n / 100;
                sayNumber(hundreds);
                voice.say(sp2_HUNDRED);
                n %= 100;
                if (n > 0)
                    voice.say(sp2_AND);
            }
            if (n > 19) {
                int tens = n / 10;
                switch (tens) {
                case 2:
                    voice.say(sp2_TWENTY);
                    break;
                case 3:
                    voice.say(sp2_THIR_);
                    voice.say(sp2_T);
                    break;
                case 4:
                    voice.say(sp2_FOUR);
                    voice.say(sp2_T);
                    break;
                case 5:
                    voice.say(sp2_FIF_);
                    voice.say(sp2_T);
                    break;
                case 6:
                    voice.say(sp2_SIX);
                    voice.say(sp2_T);
                    break;
                case 7:
                    voice.say(sp2_SEVEN);
                    voice.say(sp2_T);
                    break;
                case 8:
                    voice.say(sp2_EIGHT);
                    voice.say(sp2_T);
                    break;
                case 9:
                    voice.say(sp2_NINE);
                    voice.say(sp2_T);
                    break;
                }
                n %= 10;
            }
            switch (n) {
            case 1:
                voice.say(sp2_ONE);
                break;
            case 2:
                voice.say(sp2_TWO);
                break;
            case 3:
                voice.say(sp2_THREE);
                break;
            case 4:
                voice.say(sp2_FOUR);
                break;
            case 5:
                voice.say(sp2_FIVE);
                break;
            case 6:
                voice.say(sp2_SIX);
                break;
            case 7:
                voice.say(sp2_SEVEN);
                break;
            case 8:
                voice.say(sp2_EIGHT);
                break;
            case 9:
                voice.say(sp2_NINE);
                break;
            case 10:
                voice.say(sp2_TEN);
                break;
            case 11:
                voice.say(sp2_ELEVEN);
                break;
            case 12:
                voice.say(sp2_TWELVE);
                break;
            case 13:
                voice.say(sp2_THIR_);
                voice.say(sp2__TEEN);
                break;
            case 14:
                voice.say(sp2_FOUR);
                voice.say(sp2__TEEN);
                break;
            case 15:
                voice.say(sp2_FIF_);
                voice.say(sp2__TEEN);
                break;
            case 16:
                voice.say(sp2_SIX);
                voice.say(sp2__TEEN);
                break;
            case 17:
                voice.say(sp2_SEVEN);
                voice.say(sp2__TEEN);
                break;
            case 18:
                voice.say(sp2_EIGHT);
                voice.say(sp2__TEEN);
                break;
            case 19:
                voice.say(sp2_NINE);
                voice.say(sp2__TEEN);
                break;
            }
        }
    }
     

    Вложения:

    • Talkie_lib.zip
      Размер файла:
      12,7 КБ
      Просмотров:
      131
    Последнее редактирование: 28 май 2021
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Может кому пригодится -
    С легкой душой сообщаю, что проблема оказалась не в коде и не в Протеусе, а в модели Ардуины Уно R3.
    Модель, которая появляется в списке Emulator - (библа Arduino, без кнопки ресета на плате) - глючит с данным кодом.
    Модель, которая появляется в списке Arduino - (библиотека Arduino TEP, кнопка ресет на плате) - ОК.
    Тему можно удалить.
    ПС. Библиотека Arduino TEP была скачана и установлена в Протеус вручную.
     
    arkadyf нравится это.