ИК управление реле --- реле не реагирует

Grt
Offline
Зарегистрирован: 19.07.2019

BLINK работает, сейчас попробую BLINK, но только уже со светодиодом(на макетной плате) 

Grt
Offline
Зарегистрирован: 19.07.2019

А вот уже на макетке не работает

const int LED = 11;
 
void setup() {
  pinMode(LED, OUTPUT);
}


void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);    
  delay(1000);                       
}

 

Grt
Offline
Зарегистрирован: 19.07.2019

Он вообще не мигает

sadman41
Offline
Зарегистрирован: 19.10.2016

Строку #4 и #9 сравните - что инитится и чем моргается.

Grt
Offline
Зарегистрирован: 19.07.2019

Сейчас съездил в магазин где покупал детали, я им объяснил что вот такая-то проблема,а  они сказали что не разбераются и я могу им только сдать детали, но потом случайно зашёл в магазин человек, и продавцы сказали что он хорошо в этом разберается. Я ему тоже объяснил суть проблемы, и он сказал очень интересную мысль - он сказал что возможно это из-за того, что глючит новая версия IDE-1.8.9(у меня винда 10) и скорей всего это из-за неё, а Ардуино скорей всего исправна. 

Сейча попробую скачать версию 1.8

Что думаете об этом?

bwn
Offline
Зарегистрирован: 25.08.2014

NikShel пишет:

Тему предлогаю перенести в Песочницу!

Поддерживаю и перемещаю.)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Grt пишет:
возможно это из-за того, что глючит новая версия IDE-1.8.9(у меня винда 10) и скорей всего это из-за неё

С учётом вот этого

sadman41 пишет:

Строку #4 и #9 сравните - что инитится и чем моргается.

всё так и есть! Без вариантов IDE виновата. И ещё, может быть, то, что ардуина китайская.

leks
Offline
Зарегистрирован: 22.10.2017
const int LED_BUILTIN = 11;
 
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);    
  delay(1000);                       
}

А вот так попробуйте, вдруг повезёт.

gfx125
Offline
Зарегистрирован: 27.05.2017

Grt пишет:

... глючит новая версия IDE-1.8.9(у меня винда 10) и скорей всего это из-за неё, а Ардуино скорей всего исправна. 

Сейча попробую скачать версию 1.8

Что думаете об этом?

и перейдите с глючной 10-ки на Windows 3.11

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

leks, Вы бы хоть проверяли, когда выкладываете! Он же сейчас запустит и точно побежит переустанавливать IDE на 0.0.0 и покупать оригинальную ардуину.

leks
Offline
Зарегистрирован: 22.10.2017

Не, не проверял. Счас, проверю и тоже закричу помогиите!!!

leks
Offline
Зарегистрирован: 22.10.2017
const int LED = 11;
 
void setup() {
  pinMode(LED, OUTPUT);
}


void loop() {
  digitalWrite(LED, HIGH);   
  delay(1000);                       
  digitalWrite(LED, LOW);    
  delay(1000);                       
}

Ой, заругались на меня, слово запретное я использовал в названии светодиода. Вот так надо попробовать.

 

leks
Offline
Зарегистрирован: 22.10.2017

Константа LED_BUILTIN – это номер вывода, к которому подключен встроенный светодиод. На большинстве плат это светодиод подключен к выводу 13.

Вот что вычитал.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так ото ж.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Grt пишет:

Я тут не перепутал случайно ничего?)

#include "IRremote.h"

IRrecv irrecv(2);
decode_results results;

int rele=0;

void setup() 
{
  pinMode(5,OUTPUT);

  Serial.begin(9600);
  irrecv.enableIRIn();

}

void loop() 
{
  if(irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);

    if(results.value==0x55AA14EB&&rele==0)
    {
      Serial.println("releON");
      digitalWrite(5,HIGH);rele=1;
    }

    else if(results.value==0x55AA14EB&&rele==1)
    {
      Serial.println("releOff");
      digitalWrite(5,LOW);rele=0;
    }

  irrecv.resume();
  results.value=0;
  }

}

 

Я, конечно же, не сильно программист, но почему никого на возглас ТС - «включается и через секунду выключается» не обратил своё и его внимание на условия? (Сокрачу код кнопки до ЕВ) - первоеусловие -> код равен EB и rele=0,  в этом условии присваиваем rele=1. Смотрим далее - else -> код опять равен EB (его же ещё никто не считывал заново) и rele=1 (1 мы присвоили в прошлом if, для тех кто не понял). В результате оно и «хлопает». Логику менять надо а не дребезг исправлять. 

Или я что то упустил (повторю - сам не особо программист)? Буду только рад если ткнёте носом туда, что пропустил. 

gfx125
Offline
Зарегистрирован: 27.05.2017

BOOM пишет:

