плавное включение светодиода и удержания покамесь включена кнопка

fartunamis
Offline
Зарегистрирован: 20.12.2014

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

у меня получилось все только у меня цикл плавного включение продолжаеться доходит до значение Х и заново возгараеться и не удерживаеться на то время покамись включина кнопка.

 

int value = 0;                  //здесь храним значение яркости
int ledpin = 5;                 //светодиод подключим к 9 контакту
const int buttonPin = 7;        //контакт кнопки
int regPin = A2;                //контакт потанциометра
int x;                          //переменная Х
int ttt;
void setup() 
  pinMode(ledpin, OUTPUT);      
  pinMode(regPin, INPUT);
}
 
 
void loop()
{
  
  ttt = digitalRead(buttonPin);
 
  if (ttt == HIGH) {   
 
   x = analogRead(regPin) / 4;
 for(value = 0 ; value <= x; value+=5) //плавно зажигаем светодиод
   {
    analogWrite(ledpin, value);    //выставляем значение
    delay(30);                            //небольшая пауза
  } 
   }
   if (ttt == LOW)
{
 for(value = x; value >=0; value-=5)   
   {
    analogWrite(ledpin, value); 
    delay(30); 
  }
}
 
}
 
vov4ik
Offline
Зарегистрирован: 10.09.2013

Зачем вы используете иф (если) два раза ведь у вас условие только одно и цыкл фор в топку у вас условие пока нажата кнопка.

светодиод не плавно зажигается от 0 до 255 он может быть 50 - 190 или 10 - 255, всё зависит от светодиода и резистора.

fartunamis
Offline
Зарегистрирован: 20.12.2014

я не силен в программирование если вам не сложно напишите кодом в чем моя ошибка

vov4ik
Offline
Зарегистрирован: 10.09.2013
Кодом писать не буду тут просто но растолкую.
 
Для начала надо узнать свечение светодиода есть пример 01.Basics -> AnalogReadSerial
 
изменим    
 
Serial.println ( map(analogRead(A0), 0, 1023, 0, 255));
 
по русски выдать линеаризованное от 0-1023 в 0-255 значение А0 на 5 пин в шим, просто делить на 4 не совсем правильно тогда надо будет к полученному значению прибавит один разделить на 4 и снова отнять один.
 
Далее открываем порт крутим резистор и смотрим значения при котором затух и разгорелся в полную силу, реальность такова что светик гореть начинает при определённом токе и в полную силу загорается при меньшем чем максимальное значение.
 
Теперь условие if (истина (0<) или лож(0==)) {если истина} else {если лож}
 
по русски если истина тогда выполнить это иначе выполнить это
 
Действие по кнопке тут сразу определим к чему подключаем +5 или gnd, если подключать на +5 нужен подтягивающий резистор подаваемое значение на пин при нажатии истинна, если gnd то резистор не нужен можно подтянуть программно объявив его значение высоким pinMode(7, INPUT); digitalWrite(7, HIGH); значение на пин при нажатии лож.
 
Вроде для начала всё разжевал, теперь что делать и как:
 
Условие: при нажатии кнопки будет постепенно загораться светодиод до значения определённым резистором иначе будет постепенно затухать; кнопка пин 7 подключена к gnd; светодиод пин 5 режим шим; переменный резистор на пин А0.
 
Опишу программу по русски.
 
кнопка пин 7 вход подтянуть к +5, светодиод пин 5 выход, назначить переменную value для яркости светодиода тип byte (незачем назначать из 4 байт если хватит и одного)
 
если кнопка истина тогда value-- иначе value ++ (тут нужно понимать что когда кнопка отпущена значение истина)  , ограничим значение value математической функцией constrain от значение затухания до значения загорания (пусть по значению кнопки прибавляет или отнимает дальше ограничителя не убежит), выдать линеаризованное от 0-1023 в значение затухания - value значение А0 на 5 пин в шим, добавить задержку.
 
За мудрил немного с текстом но когда сами напишете всё поймете.
fartunamis
Offline
Зарегистрирован: 20.12.2014

