//Акустическое управление люстрой из нескольких ламп //Акустический датчик с цифровым выходным сигналом //Вместо акустического датчика можно подключить датчик другог типа byte sequence [9]= //Программа включения ламп { B0000, //(0) Все ВЫКЛ B1000, //(1) Одна Вкл B1100, //(2) Две Вкл B1110, //(3) Три вкл B1111, //(4) Все ВКЛ B1010, //(5) Не четные ВКЛ B0101, //(6) Четные ВКЛ B1001, //(7) Крайние ВКЛ B0110, //(8) Средние ВКЛ }; int lampPins[4] = {7,8,9,10,}; //Пины управления лампами int microfonPin = 4; //Пин входного акустического сигнала int soundNumber =0; //Переменная sequence int number =0; void setup() { pinMode(microfonPin,INPUT); for (int i=0;i<4;i++) {pinMode(lampPins,OUTPUT); } } void loop() { int soundRead=digitalRead(microfonPin); //Читает звуковые сигналы if (soundRead==HIGH) {soundNumber ++; delay(500); if(soundNumber>8) soundNumber=0; } switchlamp(soundNumber); } void switchlamp (int number) { boolean isBitSet; for(int lamp = 0; lamp < 4; lamp++) {if( number < 0 || number > 8) //Помоему это лишнее, но без него не работает {isBitSet = 0;} else {isBitSet = bitRead(sequence[number], lamp);} digitalWrite( lampPins[lamp], isBitSet); //Выходной сигнал к лампам } }
Код (Text): for (int i=0;i<4;i++) pinMode(lampPins,OUTPUT); Видимо, должно быть: Код (Text): for (int i=0;i<4;i++) pinMode(lampPins[i],OUTPUT);
Точно, это я как то промухал, но все работает и так, код с рабочего файла скопировал, попробую исправить и посмотреть что получится
Вместо акустического датчика можно использовать кнопку, или ИК пульт коллисчество ламп может быть большим чем в этом коде, порядок включения ламп можно менять как необходимо
Вот еще один код акустического выключателя но на одну лампу с плавным включением и плавным выключением света /* Код акустичевкого выключателя с плавным включением и отключением света. Принцип работы: акустический модуль с микрофоном воспринимает акустический сигнал (хлопок руками), после этого подается питание на источник света, но подается плавно до полной яркости, после чего все остается не изменным до следующего хлопка, при повторном хлопке источник света плавно выключится, и останется в выключенном состоянии до следующего хлопка Акустический датчик на вход ARDUINO подает цифровой сигнал, чувствительность микрофона регулируется на самом датчике потенцеометром */ #define MicrofonPin 4 //PIN акустического датчика #define LedPin 8 //PIN выходного сигнала на источник света boolean state = LOW; //Переменная триггера boolean val = LOW; //Переменная акустического датчика int t = 5; //Переменная скорости увелтчения и уменьшения яркости void setup() { pinMode(MicrofonPin,INPUT); pinMode(LedPin,OUTPUT); } void loop() { int val=digitalRead(MicrofonPin); //Читает и запоминает состояние входного сигнала if(val==HIGH) {state=!state; //Триггер () if(state==1) {for(int i = 0; i <=255; i++) //Увеличение яркости {analogWrite(LedPin, i); //Выводит сигнал ни цифровой PWM выход delay(t); } } else {for( int i = 255; i >= 0; i--) //Уменьшение яркости {analogWrite(LedPin, i); //Выводит сигнал ни цифровой PWM выход delay(t); } } } }
Можно сделать плавное включение и выключение не одной а всех ламп только надо избавиться от этого Код (C++): {for( int i = 255; i >= 0; i--) //Уменьшение яркости {analogWrite(LedPin, i); //Выводит сигнал ни цифровой PWM выход delay(t); } } Сделать по таймеру чтоб контроллер мог дальше работать а не сидеть в цикле for И нужно акустику фильтровать чтоб различала только хлопки или как минимум резкий звук на пиках