Jump to content
Guest ренат

Программа управления светодиодами

Recommended Posts

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;
    }  
}

собрал из кусков, работает )))))

но не то что мне нужно 

Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 

помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо

Share this post


Link to post
Share on other sites
42 минуты назад, Гость ренат сказал:

digitalWrite(LedPin, !digitalRead(LedPin));

заменить на

  digitalWrite(ledPin, HIGH);   // включаем светодиод
  delay(3000);                  // ждем секунду
  digitalWrite(ledPin, LOW);    // выключаем светодиод

 

 

Share this post


Link to post
Share on other sites

ВСЕМ ПРИВЕТ!!! 

нужнана небольшая помощь в доработке )))

каждый светодиод включается своей кнопкой и зажигается только тогда когда другой не горит 

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

очень надо)) помогите пожалуйста

зарание спасибо

const int
button1Pin = 2;
const int button2Pin = 3;
const int led1Pin = 8;
const int led2Pin = 7;
void setup() 
{
 pinMode(led1Pin, OUTPUT);
 pinMode(led2Pin, OUTPUT);
 pinMode(button1Pin,INPUT);
 pinMode(button2Pin,INPUT);
}                 
void loop()
{
 if
 (digitalRead(button1Pin) == HIGH) 
 {
  digitalWrite(led1Pin,HIGH);
  delay(3000);
  digitalWrite(led1Pin,LOW);
 } 
 if(digitalRead(button2Pin) == HIGH) 
 {
  digitalWrite(led2Pin,HIGH);
  delay(3000);
  digitalWrite(led2Pin,LOW);
 }
}

 

Share this post


Link to post
Share on other sites

Материалы вебинара «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments провели вебинар, где инженер по применению беспроводных технологий компании TI рассказал(дублированный перевод), как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств. С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее.

Подробнее...

Posted (edited)
1 час назад, IMXO сказал:

шара два раза подряд не катит :rake:

почему два раза подряд )))) я пока ждал вечера сам немного разобрался )))) 

вам спасибо за помощь  первом варианте )))) там я сам справился )))

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

я не могу обмозговать ))) не укладывается)

т.е. ума не хватает )

может поможете ) 

я в долгу не останусь ))) 

к стати ! знаю я как !!! заменой delay на millis  но как написать не пойму 

наведите на мыслю хотя бы )

спасибо

Edited by ренат07

Share this post


Link to post
Share on other sites

ESP32-DevKitC-VB позволит быстро запустить ваше первое WiFi-приложение

Отладочная плата на основе одного из самых популярных WiFi-модулей Espressif ESP32-WROVER-B позволяет в самые короткие сроки запустить приложение с поддержкой беспроводных стандартов WiFi 802.11b/g/n и Bluetooth Classic/BLE. Ресурсов встроенного в модуль чипа ESP32-D0WD хватит для решения даже очень сложных задач.

Подробнее...

1 час назад, ренат07 сказал:

к стати ! знаю я как !!! заменой delay на millis  но как написать не пойму 

забавно, даю подсказку он здесь на не нать, твое "ума не хватает" называется "конечный автомат" гугл о нем знает.

твоя задача имеет четыре состояния

состояние_0: диоды выключены
состояние_1: лед1=1, лед2=0 , сброс счетчика милисекунд, переход на состояние_3
состояние_2: лед1=0, лед2=1, сброс счетчика милисекунд, переход на состояние_3
состояние_3: отсчет милисекунд , если отсчитали нужную задержку  переход на состояние_0

все это решается обычными командами перехода switch/case

переход на состояние 1 или 2 устанавливается по нажатию кнопок.

Скрытый текст

