в общем написал программу для зеркала, чтоб включалось легкое освещение через датчик присутствия и более мощное по нажатию кнопки. все это подключено через MOSFET транзистор. в общем по датчику присутствия все работает, а вот по кнопкам нет (((((( хотя программа ошибок не показывает. вот сама программа: Код (C++): #define fadePin 3 //пин управления MOSFET транзистором для датчика присутствия #define fadeButton 6 //пин управляет MOSFET транзистором для кнопки и дополнительного освещения #define buttonPin 7 //пин кнопки включения #define up 8 //пин кнопки повышает яркость #define down 9 //пин кнопки понижает яркость int pirPin = 2; //пин подключения управляющего сигнала PIR датчика int light; //переменная для хранения состояния света (вкл/выкл) int light2; //переменная для хранения состояния дополнительного света int brightness = 125; //уровень яркости для дополнительного освещения (Д.О.) void setup(){ pinMode(pirPin, INPUT); //настраиваем 2 пин как вход для сигналов с датчика pinMode(buttonPin, INPUT); // настраиваем 7 пин для кнопки включения дополнительного света digitalWrite(buttonPin,HIGH); //включаем подтягивающий резистор на 7 пин pinMode(up,INPUT); // 8 ой пин для повышения яркости Д.О. digitalWrite(up, HIGH); //Включаем подтягивающий резистор на 8-ом пине pinMode(down,INPUT); //9 пин для понижения яркости digitalWrite(down,HIGH); //Включаем подтягивающий резистор на 9 ом пине pinMode(fadePin, OUTPUT); // 3 пин на выход, для управления транзисотором pinMode(fadeButton, OUTPUT); //Пин 6 на выход для управления вторым MOSFET транзистором light = 0; //устанаваливаем переменную для первого включения света light2 = 0; } void loop(){ if(digitalRead(pirPin) == HIGH ) //если сигнал с датчика высокого уровня(т.е. есть движение) { if(light == 0) //и если свет не был включен { for(int i=0; i<=150; i++) //то плавно включаем свет { analogWrite(fadePin, i); delay(30); //каждые 10мс увелияение на 1 } light = 1; //и передаем значение переменной, что свет включен } } else //иначе { if(light == 1) //если свет включен { for(int i=150; i>=0; i--)//плавно гасим его { analogWrite(fadePin, i); delay(30); } light = 0; //и передаем значение переменной, что свет выключен } } if(digitalRead(buttonPin) == LOW ) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля) { if(light2 == 0) //и если свет не был включен { analogWrite(fadeButton, brightness); //при нажатии buttonPin (7) яркость Д.О. в половину } light = 1; //и передаем значение переменной, что свет включен } if(digitalRead(up==LOW) && light2 == 1) { brightness += 10; //Делаем проверку, если Д.О. включенно и нажата кнопка UP увеличиваем яркость на 5 единиц } if(digitalRead(down==LOW && light2 == 1)) { brightness -= 10; //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем яркость на 5 единиц } brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254 analogWrite(fadeButton, brightness); // Устанавливаем состояние яркости для светодиода delay(50); // Пауза 50 миллисекунд. if(digitalRead(buttonPin == LOW && light2 ==1)) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен { analogWrite(fadeButton, 0); //при нажатии buttonPin (7) при включенном свете Д.О. отключается } light = 0; //и передаем значение переменной, что свет включен } помогите пожалуйста
Оформил (конечно, нет). Вот как надо: Код (C++): // Язык при вставке кода выбирается "Arduino, C/C++"
У вас вот тут ошибка, переменную light2 никто никогда не использует, кроме как в одном месте. Уберите 2.
переделал вот так. все равно не включается ((( Код (C++): int fadePin = 3; //пин управления MOSFET транзистором для датчика присутствия int fadeButton = 6; //пин управляет MOSFET транзистором для кнопки и дополнительного освещения int buttonPin = 7; //пин кнопки включения int up = 8; //пин кнопки повышает яркость int down = 9; //пин кнопки понижает яркость int pirPin = 2; //пин подключения управляющего сигнала PIR датчика int light; //переменная для хранения состояния света (вкл/выкл) int lightnew; //переменная для хранения состояния дополнительного света int brightness = 125; //уровень яркости для дополнительного освещения (Д.О.) void setup(){ pinMode(pirPin, INPUT); //настраиваем 2 пин как вход для сигналов с датчика pinMode(buttonPin, INPUT); // настраиваем 7 пин для кнопки включения дополнительного освещения digitalWrite(buttonPin,HIGH); //включаем подтягивающий резистор на 7 пин pinMode(up,INPUT); // 8 ой пин для повышения яркости Д.О. digitalWrite(up, HIGH); //Включаем подтягивающий резистор на 8-ом пине pinMode(down,INPUT); //9 пин для понижения яркости digitalWrite(down,HIGH); //Включаем подтягивающий резистор на 9 ом пине pinMode(fadePin, OUTPUT); // 3 пин на выход, для управления транзисотором pinMode(fadeButton, OUTPUT); //Пин 6 на выход для управления вторым MOSFET транзистором light = 0; //устанаваливаем переменную для первого включения света lightnew = 0; //Устанавливаем переменную для первого включения Д.О } void loop(){ if(digitalRead(pirPin) == HIGH ) //если сигнал с датчика высокого уровня(т.е. есть движение) { if(light == 0) //и если свет не был включен { for(int i=0; i<=150; i++) //то плавно включаем свет { analogWrite(fadePin, i); delay(30); //каждые 10мс увелияение на 1 } light = 1; //и передаем значение переменной, что свет включен } } else //иначе { if(light == 1) //если свет включен { for(int i=150; i>=0; i--)//плавно гасим его { analogWrite(fadePin, i); delay(30); } light = 0; //и передаем значение переменной, что свет выключен } } if(digitalRead(buttonPin) == LOW ) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля) { if(lightnew == 0) //и если свет не был включен { analogWrite(fadeButton, brightness); //при нажатии buttonPin (7) яркость Д.О. в половину } lightnew = 1; //и передаем значение переменной, что свет включен } if(digitalRead(up==LOW) && lightnew == 1) { brightness += 10; //Делаем проверку, если Д.О. включенно и нажата кнопка UP увеличиваем яркость на 5 единиц } if(digitalRead(down==LOW && lightnew == 1)) { brightness -= 10; //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем яркость на 5 единиц } brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254 analogWrite(fadeButton, brightness); // Устанавливаем состояние яркости для светодиода delay(50); // Пауза 50 миллисекунд. if(digitalRead(buttonPin == LOW && lightnew ==1)) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен { analogWrite(fadeButton, 0); //при нажатии buttonPin (7) при включенном свете Д.О. отключается } lightnew = 0; //и передаем значение переменной, что свет включен }
За всю логику говорить не буду, но в условии: Код (C++): if(digitalRead(up==LOW) && lightnew == 1) digitalRead будет читать '1'-ый пин (а не пин 'up'), т.к. значение выражения 'up == LOW' будет равно '1'. Так полагаю, что хотите прочитать пин 'up' и в зависимости от его состояния выполнять какое-либо действие, то в этом случае условие должно иметь вид: Код (C++): if((digitalRead(up)==LOW) && (lightnew == 1)) т.е. читаем пин 'up' и прочитанное сравниваем с 'LOW'. Условия: Код (C++): if(digitalRead(down==LOW && lightnew == 1)) ..... if(digitalRead(buttonPin == LOW && lightnew ==1)) так же требуют правки, но это уже сами... PS: скобки с умом расставлять надо, а не куда попало -- лишь бы компилятор не ругался...
я читать умею, а еще я умею быть вежливым. если я прошу помощи в элементарном коде то наверное я не очень давно этим занимаюсь. Прошу помощи, а не пытаться самоутвердиться за мой счет. то что мне показали я переправил
Обычно, люди имеют свойство помогать тому, кто хочет учиться и сам что-то делать пытаеца. А вовсе не тому, каму делать нечево. Это называеца уже по-другому.
вот Код (C++): if(digitalRead(buttonPin) == LOW ) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля) { if(lightnew == 0) //и если свет не был включен { analogWrite(fadeButton, brightness); //при нажатии buttonPin (7) яркость Д.О. в половину } lightnew = 1; //и передаем значение переменной, что свет включен } if((digitalRead(up)==LOW) && (lightnew == 1)) //Делаем проверку, если Д.О. включенно и нажата кнопка UP { brightness += 10; // увеличиваем яркость на 10 единиц } if((digitalRead(down)==LOW) && (lightnew == 1)) { brightness -= 10; //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем яркость на 5 единиц } brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254 analogWrite(fadeButton, brightness); // Устанавливаем состояние яркости для светодиода delay(50); // Пауза 50 миллисекунд. if((digitalRead(buttonPin) == LOW) && (lightnew ==1)) //если сигнал с кнопки НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен { analogWrite(fadeButton, 0); //при нажатии buttonPin (7) при включенном свете Д.О. отключается } lightnew = 0; //и передаем значение переменной, что свет включен }