итак
подключил
вход к джеку наушников телефона
выход - на линейный вход активной акустики.
Прицепил 2 кнопки для теста ( подтяжку не надо, использую внутренние резаки; один конец на минус, второй на 52 и 53 пины)
скетч, при нажатии кнопок громкости в ком порт идут значения громкости
0-80 звук есть, 80-255 Mute.
Монитор ком порта работает только когда есть питание на TDA7442!
PHP код:
//Для запуска tda7442 достаточно загрузить скетчь который ниже в ардуино
#include "Wire.h" //добавление библиотеки I2C шины
//настройка кнопок громкости
const int volUPbutton = 52; // номер пина на подключение кнопки VOL+
const int volDNbutton = 53; // номер пина на подключение кнопки VOL-
int buttonStateVOLup = 0; //переменная для чтения статуса кнопки
int buttonStateVOLdn = 0; //переменная для чтения статуса кнопки
byte MasterVolume = 80; // переменная, хранящая в себе громкость выходного звука, 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); MasterVolume--; Serial.println(MasterVolume); delay(300); } //если нажата кнопка VOL+, то включаем светик, уменьшаем переменную громкости (для увеличения звука)выводим значение громкости в порт и паузу от дребезга
else { digitalWrite(13, LOW); }//если нет - тушим светик.
buttonStateVOLdn = digitalRead(volDNbutton); // читаем статус кнопки volDNbutton
// проверяем, нажата ли кнопка
if (buttonStateVOLdn == LOW) { MasterVolume++; Serial.println(MasterVolume); delay(300); }//если нажата кнопка 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
}
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);
}