Вопрос от новичка.
- Войдите на сайт для отправки комментариев
Пт, 14/08/2015 - 13:19
Ситуация: Нашел в ютюбе хорошую тему, называется софтовый 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
(Скетч, там другой)
Надобы кроме "Вопрос от новичка" в названии темы, намекнуть о чем вопрос.
А автор видео больше не хочет напрягаться?
А автор видео больше не хочет напрягаться?
теперь это проблема форума, а не автора видео.
А автор видео больше не хочет напрягаться?
теперь это проблема форума, а не автора видео.
Автора видео уговаривал две недели ответить на первый вопрос. Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )
Автора видео уговаривал две недели ответить на первый вопрос. Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )
зачем ты грузишь форумчан своей автобиографией, если тебе нужно избавиться от делай и научиться плавно зажигать светодиод - в поиск по форуму, как мигать без делай и как плавно зажигат-гасить светодиод.
Да я вообще-то ответил на вопрос: "А автор видео больше не хочет напрягаться?"
Ушел в поиск. Но если, кто захочет помочь буду рад.
Попробуйте изменить свой кусок кода вот так:
if (thischar) {
digitalWrite(ledPins[thischar - 48], LOW);
}
else
{
digitalWrite(ledPins[thischar - 48], HIGH);
}
Извиняюсь за корявую вставку, в мобильной версии не доступны настройки.
Спасибо. Попробую.
Задал здесь вопрос, т.к. расчитывал,что ответ элементарный, только мне по неопытности не понятен. Я думаю за месяц самообразования смог бы разобраться. Но с поддержкой оно как-то сподручней. )
Вы должны определиться для себя, чего Вы хотите: Вы хотите сделать это самостоятельно или Вы хотите просто иметь готовую игрушку? Если второе, то топайте в ветку "ищу исполнителя" и там Вам за деньги сделают. Если же превое, то напрягите мозги и подумайте. Я (и многие здесь) готов помочь человеку, который сам старается, но делать что-то за человека, который вообще не хочет этим заниматься сам, да ещё и задарма, э то простите, идиотизм.
Вам нужна помощь. Отлично, начинаю помогать. Вы пишете, что хотите "чтоб светодиод затухал, пока нажата клавиша, а при ее отпуске загорался". Позвольте заметить, что такого события, как "клавиша отпущена" в Вашей программе нет. У Вас есть событие "нажатие", а отпускания нет. Поэтому в сегодняшней Вашей программе просто нет возможности сделать что-то по отпусканию.
Поэтому, Ваши дальнейшие действия таковы:
1. Выясить как эта библиотека сообщает Вам об отпускании кнопки. В описании библиотеки, в примерах, как угодно, но выяснить каким образом Вы можете узнать, что кнопка отпущена.
2. Выбросить нахрен строки 23 и 24, а после строки 25 (нынешней) вставить проверку
if (<кнопка отпущена>) {
digitalWrite(ledPins[thischar - 48], HIGH);
}
Вот и вся Ваша задача. Ничего в ней больше нет.
Ваши дальнейшие действия таковы:
Вот и вся Ваша задача. Ничего в ней больше нет.
Евгений, спасибо. Такой ответ я и искал.
Говоря о времени, я сопостовлял ВАШИ 5-10 минут и МОЙ месяц. А так-то я уже 2 недели регулярно почитываю матчасть, но учусь в бою ).
Еще раз спасибо.