Гуру
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
|
а вот простой готовый скетч для регулировки громкости, собирай, прошивай ардуину и регулируй. Начальная громкость -35dB. Никаких плюшек, только громкость!
PHP код:
//Для запуска tda7442 достаточно загрузить скетчь который ниже в ардуино /* вход к джеку наушников телефона выход - на линейный вход активной акустики. Прицепил 2 кнопки для теста ( подтяжку не надо, использую внутренние резаки; один конец на минус, второй на 52 и 53 пины) скетч, при нажатии кнопок громкости в ком порт идут значения громкости 0-80 звук есть, 80-255 Mute. Монитор ком порта работает только когда есть питание на TDA7442! */
#include "Wire.h" //добавление библиотеки I2C шины //настройка кнопок громкости const int volUPbutton = 52; // номер пина на подключение кнопки VOL+ const int volDNbutton = 53; // номер пина на подключение кнопки VOL-
int buttonStateVOLup = 0; //переменная для чтения статуса кнопки int buttonStateVOLdn = 0; //переменная для чтения статуса кнопки byte MasterVolume = 35; // переменная, хранящая в себе громкость выходного звука, 0 - макс громкость, 79- минимальная, 80-255 MUTE http://arduino.ru/Reference/Byte Тип данных byte 8-ми битное беззнаковое целое число, в диапазоне 0..255 void setup() { pinMode(13, OUTPUT); // настройка пина встроенного светодиода на выход (чтоб моргать мог) pinMode(volUPbutton, INPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости + pinMode(volDNbutton, INPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости - digitalWrite(volUPbutton, HIGH); // включить подтягивающий резистор http://arduino.ru/Tutorial/DigitalPins digitalWrite(volDNbutton, HIGH); // включить подтягивающий резистор
Wire.begin(); // включение библиотеки I2C шины delay(1000); Serial.begin(9600); // ком порт Serial.println(MasterVolume); delay(1000); } void loop(){
buttonStateVOLup = digitalRead(volUPbutton); // читаем статус кнопки volUPbutton // проверяем, нажата ли кнопка if (buttonStateVOLup == LOW) { digitalWrite(13, HIGH); if (MasterVolume==0){Serial.println ("I tak VOLUME MAX (0dB)"); } else (MasterVolume--); Serial.println(MasterVolume); delay(50); } //если нажата кнопка VOL+, то включаем светик, уменьшаем переменную громкости (для увеличения звука)выводим значение громкости в порт и паузу от дребезга else { digitalWrite(13, LOW); }//если нет - просто тушим светик. buttonStateVOLdn = digitalRead(volDNbutton); // читаем статус кнопки volDNbutton // проверяем, нажата ли кнопка if (buttonStateVOLdn == LOW) { if (MasterVolume==80){Serial.println ("I tak VOLUME MIN (80dB-MUTE)");} else (MasterVolume++); Serial.println(MasterVolume); delay(30); }//если нажата кнопка VOL- увеличиваем переменную громкости (для уменьшения звука)выводим значение громкости в порт и паузу от дребезга
/* tda7442(0, 0b01100000); //INPUT ATTENUATION -16dB (0b - показывает, что данные будут в двоичной форме. ) потом идут разряды D7 D6 D5 D4 D3 D2 D1 D0 по даташиту (5,1 пункт) D7 это B ( в табличке, B = 1 incremental bus; active B = 0 no incremental bus;X = indifferent 0,1)поэтому D7 будет 0. D7 D6 D5 D4 D3 D2 D1 D0 B X X X 0 0 0 0 INPUT ATTENUATION (из даташита)
X X X 0 0 0 0 INPUT ATTENUATION
*/
tda7442(0, 0b01000000); //INPUT ATTENUATION приглушение ВХОДНОГО (IN1-IN4) канала (0 ~ -31.5dB)(0db-макс громкость, без приглушения) tda7442(1, 0b00000110); //SURROUND & OUT & EFFECT CONTROL( -6 FIX OFF) tda7442(2, 0b00000011); //SURROUND PHASE RESISTOR( 37KOm) tda7442(3, 0b00011111); //BXXX0011 BASS SELECTION (0dB)-14dB tda7442(4, 0b01111110); //BXXX0100 TREBLE (0dB) //tda7442(5, 0b00000000); //BXXX0101 SPEAKER ATTENUATION "L" (0dB)( SPEAKER SELECTION = 0dB ~ -79dB) громкость правого канала //tda7442(6, 0b00000000); //BXXX0110 SPEAKER ATTENUATION "R" (0dB) громкость левого канала // регулировку громкости можно делать 0dB ~ -79dB в DEC c шагом 1. если (80-255) - то MUTE tda7442(5, MasterVolume); //0 - макс громкость, 80-255 - MUTE . tda7442(6, MasterVolume); tda7442(7, 0b00000000); //BXXX0111 NOT ALLOWED tda7442(8, 0b00000000); //BXXX1000 NOT ALLOWED tda7442(9, 0b00000110); //BXXX1001 INPUT MULTIPLEXER выбор источника IN1-4 } void tda7442(int subaddress, int data) //Вызов tda7719 char?? { Wire.beginTransmission(0x40); //СТАРТ и Адрес микросхема tda7442 //или Wire.beginTransmission(0b1000000); //после beginTransmission дуина ждёт по линии ДАТА ответа от tda7442 ( присаживание линии на землю)и потом передает Wire.write(subaddress); //Подадрес команды Wire.write(data); //Команда //Serial.println(subaddress); //Пишем подадрем в монитор //Serial.println(data); //Пишем команду в монитор Wire.endTransmission(); //СТОП //delay(500); }
|