void loop()
{
  delay(1); 
  if(digitalRead(ButPin1) == HIGH && flag_1 == 0)      
    {                                              
      task_state=1;
      flag_1 = 1;
    }
  if(digitalRead(ButPin1) == LOW && flag_1 == 1)
    {
      flag_1 = 0;
    } 

   if(digitalRead(ButPin2) == HIGH && flag_2 == 0)      
    {                                              
      task_state=2;
      flag_2 = 1;
    }
   if(digitalRead(ButPin2) == LOW && flag_2 == 1)
    {
      flag_2 = 0;
    } 
  
  switch(task_state)
    {
      case 0:
           digitalWrite(ledPin1, LOW);  
           digitalWrite(ledPin2, LOW); 
       break;
      case 1:
           digitalWrite(ledPin1, HIGH);  
           digitalWrite(ledPin2, LOW); 
           count_delay=0;
           task_state=3;
       break; 
      case 2:
           digitalWrite(ledPin1, LOW);  
           digitalWrite(ledPin2, HIGH);
           count_delay=0;
           task_state=3;
       break; 
      case 3:
           if(count_delay<3000)
              {count_delay++;}
            else
              {task_state=0;}   
       break; 
      default:
           task_state=0;
    }
}

 

 

Share this post


Link to post
Share on other sites
Posted (edited)
 

забавно, даю подсказку он здесь на не нать, твое "ума не хватает" называется "конечный автомат" гугл о нем знает.

хм ))) прикольно )) я даже загуглил 

твой совет изумителен ) честно ))) но узнал я это поздно (((

вот мой текст с millis

тут все работает как мне надо за одним исключением 

Вот смотри: я нажал тактовую кнопку и загорелся светодиод на 3 сек. и погас, если держу три сек. и отпускаю то он горит три сек., а мне для идеальности надо реализовать так: не важно, нажал я кнопку один раз или держу её минуту, светодиод должен гореть три секунды и потухнуть даже если кнопку я не отпустил

я изучил команды ардуино и не нашел ни чего подходящего 

Такое вообще вариант реализовать?

const int
button1Pin = 2;
const int
button2Pin = 3;
const int
led1Pin = 7;
const int
led2Pin = 8;
unsigned long
led1OnTime;
unsigned long led2OnTime;
bool led1On;
bool led2On;
void setup() 
{
 pinMode(led1Pin,OUTPUT);
 pinMode(led2Pin,OUTPUT);
 pinMode(button1Pin,INPUT);
 pinMode(button2Pin,INPUT);
 led1On = false;
 led2On = false;
}
void loop()
{
 if (digitalRead(button1Pin)== HIGH) 
 {
  digitalWrite(led1Pin,HIGH);
  digitalWrite(led2Pin,LOW);
  led1On = true;
  led1OnTime = millis();
 }
 if(digitalRead(button2Pin) == HIGH) 
 {
  digitalWrite(led2Pin,HIGH);
  digitalWrite(led1Pin,LOW);
  led2On = true;
  led2OnTime = millis();
 }
 if(led1On)
 if(millis() -led1OnTime > 3000) 
 {
  digitalWrite(led1Pin,LOW); 
  led1On = false;
 }
 if(led2On)
 if(millis() -led2OnTime > 3000)
 {
  digitalWrite(led2Pin,LOW);
  led2On = false;
 }
}

 

 


void loop()
{
  delay(1); 
  if(digitalRead(ButPin1) == HIGH && flag_1 == 0)      
    {                                              
      task_state=1;
      flag_1 = 1;
    }
  if(digitalRead(ButPin1) == LOW && flag_1 == 1)
    {
      flag_1 = 0;
    } 

   if(digitalRead(ButPin2) == HIGH && flag_2 == 0)      
    {                                              
      task_state=2;
      flag_2 = 1;
    }
   if(digitalRead(ButPin2) == LOW && flag_2 == 1)
    {
      flag_2 = 0;
    } 
  
  switch(task_state)
    {
      case 0:
           digitalWrite(ledPin1, LOW);  
           digitalWrite(ledPin2, LOW); 
       break;
      case 1:
           digitalWrite(ledPin1, HIGH);  
           digitalWrite(ledPin2, LOW); 
           count_delay=0;
           task_state=3;
       break; 
      case 2:
           digitalWrite(ledPin1, LOW);  
           digitalWrite(ledPin2, HIGH);
           count_delay=0;
           task_state=3;
       break; 
      case 3:
           if(count_delay<3000)
              {count_delay++;}
            else
              {task_state=0;}   
       break; 
      default:
           task_state=0;
    }
}

 

 

 

Edited by ренат07

Share this post


Link to post
Share on other sites

не надо тупых цитат, это запрещено правилами форума П2.9, придет модер раздела выпишет бан.

52 минуты назад, ренат07 сказал:

тут все работает как мне надо за одним исключением 

если есть исключения значит не работает или нет?

 

54 минуты назад, ренат07 сказал:

Такое вообще вариант реализовать?

ты под спойлером смотрел?

Share this post


Link to post
Share on other sites
3 минуты назад, IMXO сказал:

если есть исключения значит не работает или нет?

работает !))) просто этот момент с потухание светодиода 

