проблема Servo + Speaker

Rintslerr
Offline
Зарегистрирован: 17.12.2021

Приветствую всех, у меня вопрос.

Есть ли разумный способ заставить работать одновременно Servo и Speaker ???

Если нужен примерный код то вот:

(В данном коде используется серво на 8 порту, спикер на 9 порту, и SD карта откуда берём аудио файл в формате Wav, так же дабы не плодить задержки убраны все delay(); они заменены на millis() весь код в комментах для лучшего понимания.

#include <Servo.h> //подключаем библиотеку серво
#include <SD.h>      // включить библиотеку использования SD карт
#include <TMRpcm.h>  // библиотека  воспроизведения PCM/WAV файлов напрямую с SD карты
#include <SPI.h>     // включить библиотеку протокола SPI
const int chipSelect = 4;  //переменная для порта CS модуля SD
TMRpcm music;   // создать объект для использования WAV файлов
Servo myServo1; // задаём объект типа серво
unsigned long MyTime1; // Переменная MyTime для хранения времени
unsigned long MyTime2; 

void setup(){
  Serial.begin(9600); //открываем общение com порта
  myServo1.attach(8); //подключаем серво на 8 порт
  /////для SD карты и вывода звуков
  Serial.println("Инициализация SD-карты...");
  if (!SD.begin(chipSelect)) 
  {
    Serial.println("Инициализация НЕ удалась!");
    while (1);
  }
  Serial.println("Инициализация выполнена.");
  music.speakerPin = 9; //строго порт 9 на Uno, Nano и т.д. (порт звукового динамика)
  music.setVolume(5);   // от 0 до 7. Установка уровня громкости
  music.quality(1);     // 1 для 2x передескритезации, 0 для нормального режима
  //////
}

void loop(){
  //////Поворот серво
  if (millis() - MyTime1 >= 800){ //каждые 800 мс. выполнить 
    MyTime1 = millis();   // сброс таймера
    myServo1.write(random(40, 111)); //поворот серво на рандомный угол от 40 до 110 гр.
    }
  //////
  /////Запускаем звуки
  if (millis() - MyTime2 >= 2500){  //каждые 2500 мс. выполнить 
      MyTime2 = millis();   // скинуть таймер
      music.play("MY_FILE1.WAV"); //Запускаем звуковой файл с SD карты
    }
  //////
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Конечно есть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Rintslerr пишет:

Приветствую всех

И Вам не хворать!

Rintslerr пишет:

Есть ли разумный способ заставить работать одновременно Servo и Speaker ???

Конечно, есть.

Rintslerr пишет:

код

И что с ним не так? Что именно не работает?

Rintslerr
Offline
Зарегистрирован: 17.12.2021

С кодом всё ок. НО как бы я не изголялся заставить одновременно работать серво и спикер не удаётся, пробовал разные способы программирования.

Если вы утверждаете что способ есть. Можете представить любой способ одновременной работы серво и спикера?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Rintslerr,

Вы здесь новенький и, конечно же, не прочитали стартовую тему раздела "Пеочница". Потому вопрос задан отвратительно. Вы не только не написали в чём именно проблема и работают ли они (серва и спикер) у Вас по отдельности, но Вы также не написали, что Ардуина у Вас, откуда взята библиотека TMRpcm, родная ли библиотека для Servo и т.п.

Всё это приходится предполагать, путём трения хрустального шара (ХШ). А в случае ошибки, получится, что я бил пальцы об клавиши зазря, т.к. я решил, что у Вас Uno. а у Вас, оказывается Due!

Ну, хрен с Вами, ХШ подсказывает, что у Вас Uno, а библиотека вот отсюда. Так?

Если не так, то уж будьте любезны всё подробненько, т.к. однажды написав зря, второй раз я наугад писать не буду.

Итак, если у Вас та библиотека, что я привёл, плата типа Uno/Nano, по отдельности всё работает и т.п., то полезьте в файл "pcmConfig.h" библиотеки и раскомментируйте строку №42. У меня она такая

//#define USE_TIMER2

Потому что сейчас у Вас серва и плейер сидят на одном таймере и конфигурируют его каждый по-своему. И чего Вы сами этого не сделали? Там же комментарий есть (строка №41) - всё написано.

Rintslerr
Offline
Зарегистрирован: 17.12.2021

Таймеры спикера на сколько я знаю сидят по разным пинам:

Таймер 0  на портах D5 и D6

Таймер 1  на портах D9 и D10

Таймер 2 на портах D3 и D11

Вопрос не в библиотеках и всём остальном вы можете мне тупо дать любой код  в котором серво и спикер работают вместе.

Я же в первом посте сказал что вопрос в том Есть ли разумный способ заставить работать одновременно Servo и Speaker ??? Если есть то какой?  Потому что в интернете я не нашёл ни одной статьи где бы это показывали.

Код тут чисто только для примера, что если так сделать то работать не будет.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Итак, если у Вас та библиотека, что я привёл, плата типа Uno/Nano, по отдельности всё работает и т.п., то полезьте в файл "pcmConfig.h" библиотеки и раскомментируйте строку №42. У меня она такая


Не учите его жить, просто помогите материально ))

