Артём Швыдкий

Модернизация наушников

4 сообщения в этой теме

Добрый день всем. 
Возник один вопрос, решил сделать себе беспроводные наушники. 
Даже получилось, но вот решил их оптимизировать и сделать возможность чтобы они работали на кабеле, когда батарея сядет.
Вот правда не знаю что для этого использовать, дело в том что замыкать контакты на bluetooth плате нельзя. По этому сразу думал использовать мультиплексоры для переключения между каналами входа. Та вод когда батарея сядет в ноль, они перестану работать и ничего не получится. 
Что можете посоветовать по этому поводу.
Использовал аудио-модуль Bluetooth 4.0 на BlueCore® CSR8645. 



 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
samogon    39

Поставить в наушники "гнездо" с переключающимеся контактами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    732
1 час назад, Артём Швыдкий сказал:

дело в том что замыкать контакты на bluetooth плате нельзя.

Их и не надо замыкать, паяй разъем для кабеля параллельно выходу модуля или же ставь гнездо с переключением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как правильно они называются и где такое можно купить? Как обычно, на китайских сайтах искать?  Мне нужно 4 контактное такое гнездо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Сообщения

    • Ну да, но тут обсуждали и 2.1 и 5., думаю место будет. Это мое мнение, с тех пор как дети у меня забрали мои комповые микролабы, пользую старый немецкий ресивер RFT, и пару автомобильных широкополосников в щитах. Хотел было что то купить, но понял что хорошее стоит дорого, а лишь бы что не нужно. Был в наличии данных рес, только движковые регуляторы поремонтировал, динамики нашлись на балконе, покупал в машину что то не дошли руки, Очень не плохо все звучит. Вот и подумал, что даже если купить все, то по соотношению сумма потраченных денег - качество звука, очень хорошее.
    • кто сказал что это условие будет выполнятся всегда? Если бы мс инкрементировали в этом же цикле, такое условие допустимо правильно писать if (millis() - lastmillis_mah) >= 1000) { }  
    • Пострадал следователь Лысейко...
      https://life.ru/t/новости/1135847/ubili_sobak_zabrali_20_tysiach_v_novoi_moskvie_oghrabili_eks-sliedovatielia_lysieiko
    • Пересоздал проект, ввел почти тот же код, почти все заработало корректно, но индикация через некоторое время останавливается (хотя микроконтроллер на кнопки реагирует). На железе индикация пропадает после 17 секунды, а в протеусе после 104. #include <EEPROM.h> #include <Bounce2.h> Bounce knopka_m = Bounce(); Bounce knopka_mah_plus = Bounce(); Bounce knopka_mah_minus = Bounce(); Bounce knopka_shl_plus = Bounce(); Bounce knopka_shl_minus = Bounce(); #define CLOCK 13 //SH_CP #define DATA 11  //DS #define LATCH 10  //ST_CP unsigned long lastmillis_show = 0; byte numbers[] = {0, 0, 0, 0, 0, 0}; volatile int rpmmah_count = 0; volatile int rpmshl_count = 0; boolean ee = 0; byte menu = 0; int mh = 1234; int hh = 0; int et_mah = 900; int et_shl = 80; int ot_mah = 30; int ot_shl = 3; int rpm_mah = 0; int rpm_shl = 0; unsigned long lastmillis_mah = 0; unsigned long lastmillis_shl = 0; unsigned char number[] = {   0b01111110, //0   0b00110000, //1   0b01101101, //2   0b01111001, //3   0b00110011, //4   0b01011011, //5   0b01011111, //6   0b01110000, //7   0b01111111, //8   0b01111011, //9   0b00000001, //-   0b00000000  //тушим индикатор }; // чтение int EEPROM_int_read(int addr) {   byte raw[2];   for (byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr + i);   int &num = (int&)raw;   return num; } // запись void EEPROM_int_write(int addr, int num) {   byte raw[2];   (int&)raw = num;   for (byte i = 0; i < 2; i++) EEPROM.write(addr + i, raw[i]); } void ee_write () {   EEPROM_int_write(0, mh);   EEPROM_int_write(2, hh);   EEPROM_int_write(4, et_mah);   EEPROM_int_write(6, et_shl);   EEPROM_int_write(8, ot_mah);   EEPROM_int_write(10, ot_shl); } void show() {   int x;   for (x = 5; x >= 0; x--) {     //включаем LATCH (Начинаем общение)     digitalWrite(LATCH, LOW);     shiftOut(DATA, CLOCK, LSBFIRST, number[numbers[x]]);     //отключаем LATCH (чтобы регистр не ждал данных)     digitalWrite(LATCH, HIGH);   } } void rpm_mahovik() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/   rpmmah_count++; } void rpm_shluz() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/   rpmshl_count++; } void setup() {   // put your setup code here, to run once:   Serial.begin(9600);   attachInterrupt(0, rpm_mahovik, FALLING);   attachInterrupt(1, rpm_shluz, FALLING);   pinMode(CLOCK, OUTPUT);   pinMode(DATA, OUTPUT);   pinMode(LATCH, OUTPUT);   digitalWrite(LATCH, HIGH);   pinMode(19, INPUT_PULLUP);   knopka_m.attach(19); // устанавливаем кнопку   knopka_m.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(18, INPUT_PULLUP);   knopka_mah_plus.attach(18); // устанавливаем кнопку   knopka_mah_plus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(17, INPUT_PULLUP);   knopka_mah_minus.attach(17); // устанавливаем кнопку   knopka_mah_minus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(16, INPUT_PULLUP);   knopka_shl_plus.attach(16); // устанавливаем кнопку   knopka_shl_plus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(15, INPUT_PULLUP);   knopka_shl_minus.attach(15); // устанавливаем кнопку   knopka_shl_minus.interval(5); // устанавливаем параметр stable interval = 5 мс } void loop() {   // put your main code here, to run repeatedly:   if (EEPROM.read(0) == 0xFF) {     ee_write ();   }   if ((millis() <= 100) & (ee == 0)) {     mh = EEPROM_int_read(0);     hh = EEPROM_int_read(2);     et_mah = EEPROM_int_read(4);     et_shl = EEPROM_int_read(6);     ot_mah = EEPROM_int_read(8);     ot_shl = EEPROM_int_read(10);     ee = 1;   }   if (millis() - lastmillis_mah == 1000) {     detachInterrupt(0);     rpm_mah = rpmmah_count * 60;     rpmmah_count = 0;     lastmillis_mah = millis();     attachInterrupt(0, rpm_mahovik, FALLING);   }   if (millis() - lastmillis_shl == 5000) {     detachInterrupt(1);     rpm_shl = rpmshl_count * 12;     rpmshl_count = 0;     lastmillis_shl = millis();     attachInterrupt(1, rpm_shluz, FALLING);   }   if (millis() - lastmillis_show == 1000) {     if (menu == 0) {       numbers[0] = rpm_mah / 1000;       numbers[1] = (rpm_mah % 1000) / 100;       numbers[2] = ((rpm_mah % 1000) % 100) / 10;       numbers[3] = ((rpm_mah % 1000) % 100) % 10;       numbers[4] = rpm_shl / 10;       numbers[5] = rpm_shl % 10;     }     if (menu == 1) {       numbers[0] = mh / 1000;       numbers[1] = (mh % 1000) / 100;       numbers[2] = ((mh % 1000) % 100) / 10;       numbers[3] = ((mh % 1000) % 100) % 10;       numbers[4] = 11;       numbers[5] = 11;     }     if (menu == 2) {       numbers[0] = et_mah / 1000;       numbers[1] = (et_mah % 1000) / 100;       numbers[2] = ((et_mah % 1000) % 100) / 10;       numbers[3] = ((et_mah % 1000) % 100) % 10;       numbers[4] = et_shl / 10;       numbers[5] = et_shl % 10;     }     if (menu == 3) {       numbers[0] = ot_mah / 1000;       numbers[1] = (ot_mah % 1000) / 100;       numbers[2] = ((ot_mah % 1000) % 100) / 10;       numbers[3] = ((ot_mah % 1000) % 100) % 10;       numbers[4] = ot_shl / 10;       numbers[5] = ot_shl % 10;     }     show();     lastmillis_show = millis();     Serial.println(lastmillis_show);   }   if (knopka_m.update() && knopka_m.read() == 0) {     if (menu != 3) menu++;     else {menu = 0; ee_write ();} //  Serial.println ("Knopka");   } //////////////////////////////////////////////////////////////////   if (knopka_mah_plus.update() && knopka_mah_plus.read() == 0) {     if (menu == 2) {       if (et_mah < 1000) et_mah = et_mah + 10;     }     if (menu == 3) {       if (ot_mah < 100) ot_mah = ot_mah + 1;     }   }   ////////////////////////////////////////////////////////////////////   if (knopka_mah_minus.update() && knopka_mah_minus.read() == 0) {     if (menu == 2) {       if (et_mah > 800) et_mah = et_mah - 10;     }   }   if (knopka_mah_minus.update() && knopka_mah_minus.read() == 0) {     if (menu == 3) {       if (ot_mah > 10) ot_mah = ot_mah - 1;     }   }   /////////////////////////////////////////////////////////////////////   //////////////////////////////////////////////////////////////////   if (knopka_shl_plus.update() && knopka_shl_plus.read() == 0) {     if (menu == 2) {       if (et_shl < 70) et_shl = et_shl + 1;     }     if (menu == 3) {       if (ot_shl < 20) ot_shl = ot_shl + 1;     }   }   ////////////////////////////////////////////////////////////////////   if (knopka_shl_minus.update() && knopka_shl_minus.read() == 0) {     if (menu == 2) {       if (et_shl > 30) et_shl = et_shl - 1;     }   }   if (knopka_shl_minus.update() && knopka_shl_minus.read() == 0) {     if (menu == 3) {       if (ot_shl > 0) ot_shl = ot_shl - 1;     } } }
    • Мультиметры, лазерные рулетки некоторое количество.
    • Ссылка отсылает на "Инструмент". Никакой "Измерительной техники" на сайте не обнаружил. Ни через меню (крайне неудобные), ни поиском по сайту.
    • А где Вы видели определившегося с выбором клонкостроителя? Как бороться за малое количество гармоник? Не вижу других путей, кроме массивов. Но есть подводные камни. На НЧ сложность одна - надо где то организовывать задние объёмы, пропорционально количеству динамиков. На ВЧ - другая сложность - фазовые приключения. Остаётся  - комплекс мер --строительсво системы --от КдП.
      Ближнее поле, обилие рассеивателей, расстояние от ушей до пищалки не более 2 метров. Тогда хватит одной маленькой пищалки, Герц с 5000, 2-3 порядком. Маленькой, из-за того что клеить к СЧ придётся высоко, и пищалка должна быть как можно более точечной. Хороший частный случай массива - дАпполито. По перегрузочной способности (т.е. и по гармоникам) - выигрыш, с фазой никаких дополнительных приключений в сранении с недапполито.