Помогите с проектом (Чуть-чуть осталось.Ребята выручайте!!!)

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Доброго вечера. Есть проект фонаря на мк (ардуино). Нехватает чуть-чуть кодинга. Исправьте пожалуйста если где ошибаюсь. Три режима должно быть. 50%-75%-100%. То есть управления яркостью с помощью одного светодиода. Вот собственно кодинг 

int regim=1;
int flag=0;

void setup()  {
  
    pinMode(1, INPUT);
    pinMode(2, INPUT);
    pinMode(5, OUTPUT);
}

void loop() { 
       
if(digitalRead(2)==HIGH&&flag==0)
{ 
  regim++;   
  flag=1; 
         
  if(regim>3)
{ 
  regim=1;
} 
  if(digitalRead(2)==LOW&&flag==1)
{ 
  flag=0;
} 
  if(regim==1)//первый режим 
{ 
  analogWrite(5,85);
} 
  if(regim==2)//второй режим 
{ 
  analogWrite(5,170);
} 
  if(regim==3)//третий режим 
{ 
  analogWrite(5,255);
}    
}}

 

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Для чего подключаете первый пин?

 

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

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

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Я не совсем уверен. В первый if вложены остальные  if-ы. Может их просто расставить попорядку без вложения.

Т.е. в строку 17 поставить закрывающюю скобку и в 38 одну убрать.

А как сейчас реагирует светодиод на нажатие кнопки?

Возможен еще дребезг контактов

 

DIVGENY
Offline
Зарегистрирован: 23.08.2016

режим 2 совершенно бесполезен. так как нет никаких задержек

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

До написания скетча проверяли, как светит диод на значениях 50, 75% ? Один может полностью погаснуть и на 50%, а другой незначительно темнее светить.

DIVGENY
Offline
Зарегистрирован: 23.08.2016

void loop() {

..........

val = analogRead(analogPin);     // считываем значение

  Serial.println(val);             // выводим полученное значение

      Serial.println();
       delay(1000);

}

 

Proger_xxx
Offline
Зарегистрирован: 01.03.2016

Зачем аналоговый вход? Если я считаю с цифрового?! Еще идей?!

DIVGENY
Offline
Зарегистрирован: 23.08.2016

выводим в монитор порта.

жмем/отпускаем кнопку и видим визуально, что происходит..

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Уже все сказано.

До написания скетча определите какие значения подавать на пятый пин. А ваши 50, 75 процентов просто расчитаны или проверены опытным путем?

Потом добавьте delay (200)

Если не заработает как нужно, то выводите в 17-ой строке Serial.println(regim)

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

 

08     pinMode(5, OUTPUT);

Для вызова analogWrite() нет необходимости устанавливать тип вход/выхода функцией pinMode().

http://arduino.ru/Reference/AnalogWrite

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А зачем сложности городить?

const int btm_pin=2;
const int PWM_pin =5;
int regim=1;
int btm_old,btm;

void setup()  {
   pinMode(btm_pin, INPUT);
   btm = digitalRead(btm_pin);
}

void loop() { 
  delay (200);
   btm_old = btm;
  btm = digitalRead(btm_pin);  
if (!btm_old&&btm) regim++;
if (regim == 3) regim=0;
switch (regim){
    case 0://первый режим
    analogWrite(PWM_pin,85);
    break;
    case 1://второй режим
    analogWrite(PWM_pin,170);
    break;
    case 2://третий режим 
    analogWrite(PWM_pin,255);
    break;
    }
}

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

балалайка 

int regim=1;
int flag=0;

void setup()  {
  
    pinMode(1, INPUT);
    pinMode(2, INPUT);
    pinMode(5, OUTPUT);
}

void loop() { 
       
if(digitalRead(2)==HIGH&&flag==0)
{ 
  regim++;   
  flag=1; 
         
  if(regim>3)
{ 
  regim=1;
} 
  if(digitalRead(2)==LOW&&flag==1)
{ 
  flag=0;
} 
  if(regim==1)//первый режим 
{ 
  analogWrite(5,85);
} 
  if(regim==2)//второй режим 
{ 
  analogWrite(5,170);
} 
  if(regim==3)//третий режим 
{ 
  analogWrite(5,255);
}    
}}

выбесит дребезгом, а балалайка #11 - тупняком.