Условия работает некорректно нужна помощь

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

Условия работает некорректно нужна помощь 

Здравствуйте, я новичок и сейчас работаю над тем что бы с помощью ИК пульта вкл./откл. датчики и светодиоды в коде все комментирована. Нужна помощь где я ошибся ?  заранее спасибо за помощь....

==============================

#include <IRremote.h>
int out=11; // подключение LED к 11 пину 
int RECV_PIN = 12; // сигнальный контакт ИК приемника
int brightness = 0; // уставливаем начально значение
int fadeAmount = 10; // время
int photosensor = A0; // фоторезистор
int iksend = 3;  //vivod dlya IR dioda 
int value1 = 0;//цифрового значения аналогового входа A0
int data; 
const int movPin = 2;

IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn(); // запуск приемника
  pinMode(out,OUTPUT);
  pinMode(movPin, INPUT);
}

void loop() {
if ( irrecv.decode( &results )) { 
       Serial.println(results.value, HEX);
//-------------------------vklucheniya i otklucheniya----------
  if (results.value==0xFFE21D){
          analogWrite(out, 255);
          delay(fadeAmount);
          }
  if (results.value==0xFFA25D){
          analogWrite(out, 0 );
          delay(fadeAmount);
          } 
//-------------------------uvelicheniya i umensheniya po najatii------------
if (results.value==0xFF22DD && brightness < 255){ // увеличение яркости при нажатием кнопки +
    brightness = brightness + 1;
    analogWrite(out, brightness);
    delay(fadeAmount);
    }
if (results.value==0xFF02FD && brightness > 0){ // уменьшение яркости при нажатием кнопки -
    brightness = brightness - 1;
    analogWrite(out, brightness);
    delay(fadeAmount);  
  }
//-------------------------plavnoe uvelicheniya i umensheniya---------------
if (results.value==0xFF30CF && brightness < 255){ // плавное увеличение яркости при однократного нажатие кнопки +
    for (brightness = 0; brightness < 255; brightness++) { 
        analogWrite(out, brightness);
        delay(fadeAmount);
        }
    }
if (results.value==0xFF6897 && brightness > 1){ // плавное уменьшение яркости при однократного нажатие кнопки -
    for (brightness = brightness; brightness >= 0; brightness--) { 
        analogWrite(out, brightness);
        delay(fadeAmount);
        }
    }
 
//--------от пульта к пульту------------------
if(results.value==0xFF52AD){
   irsend.sendNEC(0xF7C03F, 32);
   delay(fadeAmount);
   }
if(results.value==0xFF4AB5){
   irsend.sendNEC(0xF740BF, 32);
   delay(fadeAmount);
  }
//-------------------датчик движения----------------------  
 if(results.value==0xFF9867){
      int val = digitalRead(movPin);
      Serial.println(val);
          delay(100); 
     if(val == 1){
         analogWrite(out, 255);
         delay(fadeAmount);
        }
     if(val == 0){
        analogWrite(out, 0);
        delay(fadeAmount);
        }
}
//---------фоторезистор-------------------------------------------------------------------
  if(results.value==0xFF7A85){
      value1 = analogRead(photosensor);//значение с фоторезистора входе A0
      Serial.println(data);
      data = value1 / 2;  // Полученные значения c A0 делим на 2
      data  = constrain(data, 0, 255);
      analogWrite(out, 255-data);  // Включаем светодиод с полученной ранее мощностью - от 0 до 255
          delay(200); 
      } 
  if(results.value!=0xFF7A85 && brightness > 1){
      analogWrite(out, 0);
      delay(fadeAmount);
     }
  irrecv.resume();
}}
bwn
Offline
Зарегистрирован: 25.08.2014

Так добавьте отладочные сериалы в каждую ветку и смотрите соответствие кодов и входа в ифы.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

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

fogary
Offline
Зарегистрирован: 05.03.2016

gekso пишет:

  if(results.value!=0xFF7A85 && brightness > 1){
      analogWrite(out, 0);
      delay(fadeAmount);
     }

Какое-то странное условие, сводящее на нет многие предыдущие команды. Что оно, по Вашей логике, должно делать?

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

bwn- спасибо)!

DetSimen - тут просто команды принимаются с ИК пульта и вкл. и отл. светодиодов а так же датчик движения и фото резистор там я комментировал в коде каждый блоке. вот проблемма в том что все условия по отдельности (если осталные блоки комментировать) работают отлично и как только их становится (условии) более 3-ех они перестанут работат корректно. например датчик движения если включит то он включается но через секунду отключается ???). вот така фигня творится. 

 