Я, конечно же, не сильно программист, но почему никого на возглас ТС - «включается и через секунду выключается» не обратил своё и его внимание на условия? (Сокрачу код кнопки до ЕВ) - первоеусловие -> код равен EB и rele=0,  в этом условии присваиваем rele=1. Смотрим далее - else -> код опять равен EB (его же ещё никто не считывал заново) и rele=1 (1 мы присвоили в прошлом if, для тех кто не понял). В результате оно и «хлопает». Логику менять надо а не дребезг исправлять. 

Или я что то упустил (повторю - сам не особо программист)? Буду только рад если ткнёте носом туда, что пропустил. 

Я тоже не особо программист, даже совсем непрограммист, но мне кажется что вы упустили if...else:

"... Когда проверка с результатом ИСТИНА найдена, запускается вложенная в нее блок операторов, и затем программа игнорирует все следующие строки в конструкции if..else."

Если я неправ пусть меня тоже ткнут носом.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

gfx125 пишет:

BOOM пишет:

Я, конечно же, не сильно программист, но почему никого на возглас ТС - «включается и через секунду выключается» не обратил своё и его внимание на условия? (Сокрачу код кнопки до ЕВ) - первоеусловие -> код равен EB и rele=0,  в этом условии присваиваем rele=1. Смотрим далее - else -> код опять равен EB (его же ещё никто не считывал заново) и rele=1 (1 мы присвоили в прошлом if, для тех кто не понял). В результате оно и «хлопает». Логику менять надо а не дребезг исправлять. 

Или я что то упустил (повторю - сам не особо программист)? Буду только рад если ткнёте носом туда, что пропустил. 

Я тоже не особо программист, даже совсем непрограммист, но мне кажется что вы упустили if...else:

"... Когда проверка с результатом ИСТИНА найдена, запускается вложенная в нее блок операторов, и затем программа игнорирует все следующие строки в конструкции if..else."

Если я неправ пусть меня тоже ткнут носом.

Это да, но это на первой итерации цикла. Другими словами - на первом походе. На втором «проходе» выполняется второе условие (что после else, ведь переменная rele у вас глобальная, а код с кнопки не изменился - то есть rele уже равно 1, а код с кнопки тот же ВЕ). Эти итерации происходят со скоростью работы процессора (несколько миллионов раз в секунду, и определяются скоростью ЦП), но инертная реле это делает не сразу. Вообще тема реле другая - суть в том что логика не верна. Моя структура логики такова - если нажата кнопка и реле 0, то перевести реле в 1 и подождать секунд 5 (условно подождать, не обязательно dalay делать, за это время вы отпустите кнопку -ведь нажатие однократное) и как только сработает повторно нажатие кнопки - сделать уже реле 0, если реле равно 1 и сменить флаг. Но это сильно грубо. То есть в конкретном случае просто нажатий с интервалом 5 сек (или 2 - сколько установите’ - работать будет. Но если просто нажать и держать кнопку - будет переключаться с частотой 5сек (или сколько установили, например - 2). Но я не знаю как это побороть по одной простой причине - сам начинающий (этот вопрос вторичен и пока можно его опустить). :-)

gfx125
Offline
Зарегистрирован: 27.05.2017

BOOM пишет:
а код с кнопки не изменился - то есть rele уже равно 1, а код с кнопки тот же ВЕ).

А строка 36? Конечно при условии что кнопка не нажата и дребезг отсутствует

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

gfx125 пишет:

BOOM пишет:
а код с кнопки не изменился - то есть rele уже равно 1, а код с кнопки тот же ВЕ).

А строка 36? Конечно при условии что кнопка не нажата и дребезг отсутствует

Так я о том и говорю - за ваше нажатие кнопки длиной в 1 сек (к примеру), в микроконтроллере происходит миллион операций. И дребезг тут ни при чем. Он лишь шум в данной логике. Дребезги по ИК вообще быть не может по моему мнению. Его на стороне передатчика устраняют. 

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

BOOM пишет:

Так я о том и говорю - за ваше нажатие кнопки длиной в 1 сек (к примеру), в микроконтроллере происходит миллион операций. И дребезг тут ни при чем. Он лишь шум в данной логике. Дребезги по ИК вообще быть не может по моему мнению. Его на стороне передатчика устраняют. 

[/quote]

Да похоже Вы правы, здесь идут импульсы и дребезга как в обычной кнопке не устраниш. Надо просто дать время. Гдето так 

#include "IRremote.h"

IRrecv irrecv(2);
decode_results results;

bool rele=0;
uint32_t lastMil = millis();

void setup() 
{
  pinMode(5,OUTPUT);
  //  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() 
{
  if(irrecv.decode(&results))
  {
    if(results.value == 0x55AA14EB){
      if (millis() - lastMil >= 500)
      {
        rele = !rele;
        digitalWrite(5, rele);
      }
      lastMil = millis();
    }
    irrecv.resume();
  }
}

А лутше использовать одну кнопку на включение а другую на выключение.