Например TDA7294

Форум РадиоКот • Просмотр темы - СИ или Ардуино, кнопка без фиксации
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:00:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: СИ или Ардуино, кнопка без фиксации
СообщениеДобавлено: Пт апр 19, 2019 02:03:31 
Родился

Зарегистрирован: Вт июн 14, 2016 22:31:59
Сообщений: 9
Рейтинг сообщения: 0
Приветствую.
Есть программа (действующая) для Ардуино (на крайняк можно просто на Си, но для меня наличие digitalRead иже с ними - спасение: нет ни времени ни мозгов учиться обрабатывать биты операциями над байтами), обрабатывает нажатые кнопки. Блок схему пробую прикрепить. Все кнопки, кроме одной, с фиксацией, поэтому логика работы элементарная - пока кнопка нажата выполняется соответсвующий блок. Но одна кнопка без фиксации. Хочется (требуется), чтобы при кратковременном нажатии этой кнопки бесконечно выполнялся соответсвующий ей блок кода, при повторном нажатии - выход в void loop(). "Перекопипэйстил" (ну с "разбором полетов" - попыток адапции под мои нужды) кучу вариантов из серии "Работа с кнопками на Ардуино", но беда в том, что все они ориентированы на включние-выключние светодиода и логика, работающая для этого, не работает в моей программе потому что включение-выключения светодиода обеспечивается просто входом или не входом в соответсвующую часть кода, а мне надо, чтобы.... Блин, пишу и очередной раз понимаю, что, как раз таки, должно работать и в моем случае, но никак не получается у меня.
В общем, вот код (фрагменты, относящиеся к вопросу), работающий на кнопке с фиксацией, помогите, плиз, сделать из него для "БЕЗ фиксации".

.....
const int SHOW = 8; // SHOW это та самая кнопка, "сидит" на 8-ом пине
......
pinMode(SHOW, INPUT_PULLUP);

void loop ()

{

if (digitalRead (SHOW) == 0)
{
здесь - код, выполняемый при нажатой кнопке SHOW
............
............
}
}


Вложения:
Sahulik blok shema.JPG [118.01 KiB]
Скачиваний: 209
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: СИ или Ардуино, кнопка без фиксации
СообщениеДобавлено: Пт апр 19, 2019 07:29:00 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Вы и сами понимаете, что у вас сейчас каша в голове. Потому, абстрагируемся от кода, пишем ТЗ. Что за устройство, что оно должно делать. Расписать все действия, которое выполняет устройство. Составляем алгоритм. От высокого к низкому. Устройство-модули-подмодули-низовой уровень.
В вашем случае нужна псевдопараллельность процессов. А это требует умственных усилий.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: СИ или Ардуино, кнопка без фиксации
СообщениеДобавлено: Пт апр 19, 2019 08:53:10 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Код
Спойлер
Код:
int ledPin = 13;
int ledPin_2 = 12;

volatile char flag = 0;                // флаг состояния
#define flag_0 0
#define flag_1 1

const int SHOW = 8; // SHOW это та самая кнопка, "сидит" на 8-ом пине

 
void setup()
 { // put your setup code here, to run once:

pinMode(SHOW, INPUT_PULLUP);

pinMode(ledPin, OUTPUT);
pinMode(ledPin_2, OUTPUT);

 }

void loop()
 { // put your main code here, to run repeatedly:


 if(digitalRead(SHOW) == HIGH && ((flag & (1<<(flag_0))) == 0))     
    {                                             
      flag |= (1<<(flag_0));
      flag ^= (1<<(flag_1));
    }
 
  if(digitalRead(SHOW) == LOW && ((flag & (1<<(flag_0))) != 0))
    {
      flag &= (~(1<<(flag_0)));
    } 
       
   if((flag & (1<<(flag_1))) == 0)
      {
      digitalWrite(ledPin, !digitalRead(ledPin)); // эту строку можно удалить и связанный сней светодиод
     
      // здесь выполняется один код
      // опрос остальных кнопок поместить сюда
      // либо тут так называемый "выход в void loop()"
     
      }
     
     
   if((flag & (1<<(flag_1))) != 0)
      {
      digitalWrite(ledPin_2, !digitalRead(ledPin_2)); // эту строку можно удалить и связанный сней светодиод
     
      // здесь выполняется другой код     
      // или сюда "опрос остальных кнопок поместить сюда"
      // либо тут так называемый "выход в void loop()"
     
      } 
 
 }
Аппаратный способ подавления дребезга кнопки


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: СИ или Ардуино, кнопка без фиксации
СообщениеДобавлено: Сб апр 20, 2019 09:05:57 
Родился

Зарегистрирован: Вт июн 14, 2016 22:31:59
Сообщений: 9
Рейтинг сообщения: 0
Большое Вам спасибо за код (сам дико занят, поэтому понимаю, что значит взять и вот так написать для кого-то вдруг), пока еще не разбирал, но постараюсь извлечь урок.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y