fogary -  условия такова, что сначала принимается ИК команда и потом проверяется питания к пину out  если она не отключено тогда отключаем то есть (out, 0). это потому что если убрать brightness > 1 пин сначало запитается на макс (255 шим сигналом) потом отключается.
Извините может я что то не понимаю я новичек недавно начал изучать ардуино где то 2 месяца уже по этому не до конца понимаю вся суть.  спасибо...
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Непереводимый поток незамутненного интеллектом сознания....

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

В этом случае, рисуете табличку возможных-допустимых состояний и делаете проверки с принятием решения на ее основе. 

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

DetSimen - Слушай очень хороший человек я тут помощи прощу у тех кто хочеть помочь и если тебе не чем помочь хотябы молчи и так забитую голову немороч, СПАСИБО ЗА ПОНИМАНИЕ. 

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

bwn - Здравствуйте, сделаю, что получится скажу. Если возможно по подробнее скажите или какой ни будь ссылоку. Спасибо.

(видно что человек понимает ситуацию и хочеть помочь - спасибо таким людям которые языком не кого не оскорбляют и не пытаются доказать, что они умные, скромность всегда укращает человека.)

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

Зря вы так на котовода. У вас настолько сумбурные объяснения, что тяжело понять, что должно получиться.
Берете лист бумаги, и пишете на нем все возможные и допустимые сценарии с учетом пульта, фоторезистора и что там еще у вас есть.
Если какие то действия требуют проверки нескольких условий, то все их совместно и проверяете, а дальше даете исполнительную команду. 
Дополнительно выпишите недопустимые сочетания, по ним тоже надо что то делать.
По программированию, найдите Керниган и Ритчи, но в вашем случае, это учебник логики, к сожалению в СССР этим знанием не обременяли, как сейчас не знаю.

fogary
Offline
Зарегистрирован: 05.03.2016

gekso пишет:

  if (results.value==0xFFE21D){
          analogWrite(out, 255);
          delay(fadeAmount);
          }
. . .

  if(results.value!=0xFF7A85 && brightness > 1){
      analogWrite(out, 0);
      delay(fadeAmount);
     }

Для ясности. Допустим, пришла команда 0xFFE21D, первая проверка переключила выход out в состояние HIGH на 10 мс. Последняя проверка то же выполнилась и переключила выход out в состояние LOW.

Возможно именно в этом и состоит Ваша задумка, - не знаю.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А нахрена analogWrite?

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

fogary - хорошо что обратили внимание). Блин я сам незнаю зачем там последняя условия, наверное  при копи-пас случайно там оказался). Спасибо.

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

bwn - наверное вы правы я нехотел когото обыдет. Если че извиняюсь. За совети огромное человеческое спасибо). Если не трудно можете подсказать какую книгу Кернигана и Ритча прочитать?(спасибо). Я не давно Саймона Монка прочитал, книга хорошая но инфо мало там.  

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

На конец то заработал там оказывается в библиотеке ИК ремовт тоже была какая та ошибка в таймере из за этого не работали ШИМ порты сигнал или подался на макс (255) или на мин (0). в инете нашел статью, там таймер 1 нужно рас комментировать а таймер 2 комментировать в файле библиотеке ИК ремовте. Но проблема с датчиком движениям остается она по-прежнему включается и через секунду отключается (отдельно проверил условия залил работает как надо). Будем искать дальше, дай Бог найдем решения. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Чудо! У тебя родной язык какой? Это не обида, просто интересно.

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

gekso пишет:

Если не трудно можете подсказать какую книгу Кернигана и Ритча прочитать?(спасибо). Я не давно Саймона Монка прочитал, книга хорошая но инфо мало там.  

Хотя бы вот. Единственное, там нет ни слова про Ардуино, это книга по языку.

UPD/ Х-ня какая то со ссылкой. Наберите "Керниган и Ритчи язык программирования си"
 

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

wdrakula - персидский

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

bwn - ок. спасибо

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gekso пишет:

wdrakula - персидский

Таджикистан? Из столицы или из Самарканда?

Ладно... ты опиши словами, как должна работать схема.

А то ничего пока не понятно.

gekso
gekso аватар
Offline
Зарегистрирован: 27.09.2017

wdrakula - Задача в том, что бы с помощи пульта включит и отключит лампу. А так же вкл. и откл. датчик движения и датчик освещения (фоторезистор). Все они по отдельности как надо работают, а в сборе, когда даем команду на вкл. датчик движения, он включается и один раз даёт данные на ардуино и все – стоит, а должен быть подача данных постоянно до команды отключения. Вот в этом основная задача.  спасибо).