все равно непонял( 

вод дапустим условие 

Теперь условие if (истина (0<) или лож(0==)) {если истина} else {если лож} оно должно выглядить так?

if (true (0 < x) || (0 == X)) 

а дальше как написать чтобы свечение начало увиличиваться и остановилось ?

 

vov4ik
Offline
Зарегистрирован: 10.09.2013

Ну как-то так с самого начала, что трудно русский язык прочитать, кнопка пин 7 вход подтянуть к +5 это pinMode(7, INPUT); digitalWrite(7, HIGH); и так далее.

vov4ik пишет:

кнопка пин 7 вход подтянуть к +5, светодиод пин 5 выход, назначить переменную value для яркости светодиода тип byte (незачем назначать из 4 байт если хватит и одного)
 
если кнопка истина тогда value-- иначе value ++ (тут нужно понимать что когда кнопка отпущена значение истина)  , ограничим значение value математической функцией constrain от значение затухания до значения загорания (пусть по значению кнопки прибавляет или отнимает дальше ограничителя не убежит), выдать линеаризованное от 0-1023 в значение затухания - value значение А0 на 5 пин в шим, добавить задержку.
 
За мудрил немного с текстом но когда сами напишете всё поймете.

vvadim
Offline
Зарегистрирован: 23.05.2012

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

Тексты твои, ну честно сказать, нечитабельны.

fartunamis
Offline
Зарегистрирован: 20.12.2014

vov4ik = спасибо что наводки дал) я по другому сделал все работает)

int value = 0;                  
int ledpin = 5;                
int buttonPin = A2;
int y;

void setup() 
{ 
  pinMode(ledpin, OUTPUT);   
  pinMode(buttonPin, INPUT);

}
void loop()
{
  while(1)
  {
 y = analogRead(buttonPin);
  if ((y == HIGH)&&(value < 255))
 {
 for(value = 0 ; value <= 254; value+=5) 
   {
    analogWrite(ledpin, value); 
    delay(30);                         
  } 
 }
  if ((y == LOW)&&(value > 0))

{
 for(value <= 254; value >=0; value-=5)  
   {
    analogWrite(ledpin, value); 
    delay(30); 
  }
}
  }
}

 

vov4ik
Offline
Зарегистрирован: 10.09.2013

может так попробывать

byte value = 0;
void setup() {
 pinMode(7, INPUT); digitalWrite(7, HIGH);
 pinMode(5, OUTPUT);
}
void loop() {
if (digitalRead(7)) {value--;} else {value++;}
constrain (value , 50 , 200);
analogWrite(5, map(analogRead(A0) , 0 , 1023 , 50 , value));
delay (30);
}

 

IRONDED
Offline
Зарегистрирован: 01.03.2017

Всем доброго времени суток!!

Вы можете мне помочь в реализации идеию...

немогу свезать два скетча(((

Суть такова:

При нажатии диод плавно загораеться и горит до следующего нажатия

при повторном нажатии диод медленно тухнет

 

#include <Bounce2.h>
byte value = 0;
#define BUTTON_PIN 2 // Кнопка подключенная через pin D2
#define LED_PIN 12  // Светодиод подключенный на pin D12
int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки
int prevButton = LOW; // Переменная для сохранения предыдущего состояния
boolean ledOn = false; // Текущее состояние светодиода (включен/выключен)
int noch = 100;  // Максимальное освещение ночью
int dey = 255; // Максимальное освещение днем
Bounce debouncer = Bounce(); 

void setup() {

  // Подключаем встроенный подтягивающий резистор
  pinMode(BUTTON_PIN,INPUT_PULLUP);


  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5); // interval in ms

  //Установка для LED как выход
  pinMode(LED_PIN,OUTPUT);

}

void loop() {
  // Считывание состояния кнопки
  debouncer.update();

tekButton=debouncer.read();
if (tekButton == LOW && prevButton == HIGH) //Если кнопка нажата
{
ledOn=!ledOn;                               //  изменить состояние светодиода

}
prevButton=tekButton;

if (tekButton) {value--;} else {value++;}
constrain (value , 10 , 255);
analogWrite(12, map(100 , 0 , 255 , 10 , value));
delay (30);


}

 

IFG
Offline
Зарегистрирован: 19.01.2019

А если кнопка с фиксацией?

Erema1
Offline
Зарегистрирован: 13.02.2022

Код не работает! 

тут ошибка 

01

#include <Bounce2.h>

 

sketch_feb13a:1:10: fatal error: Bounce2.h: No such file or directory
 #include <Bounce2.h>
          ^~~~~~~~~~~
compilation terminated.
exit status 1
Bounce2.h: No such file or directory
 
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

мы знаем.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Что это тут такое !? Четкая беседа программистов в форуме про программирование :)))))))