Rintslerr
Offline
Зарегистрирован: 17.12.2021

[/quote] Не учите его жить, просто помогите материально ))[/quote]

Я смотрю на этом форуме одни троли, умных людей нет. Ясно понятно. и вас туда же

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, все дураки какие-то лезут, отбиваться не успеваем.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Rintslerr пишет:

Таймеры спикера на сколько я знаю сидят по разным пинам:

Таймер 0  на портах D5 и D6

Таймер 1  на портах D9 и D10

Таймер 2 на портах D3 и D11

При чём тут это? При чём тут шимовские пины, если две библиотеки настраивают один и тот же первый таймер - каждая по своему! Вы сюда пришли поспорить со мною?

Rintslerr пишет:

Вопрос не в библиотеках и всём остальном

Если бы Вы действительно знали в чём "вопрос", то этого поста бы не было. Разве не так?

Rintslerr пишет:

вы можете мне тупо дать любой код

Я Ват тупо сказал, что раскомментировать. Вы можете это тупо сделать?

Я же в первом посте сказал что вопрос в том Есть ли разумный способ заставить работать одновременно Servo и Speaker ??? Если есть то какой?  Потому что в интернете я не нашёл ни одной статьи где бы это показывали.

Rintslerr пишет:

если так сделать то работать не будет.

По отдельности работает? Если одно закомментировать, а другое оставить? Тогда "тупо" делайте, что Вам говорят и выкладывайте результат. Или у Вас вообще ничего не работает и по отдельности тоже? Тогда сначала заставьте работать по отдельности, а потому делайте, что я Вам сказал.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
Не учите его жить, просто помогите материально ))
А я ему как помогаю?
ЕвгенийП пишет:
раскомментируйте строку №42.
Куда ещё материальнее-то?

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

sadman41 пишет:
Не учите его жить, просто помогите материально ))
А я ему как помогаю?

Дак по местному обычаю - неправильно. Он же просит код, а Вы ему что? Дефайн какой-то. Этак и универсальный void впарите.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

 а потому делайте, что я Вам сказал.

вы забыли добавить - щажже )))

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

sadman41 пишет:

ЕвгенийП пишет:

sadman41 пишет:
Не учите его жить, просто помогите материально ))
А я ему как помогаю?

Дак по местному обычаю - неправильно. Он же просит код, а Вы ему что? Дефайн какой-то. Этак и универсальный void впарите.

ты хочешь сказать, что у Евгения время разбрасывать камни закончилось, пришло время собирать камни?

а ТС скорее всего раскомментировал строку, чтобы можно было использовать 2-й таймер и смылся )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну от.  Разогнали пятничного авнаметателя.  А я тока вентилятор достал, чтоб отражать.  :) 

b707
Онлайн
Зарегистрирован: 26.05.2017

Rintslerr пишет:

Я смотрю на этом форуме одни троли, умных людей нет. Ясно понятно. и вас туда же

ну ты и дебил....

На всякий случай, если вдруг свершится чудо и тебе станет стыдно - тебе дали четкий ответ, КАК ЗАСТАВИТЬ СПИКЕР И СЕРВО работать одновременно - а ты вместо благодарности человеку нахамил....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, блиииин! Я тока вискарика принял, вернулся к компьютеру, а тема-то и затухла :-(((

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Ну, блиииин! Я тока вискарика принял, вернулся к компьютеру, а тема-то и затухла :-(((

это да, пятница не задалась )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Зря вчера пятничную тему прихлопнули. Поциент как раз созревал :-(