Условия работает некорректно нужна помощь
- Войдите на сайт для отправки комментариев
Чт, 28/09/2017 - 07:15
Условия работает некорректно нужна помощь
Здравствуйте, я новичок и сейчас работаю над тем что бы с помощью ИК пульта вкл./откл. датчики и светодиоды в коде все комментирована. Нужна помощь где я ошибся ? заранее спасибо за помощь....
==============================
#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();
}}
Так добавьте отладочные сериалы в каждую ветку и смотрите соответствие кодов и входа в ифы.
Да хоть бы просто сказал, что и где идет не так, как думалось. Но мы ж икстрасенсы, сами догадаемса....
if(results.value!=0xFF7A85 && brightness > 1){ analogWrite(out, 0); delay(fadeAmount); }bwn- спасибо)!
DetSimen - тут просто команды принимаются с ИК пульта и вкл. и отл. светодиодов а так же датчик движения и фото резистор там я комментировал в коде каждый блоке. вот проблемма в том что все условия по отдельности (если осталные блоки комментировать) работают отлично и как только их становится (условии) более 3-ех они перестанут работат корректно. например датчик движения если включит то он включается но через секунду отключается ???). вот така фигня творится.
Непереводимый поток незамутненного интеллектом сознания....
В этом случае, рисуете табличку возможных-допустимых состояний и делаете проверки с принятием решения на ее основе.
DetSimen - Слушай очень хороший человек я тут помощи прощу у тех кто хочеть помочь и если тебе не чем помочь хотябы молчи и так забитую голову немороч, СПАСИБО ЗА ПОНИМАНИЕ.
bwn - Здравствуйте, сделаю, что получится скажу. Если возможно по подробнее скажите или какой ни будь ссылоку. Спасибо.
(видно что человек понимает ситуацию и хочеть помочь - спасибо таким людям которые языком не кого не оскорбляют и не пытаются доказать, что они умные, скромность всегда укращает человека.)
Зря вы так на котовода. У вас настолько сумбурные объяснения, что тяжело понять, что должно получиться.
Берете лист бумаги, и пишете на нем все возможные и допустимые сценарии с учетом пульта, фоторезистора и что там еще у вас есть.
Если какие то действия требуют проверки нескольких условий, то все их совместно и проверяете, а дальше даете исполнительную команду.
Дополнительно выпишите недопустимые сочетания, по ним тоже надо что то делать.
По программированию, найдите Керниган и Ритчи, но в вашем случае, это учебник логики, к сожалению в СССР этим знанием не обременяли, как сейчас не знаю.
if (results.value==0xFFE21D){ analogWrite(out, 255); delay(fadeAmount); } . . . if(results.value!=0xFF7A85 && brightness > 1){ analogWrite(out, 0); delay(fadeAmount); }Возможно именно в этом и состоит Ваша задумка, - не знаю.
А нахрена analogWrite?
fogary - хорошо что обратили внимание). Блин я сам незнаю зачем там последняя условия, наверное при копи-пас случайно там оказался). Спасибо.
bwn - наверное вы правы я нехотел когото обыдет. Если че извиняюсь. За совети огромное человеческое спасибо). Если не трудно можете подсказать какую книгу Кернигана и Ритча прочитать?(спасибо). Я не давно Саймона Монка прочитал, книга хорошая но инфо мало там.
На конец то заработал там оказывается в библиотеке ИК ремовт тоже была какая та ошибка в таймере из за этого не работали ШИМ порты сигнал или подался на макс (255) или на мин (0). в инете нашел статью, там таймер 1 нужно рас комментировать а таймер 2 комментировать в файле библиотеке ИК ремовте. Но проблема с датчиком движениям остается она по-прежнему включается и через секунду отключается (отдельно проверил условия залил работает как надо). Будем искать дальше, дай Бог найдем решения.
Чудо! У тебя родной язык какой? Это не обида, просто интересно.
Если не трудно можете подсказать какую книгу Кернигана и Ритча прочитать?(спасибо). Я не давно Саймона Монка прочитал, книга хорошая но инфо мало там.
Хотя бы вот. Единственное, там нет ни слова про Ардуино, это книга по языку.
UPD/ Х-ня какая то со ссылкой. Наберите "Керниган и Ритчи язык программирования си"
wdrakula - персидский
bwn - ок. спасибо
wdrakula - персидский
Таджикистан? Из столицы или из Самарканда?
Ладно... ты опиши словами, как должна работать схема.
А то ничего пока не понятно.
wdrakula - Задача в том, что бы с помощи пульта включит и отключит лампу. А так же вкл. и откл. датчик движения и датчик освещения (фоторезистор). Все они по отдельности как надо работают, а в сборе, когда даем команду на вкл. датчик движения, он включается и один раз даёт данные на ардуино и все – стоит, а должен быть подача данных постоянно до команды отключения. Вот в этом основная задача. спасибо).