Yaroslav10110
Yaroslav10110 аватар
Offline
Зарегистрирован: 10.11.2020
unsigned long timmer;
byte value;
byte max1;
void setup() {
  pinMode(7, INPUT);
  pinMode(5, OUTPUT);

}

void loop() {
  if (timmer - millis() >= 30) {   //таймер на миллис
    timmer = millis();             //сброс таймера
    max1 = map(analogRead(A0) , 0 , 1023 , 0 , 255);
    if (digitalRead(7)) {          // если кнопка нажата
      if (value >= 1)value--;      //-1 (при условии, что все норм)
    } else {                       // если кнопка не нажата
      if (value <= max1)value++;//-1 (при условии, что все норм)
    }
    analogWrite(5, value);
  }
}

fartunamis пишет:

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

у меня получилось все только у меня цикл плавного включение продолжаеться доходит до значение Х и заново возгараеться и не удерживаеться на то время покамись включина кнопка.

 

int value = 0;                  //здесь храним значение яркости
int ledpin = 5;                 //светодиод подключим к 9 контакту
const int buttonPin = 7;        //контакт кнопки
int regPin = A2;                //контакт потанциометра
int x;                          //переменная Х
int ttt;
void setup() 
  pinMode(ledpin, OUTPUT);      
  pinMode(regPin, INPUT);
}
 
 
void loop()
{
  
  ttt = digitalRead(buttonPin);
 
  if (ttt == HIGH) {   
 
   x = analogRead(regPin) / 4;
 for(value = 0 ; value <= x; value+=5) //плавно зажигаем светодиод
   {
    analogWrite(ledpin, value);    //выставляем значение
    delay(30);                            //небольшая пауза
  } 
   }
   if (ttt == LOW)
{
 for(value = x; value >=0; value-=5)   
   {
    analogWrite(ledpin, value); 
    delay(30); 
  }
}
 
}
 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Yaroslav10110 пишет:

unsigned long timmer;
...

ты на даты смотри иногда.

Erema1
Offline
Зарегистрирован: 13.02.2022

https://youtu.be/QeSS4V2xRcM как на счет такого формата видео урок? Ардуины

b707
Offline
Зарегистрирован: 26.05.2017

Erema1 пишет:
https://youtu.be/QeSS4V2xRcM как на счет такого формата видео урок? Ардуины

а что там? и при чем оно тут? Тут не принято ходить по внешним, тем более анонимизированным. ссылкам

Вы чего-то спросить хотели? - так задайте вопрос нормально

Erema1
Offline
Зарегистрирован: 13.02.2022

?

Erema1
Offline
Зарегистрирован: 13.02.2022

Хорошо!
Нужно код для плавного вкл и выкл светодиода.
пробовал некоторых не работал.

b707
Offline
Зарегистрирован: 26.05.2017

Слушайте. хватит спамить. Если не в состоянии понять коды из ветки или найти простейший код из примеров - закажите в платном разделе, тыщ за пять (наценка за лень) вам его напишут.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Erema1 пишет:
.

Можешь не ставить себе плюсы, они тут не вперлись никому. Особенно нелепо, когда ты сам себе их лепишь)) Ты понял, что я тебе написал?

Erema1
Offline
Зарегистрирован: 13.02.2022

Как удалить всё это ?

b707
Offline
Зарегистрирован: 26.05.2017

Erema1 пишет:
Как удалить всё это ?

никак, просто не пишите больше, спустя время модератор потрет

Erema1
Offline
Зарегистрирован: 13.02.2022

Спасибо!, Я извиняюсь! спамить не хотел
думал спрошу потом удаляю лишних )) .

b707
Offline
Зарегистрирован: 26.05.2017

Erema1 пишет:
думал спрошу потом удаляю лишних )) .

написано пером - не вырубишь топором.

примеров плавного включения светодиода выше в ветке 3 или 4 варианта.