Управление питанием DFplayer mini

И чем же это грамотней, сможете объяснить?
Для протекания тока цепь должна быть замкнутой. Если вам нужно выключить устройство, вы можете разомкнуть хоть плюс, хоть минус. Цепь для прерывания нижней ветви питания требует N-мосфета и получается проще и надёжнее.

По мне так это у вас просто инерция мышления, что нужно обязательно плюс от батарейки отключать. А на деле с точки зрения электроцепи разницы нет.

Понимаю. Дело в том, что это не финальный код. В цикле будут воспроизводиться еще 42 трека в зависимости от положения в пространстве, а то, что сейчас - воспроизводится при пробуждении и засыпании только один раз, поэтому таймер РАВЕН ==100 и не сбрасывает до засыпания.

Аргумент “HIGH” возможен, но я уже поменял на RISING - все осталось по прежнему. И еще откинул питание от плеера совсем. Не поверишь - те же симптомы, что и с ключом. Пин 4 опустил в “0” - не помогло, даже на полностью отключенном питании, т.е. VCC плеера висит в воздухе…

Линию Tx (пин 7) то же пустил через резистор 1 кОм - не помогло.

Это прерывание сбрасывает 30-и секундный таймер для засыпания при бездействии. Пока игрушка в руках таймер постоянно обнуляется, а если на 30 секунд оставить в покое - заснет…

А вы уверены, что на “холодном” контакте плеера есть то, что можно оторвать от земли? Плеер не лампочка и как сработает логика при отключении от GND - неизвестно. У тех ребят на англоязычном форуме ни хрена не получилось поэтому я не стал так делать… и, то же, ни хрена не получается…

странный вопрос. У плеера есть соединение с GND и без этого соединения ток через него проходить не сможет. Прервав это соединение, вы достигнете своей цели, снизив потребление плеера до нуля.

Другой вопрос, что общий уровень ваших сообщений заставляет сомневаться, чтто вы выбрали лучший вариант снижения потребления. У плеера есть режим сна и, мне кажется, вы просто не разобрались, как этим режимом пользоваться.

В целом эта дискуссия показывает интересную комбинацию - сами вы во многих вопросах разбираетесь слабо, а помогать тем, кто мог бы вам что-то подсказать, вы не хотите или вам лень.
Хотя, в принципе, эта комбинация типична для многих новичков - не очень грамотных, но очень гордых :slight_smile:

Я же уже говорил: функция sleep(); из библиотеки плеера нечего не дает. 25мА - что с ней, что без нее…

об этом я и говорил

Либо это потребление вообще не имеет отношения к плееру(например, из-за ошибки в схеме, которую мы не видели) , либо вы используете режим сна неправильно.

Ну, во первых таймер у вас сбрасывает не прерывание а

А во вторых я имел ввиду, что на кой надо дро… постоянно установку/отключение прерывания, когда разумней перед сном включить, а при срабатывании один раз выключить прямо в функции.

Да там еще куча кривизны в коде
Типы переменных от балды… номера пинов в типе инт … Скважность ШИМ в двух переменных - одна в типе флоат… вторая в инт
Или взять хотя бы вот это

неужели чтобы просто плавно мигать светодиодами, нужна вся эта зубодробительная математика?

в этом месте, наоборот, прерывание сбрасывает таймер и меняет крутизну гауссовой кривой на иллюминации пока игрушка в руках…

if (millis() - tmr3 >= 30000) {
        //tmr3 = millis();

Да. В этом месте сбрасывать таймер не надо…

Я этот кусок кода взял вот отсюда:

https://makersportal.com/blog/2020/3/27/simple-breathing-led-in-arduino

пример гауссовой кривой. Прикольно смотрится…

не все в инете стоит повторять. Или, хотя бы, исправить ошибки прежде чем вставлять в свой код.
Пример не содержит критичных ляпов, но в целом довольно-таки безграмотный.

Если Вы про

вот этот пример
// RGB LED Gaussian Wave Breathing LED

int led_pins[4] = {3,5,6};
int jj = 1; // 0 = red, 1 = green, 2 = blue
float smoothness_pts = 500;//larger=slower change in brightness  

float gamma = 0.14; // affects the width of peak (more or less darkness)
float beta = 0.5; // shifts the gaussian to be symmetric

void setup() {
  Serial.begin(9600);
  for (int ii = 0;ii<sizeof(led_pins)/sizeof(int);ii++){
    pinMode(led_pins[ii],OUTPUT);
  }
}

void loop() {
  for (int ii=0;ii<smoothness_pts;ii++){
    float pwm_val = 255.0*(exp(-(pow(((ii/smoothness_pts)-beta)/gamma,2.0))/2.0));
    analogWrite(led_pins[jj],int(pwm_val));
    delay(5);
    Serial.println(int(pwm_val));
  }
}

то Вы невнимательно посмотрели. Содержит, как впрочем, и все остальные.

pwm_val сразу вычислить интом?? Сейчас попробую...

Да. Ничего не поменялось, а память освободилась. pwm_val убрал совсем считаю сразу int h_leds;

ну да :slight_smile: это сильно

Но как раз это ТС поправил (случайно ?), изменив число диодов

Да, это то ладно. Там автор говорит об RGB светодиоде и назначает ему три ноги (видимо, четырёхногий светодиод). А потом про это забывает и везде работает только с одной ногой. Зачем ему этот массив вообще непонятно.

Не случайно… У меня их 6… красных… ярких.

Во… родил схему в онлайн дизайнере для ардуин. Номиналы резисторов не понял как изменять….

И стоило этим заморачиваться? Такое можно и в голове держать. А если что то изменится? Ардуина тем и хороша, что можно импровизировать…

Вот этим – не стоило. Из Вашего наскального рисунка даже невозможно понять как транзисторы подключены. Не говоря уж про то, что провода разных цветов накладываются друг на друга так, что нижнего не видно, а потом он где-то выныривает.

Пока у Вас будут такие схемы, так оно всё и работать будет.

Это заметно. Вы всё держали в голове и всё прекрасно заработало.

Перерисовывать

Так и радуйтесь жизни, зачем Вы топик-то создали?

Вам виднее :slightly_smiling_face: А нам виднее, что про бузи(бикукле) вы ни разу не упомянули за 98 сообщений, ни в скетче не участвует(закоменчено). А сколько ещё таких “само собой разумеющихся”?