да , смотрел конечно )))  но чет не заработала,  const  под свои переписал, может библиотеку какую нибудь не добавил, просто switch case  я так не углублялся)

простите...

я думал вы модератор ;)

Share this post


Link to post
Share on other sites
6 минут назад, ренат07 сказал:

но чет не заработала

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. 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 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • By pingyini
      Всем доброго времени суток. Решил я сделать "умную" электронную сигарету на arduino. Концепция заключается в кнопочном управлении мощностью посредством ШИМ, наличии экрана, и некоторыми защитами в виде ограничения максимального времени нажатия и уход камня в сон (режим пониженного энергопотребления) после N секунд простоя.
      Вводные: по нажатию кнопки запускается ШИМ и управляет полевиком, но в целях защиты я хочу ограничить время выполнения кода до 7 секунд(что бы при случайном зажатии кнопки в кармане не получить травматическую ампутацию конечностей)

      Проблема пришла откуда не ждали - обработка нажатой основной кнопки срабатывает как попало. Нажимая кнопку обработчик может сработать сразу и отработает как по маслу, а может и через 5 нажатий не сработать вовсе.  Проверял в живую на Arduino UNO, Pro Mini (328е Меги) и в Proteus'е. Симптомы одни и те же.  Проблема очевидно в коде но я в упор не вижу в чем может быть загвоздка. Уровень у меня "штота умею" поэтому не судите строго. 
       
      #define pwmPin 5 #define buttonStart 3 #define maxOnTime 7000 //максимальное время выполнения условия нажатой кнопки #define RED_LED 7 #define GREEN_LED 8 int power = 150; //boolean StartState; boolean StartStateFlag; //Флаг кнопки Старт unsigned long pressTime; void setup() { pinMode(pwmPin, OUTPUT); pinMode(buttonStart, INPUT); pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); Serial.begin(9600); //чисто для отладки } void loop() { if (digitalRead(buttonStart) && StartStateFlag && ((millis() - pressTime) <= maxOnTime)) { // (1) если кнопка старт нажата И была отпущена И нажата менее 7 секунд выполняем: analogWrite(pwmPin, power); //запуск ШИМ Serial.println("PWM_ON"); digitalWrite(GREEN_LED, HIGH); digitalWrite(RED_LED, LOW); } else { // (2) иначе StartStateFlag = false; // кнопка небыла отпущена analogWrite(pwmPin, 0); digitalWrite(GREEN_LED, LOW); Serial.println("PWM_OFF"); pressTime = millis(); } if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата analogWrite(pwmPin, 0); //остановка ШИМ Serial.println("PWM_OFF"); digitalWrite(RED_LED, HIGH); StartStateFlag = true; //была отпущена и можно входить в условие с нажатой кнопкой (1) } } И файлы: сам скетч, .elf и .hex для шПротеуса и проект Протеус.
      P. S. ШИМ в Протеусе не работает в принципе, в железе все ОК 
      BUTTON_TEST.ino
      BUTTON_TEST.ino.eightanaloginputs.hex
      BUTTON_TEST.ino.elf
      BUTTON_TEST.ino.with_bootloader.eightanaloginputs.hex
      ButtonTest.pdsprj
    • By dimmer
      Необходимо собрать устройство на ардуино: 
      Управление одним сервоприводом (плавная регулировка 180 градусов) по блютуз с телефона.
      Задача
      Питание для привода-аккумулятор (пока не знаю какой именно, нужно подсказать)
      Минимизировать электропотребление, сделать так что б в спящем режиме не было расхода энергии, или почти не было.  Может убрать светодиоды из платы, или ещё каким то образом.
      Устройством буду пользоваться время от времени и не хотелось бы аккумулятор часто заряжать.
      Основные комплектующие в наличии, думал сам разберусь но нет ни времени, не особого желания это изучать. 
      Территориально Москва. Привезу комплектующие куда скажете, но желательно ЗАО

    • By utf16
      Всем доброго времени суток!
      Никак не могу найти простое решение своей проблемы. Подскажите пожалуйста!
      Думаю над сборкой многоканального аудио ресивера с управлением от ардуино. Есть идея собрать усилитель(ресивер) 5.1
      Не хочется травить платы, поэтому задействую 2 двухканальных усилителя на готовых платах на ТДАшках, и 2 одноканальных для центрального канала и сабвуфера, тоже на ТДАшках.
      Ресивер дожен иметь 5.1 канальные входы для подключения к компьютеру (фронт, тыл, центр и сабвуфер), стереовход(AUX), и блютуз(допустим тоже простой стереовход).
      Коммутировать все это дело должна ардуинка с релейными модулями(это все понятно).
      Суть проблемы вот в чем: как коммутировать сигнал с разных источников звука, чтобы не было проникновения каналов в друг друга? Допустим, включаю обьемный звук с компьютера, нажимаю кнопку, арудуина подключает через реле питание усей, сигнал от входов идет каждый на свои усилитель. А потом переключаю допустим на обычный стерео вход, и нужно его как то коммутировать снова на усилитель фронтальной акустики и, например, на усилитель сабвуфера, и при этом чтобы полностью исключить сигнал от входов с компьютера (от входов многоканального звука). 
      Проще говоря, нужно как то иметь около 5-6 входов аудио сигнала и иметь возможность с ардуино перенаправить эти сигналы на 5-6 выходов на усилители.
      Можно ли все это проделать с мультипликаторами, или, допустим, с матрицей вроде MT8816??? Буду благодарен за любые подсказки)
  • Сообщения

    • Может не в той ветке создал тему, но все же... Собственно проблема 10-ти летних пежо ситроэнов и т.д. Вот и мне выдали на работе пыжыка, с такой же проблемой. Неинтересно как-то так кататся. Темнеет (или светлеет, у кого как включено отображение, прямое или инверсия) при нагреве жк дисплей на бортовом компьютере. При температуре до 20 градусов - все ок. Как только температура поднимается дисплей уверенно начинает темнеть вертикальными полосами, вплоть до полной неработоспособности. При легком нажатии пальцем на жк, изображение в месте нажатия появляется. На форумах по данным авто полно тем - но адекватного решения нет. Разные "системы" охлаждения придумывают - но неэффективно все это. С чем может быть связано? Неужели от старости?
    • Скорее наоборот, в прямом, у него рабочий ток только в обратную сторону... В прямом направлении рабочего тока нету, соответственно нельзя диод туда же запаять. Но! Из трансформатора выходят две обмотки. Соответственно, ты можешь поставить второй диод (даже больше скажу - используя тот же второй диод), получив дублированный второй выход. Их соединяй последовательно, и будет двуполярное питание.
    • если проводов всего два,то в разрыв!
    • С входа и выхода.  Включить синус нужно. (генераторы в помощ) Вопрос ещё в том, на выходе есть искажения после определённой громкости, или их нет? Нужно в ноутбуке твоём повысить громкость до искажений. Может громкость стоит на минимуме?  Инструкция в помощь... Ты главное подпиши фото(скрин), сколько вольт\деление и время\деление.  
    • очередной велосипед
    • сорри народ, кто успел поломать мозг, это я флаг после нажатия кнопки не уследил в основной программе, и он в функцию уже приходил =1. Но получается так можно делать - выходить из функции таким макаром?  
×
×
  • Create New...