Вопрос от новичка.

VOS
Offline
Зарегистрирован: 07.08.2015

Ситуация: Нашел в ютюбе хорошую тему, называется софтовый DTMF декодер. https://www.youtube.com/watch?v=NXvyFcXA0gc

Ради этого скетча я и брал ардуинку. Мне очень подходит это под один опыт на работе. Но, как бывает, все уперлось в нюанс.

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

И вот нюанс: в нижеприведенном скетче стоит delay(1000), и при нажатии клавиши на телефоне светодиод тухнет на 1с., а мне нужно, чтоб светодиод затухал, пока нажата клавиша, а при ее отпуске загорался.

Думал хватит для этого решения 3-х уроков Блюма, но что-то у меня не складывается. Если не затруднит, помогите. Заранее Спасибо.

Скетч:

#include <DTMF.h>
int sensorPin = A0;
float n = 128.0;
float sampling_rate = 8926.0;
DTMF dtmf = DTMF(n, sampling_rate);
float d_mags[8];
char thischar;
int ledPins[] = { // Массив для 10 PINS / реле.
2, 3, 5, 6, 7, 8, 9, 10, 11, 12 // 4-Pin, используется библиотекой!
};
void setup() {
for (int i = 0; i <= 9; i++) {
pinMode(ledPins[i], OUTPUT); // Весь массив ledPins делаем OUTPUT.
digitalWrite(ledPins[i], HIGH); // Весь массив ledPins делаем HIGH.
}
}
void loop() {
dtmf.sample(sensorPin);
dtmf.detect(d_mags, 506);
thischar = dtmf.button(d_mags, 1800.);
if (thischar) {
digitalWrite(ledPins[thischar - 48], LOW);
delay(1000);
digitalWrite(ledPins[thischar - 48], HIGH);
}
}
 
П.С.: Если для этого нужно глядеть библиотеку, то она здесь: https://yadi.sk/d/QwCqk-DOhS6nn 
(Скетч, там другой)
VOS
Offline
Зарегистрирован: 07.08.2015
#include <DTMF.h>
int sensorPin = A0;
float n = 128.0;
float sampling_rate = 8926.0;
DTMF dtmf = DTMF(n, sampling_rate);
float d_mags[8];
char thischar;
int ledPins[] = { // Массив для 10 PINS / реле.
2, 3, 5, 6, 7, 8, 9, 10, 11, 12 // 4-Pin, используется библиотекой!
};
void setup() {
for (int i = 0; i <= 9; i++) {
pinMode(ledPins[i], OUTPUT); // Весь массив ledPins делаем OUTPUT.
digitalWrite(ledPins[i], HIGH); // Весь массив ledPins делаем HIGH.
}
}
void loop() {
dtmf.sample(sensorPin);
dtmf.detect(d_mags, 506);
thischar = dtmf.button(d_mags, 1800.);
if (thischar) {
digitalWrite(ledPins[thischar - 48], LOW);
delay(1000);
digitalWrite(ledPins[thischar - 48], HIGH);
}
}

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Надобы кроме "Вопрос от новичка" в названии темы, намекнуть о чем вопрос.

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

А автор видео больше не хочет напрягаться?

Клапауций 998
Offline
Зарегистрирован: 12.08.2015

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

А автор видео больше не хочет напрягаться?

теперь это проблема форума, а не автора видео.

VOS
Offline
Зарегистрирован: 07.08.2015

Клапауций 998 пишет:

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

А автор видео больше не хочет напрягаться?

теперь это проблема форума, а не автора видео.

Автора видео уговаривал две недели ответить на первый вопрос. Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )

Клапауций 998
Offline
Зарегистрирован: 12.08.2015

VOS пишет:

Автора видео уговаривал две недели ответить на первый вопрос. Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )

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

VOS
Offline
Зарегистрирован: 07.08.2015

Да я вообще-то ответил на вопрос: "А автор видео больше не хочет напрягаться?"

Ушел в поиск. Но если, кто захочет помочь буду рад.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Попробуйте изменить свой кусок кода вот так:
if (thischar) {
digitalWrite(ledPins[thischar - 48], LOW);
}
else
{
digitalWrite(ledPins[thischar - 48], HIGH);
}
Извиняюсь за корявую вставку, в мобильной версии не доступны настройки.

VOS
Offline
Зарегистрирован: 07.08.2015

Спасибо. Попробую.

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

VOS пишет:

Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )

Понимаете, какая штука. Вот Вы говорите, что мог бы разобраться, но времени жалко. Т.е. Вам жалко времени для Вашей собственной задачи. А почему Вы уверены, что есть кто-то, кому не жалко СВОЕГО времени для ВАШЕЙ задачи?

Вы должны определиться для себя, чего Вы хотите: Вы хотите сделать это самостоятельно или Вы хотите просто иметь готовую игрушку? Если второе, то топайте в ветку "ищу исполнителя" и там Вам за деньги сделают. Если же превое, то напрягите мозги и подумайте. Я (и многие здесь) готов помочь человеку, который сам старается, но делать что-то за человека, который вообще не хочет этим заниматься сам, да ещё и задарма, э то простите, идиотизм.

Вам нужна помощь. Отлично, начинаю помогать. Вы пишете, что хотите "чтоб светодиод затухал, пока нажата клавиша, а при ее отпуске загорался". Позвольте заметить, что такого события, как "клавиша отпущена" в Вашей программе нет. У Вас есть событие "нажатие", а отпускания нет. Поэтому в сегодняшней Вашей программе просто нет возможности сделать что-то по отпусканию.

Поэтому, Ваши дальнейшие действия таковы:

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

2. Выбросить нахрен строки 23 и 24, а после строки 25 (нынешней) вставить проверку

if (<кнопка отпущена>) {
       digitalWrite(ledPins[thischar - 48], HIGH);
}

Вот и вся Ваша задача. Ничего в ней больше нет. 

VOS
Offline
Зарегистрирован: 07.08.2015

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

Ваши дальнейшие действия таковы:

Вот и вся Ваша задача. Ничего в ней больше нет. 

Евгений, спасибо. Такой ответ я и искал.

Говоря о времени, я сопостовлял ВАШИ 5-10 минут и МОЙ месяц. А так-то я уже 2 недели регулярно почитываю матчасть, но учусь в бою ).

Еще раз спасибо.