Jump to content
PJufa

проблема с кнопкой

Recommended Posts

народ, беда, помогите разобраться

if (timer != timerPress) не срабатывает эта строка
&& timer <= (timerPress + 300) и эта часть
код и монитор порта прологаю
версия arduino IDE 1.8.2

есть светодиод (полевик и набор из 20 шт 5730)
хочу управлять им и с пульта и с кнопки поэтому там button пульт будет задействован позже.
на пульте есть неиспользуемая кнопка... она сделана для других стран
я уже пробовал ее - работает код получен и прочее

СУТЬ! при нажатии на кнопку длительностью меньше 300 миллисекунд включает val = 255 - подаем на светодиод
при повторном нажатии меньше 300 миллисекунд подает val = 0
при удержании с выключенного положения больше 300 миллисекунд начинает прибавлять значение val (скажем прибавили до 180)
при нажатии менее 300 мс val=0
при длительном нажатии начинает убавлять(скажем 150) совсем не светит почти
и при длительном нажатии опять начинает прибавлять...

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

 

int val = 0; // создаем переменную регулировки и определяем её значение
boolean button = false; // нажатие кнопки (пульта или клацалки)
boolean flag = false; // сработка кнопки
unsigned long timer = 0; // таймер с момента включения
unsigned long timerPress = 0; // таймер удержания кнопки
int gatePin = 3; // указываем пин который будем управлять затвором
int buttonPin = 5; // указываем пин кнопки
int regim = 0; // режим
int trend = 1; //направление переключения режимов в большую или меньшую сторону


void setup() {
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  timer = millis();

  button = digitalRead(buttonPin);

  // нажатие кнопки
  if (button == true) //если кнопка нажата ...
  {
    flag = true; //поднимаем флаг
    if (timer != timerPress) // и если таймеры не равны
    {
      timerPress = timer; //  то таймеру нажатия присваивается значение таймера
    }
  }
  //отпускание кнопки
  if (button == false && regim == 0 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 0 и таймер меньше таймера нажатия на 300 мс
  {
    flag = false; // опускаем флаг
    regim  = 255; // режим равен 255
  }
  if (button == false && regim == 255 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 255 и таймер меньше таймера нажатия на 300 мс
  {
    flag = false; // опускаем флаг
    regim  = 0; // режим равен 0
  }
  // ружимы
  if (regim == 0) {
    val = 0;
  }
  if (regim == 1) {
    val = 180;
  }
  if (regim == 2) {
    val = 180;
  }
  if (regim == 3) {
    val = 190;
  }
  if (regim == 4) {
    val = 200;
  }
  if (regim == 5) {
    val = 200;
  }
  if (regim == 6) {
    val = 210;
  }
  if (regim == 7) {
    val = 220;
  }
  if (regim == 8) {
    val = 230;
  }
  if (regim == 9) {
    val = 240;
  }
  if (regim == 10) {
    val = 255;
  }
  //вывод значения
  analogWrite(gatePin , val);
  //вывод в монитор
  Serial.print(" timer-");
  Serial.print (timer);
  Serial.print(" timerPress-");
  Serial.print (timerPress);
  Serial.print(" button-");
  Serial.print (button);
  Serial.print(" flag-");
  Serial.print (flag);
  Serial.print(" val-");
  Serial.println(val);
  //делея тут не будет в итоге
  delay(10);
}

монитор порта в скрине

 ткните носом в косяк

2017-07-03_02-14-24.png

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Merlok Life
      Хочу сделать монстр-машинку с двигателем rs550 с металлическим корпусом на ардуино.
      Подскажите как управлять мотором через ардуино нано? 
       
    • By Геннадий Быков
      Уважаемые электронщики и им сочувствующие!
      Хочу на даче собрать макет морского маяка в человеческий рост. Но для этого необходима схема управляющая светодиодами. Основное, схема должна иметь независимое питание(Солнечная панель) и быть слаботочной (5-9 вольт). Как вижу я. Маяк ориентировочно высотой 1,50-1,80 м. В маяке, с низу до верха 6 окошек (по одному 5мм светодиоду). И на верху сам маяк из 8-ми 0,5 ваттных светодиодов установленных по кругу. С наступлением темноты, включаются диоды на "1 этаже" и раз в 5-10 минут происходит действие. Диоды поэтажно (снизу вверх) начинают загораться (как будто кто-то поднимается вверх по ступеням) и после загорания самого верхнего окна, через пару секунд, включается маяк. Поочередно по кругу (эффект метеора), со скоростью 2-3 сек на круг, делает оборотов 10 и выключается. Потом в обратной последовательности гасятся окошки (светодиоды) сверху в низ и остаются два нижних, периодически и независимо включающиеся и выключающиеся (эффект присутствия). И вновь через 5-10 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • Guest Сергей
      By Guest Сергей
      Добрый день. Обращаюсь с просьбой помочь определить название кнопки левой и правой кнопки компьютерной мыши Microsoft Arc Mouse. Мышка очень понравилась, уже 10 лет пользуюсь. Но есть большая проблема - через некоторое время начинает плохо срабатывать левая кнопка мыши (срабатывает через раз или нужно сильнее нажимать). Мне приходится разбирать мышь и кнопку, протирать там всё спиртом, хватает примерно на месяц. Даже уже менял с правой кнопкой. В общем решил заказать на алиэкспрессе эти кнопки, но по тем комплектам кнопок, которые там продаются, нужных мне нет. А по названию кнопки искать не могу, т.к. его я не знаю.
      На фото кнопка в собранном и разобранном виде. Может кто узнает её.



    • Guest ренат
      By Guest ренат
      Всем здрасти))))
      прошу помощи в написании программы
      мои знания программирования на ардуино основаны на примерах и школьного курса )))
      так вот есть программы 
      int LedPin = 8;             // Подключаем светодиод к порту 13
      int ButPin = 2;             // Подключаем кнопку к выходу 10
      int flag = 0;                // флаг состояния
      int LedPinTime = 100;
      void setup()
      {
        pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной
      }  
      void loop()
      {
        if(digitalRead(ButPin) == HIGH && flag == 0)      
          {                                              
            digitalWrite(LedPin, !digitalRead(LedPin));
            flag = 1;
          }
        
        if(digitalRead(ButPin) == LOW && flag == 1)
          {
            flag = 0;
          }  
      }
      собрал из кусков, работает )))))
      но не то что мне нужно 
      Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 
      помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо
    • By Lil Sandwich
      Здравствуйте, столкнулся с проблемой блока питания от маяка-233. Достался отдельно от всего магнитофона, в нем выпаяна кнопка включения. 
      В данный момент есть идея использовать этот БП в другом усилителе, но наугад подключать трансформатор страшно. Если у кого-то есть возможность пояснить принцип подключения, прошу помочь.
  • Сообщения

    • скину свой касяк - исправленная печатка и схема - кто собирал -обратите внимание на шоттки в печатке и резистор в базе транзистора - его нужно добавить - извиняюсь) спешу вечно. все проверенно. автошим 494.lay6
    • Линейка, бесспорно, тоже нужна! Для плоскостных измерений, приносит удобство. А сверло, мечик или плашку линейкой уже не измерить. Тогда на помощь приходит штангенциркуль и таблица в помощь. Для хорошего мастера не помешает иметь и то и другое. Перелистывать страницы справочника - это тоже потеря времени. А так, глянул в таблицу и сразу получил ответ соответствия. И не надо считать деления на линейке. Это преимущество особенно ярко выражено, если величина перевода не кратная. Полезные таблицы, вообще желательно распечатать на принтере, наклеить на жёсткую картонку и магнитиком прихватить возле рабочего стола. Например: нужно реставрировать предохранитель, глянул в эту таблицу, и за считанные минуты запаял требуемый волосок калиброванного провода для данного тока. Помимо этой таблицы, желательно повесить и таблицу с ESR параметрами. Для ремонтника и не только она не будет лишней.
    • Для чего? Руки чесались? От трансформатора наводки, пробовали трансформатор вынести из коробки подальше от плат? Опередили
    • Попробуйте трансформатор питания повернуть или подальше от плат отодвинуть, это могут быть от него наводки.
    • И за что их "травят" в детской такими пульсациями.
    • "Поменяно местами, заменено, грешу", а должно быть - с помощью осциллографа или высокоомных наушников, обнаружено, что гул начинается после определённого каскада, иначе и 10001 тем будет мало.
  • Покупай!

×
×
  • Create New...