Добрый день. Вопрос такой: Оптопаре без разници на какой пин ардуины ее вешать, для считывания показаний? Если нет, то что если на одну ардуину, подключено 2 оптопары? Мне нужно снять показания детектора нуля.
Чтобы получить правильный ответ нужно задать правильный вопрос. Все гораздо понятнее если есть принципиальная схема. Что значит "детектор нуля"?
Код (Text): void setup() { pinMode(AC_pin, OUTPUT); attachInterrupt(0, FrontUp, RISING); //прерывание по изменению уровня с низкого на высокий } // Функция обработки прерывания на подъем void FrontUp() { detachInterrupt(0); _delay_us(dim+1000); // отсекаем лишнее digitalWrite(AC_pin, HIGH); // включить симистор _delay_us(20); // короткая пауза, чтобы обеспечить включение симистора digitalWrite(AC_pin, LOW); // выключение симистора(он выключится когда полупериод достигнет нуля) attachInterrupt(0, FrontDown, FALLING); } // Функция обработки прерывания на спад void FrontDown() { detachInterrupt(0); _delay_us(dim); // отсекаем лишнее digitalWrite(AC_pin, HIGH); // включить симистор _delay_us(20); // короткая пауза, чтобы обеспечить включение симистора digitalWrite(AC_pin, LOW); // выключение симистора(он выключится attachInterrupt(0, FrontUp, RISING); } void loop() { if(dimmer < 255) dimmer++; else dimmer=0; // пример уменьшения яркости лампы dim=33*dimmer; delay(50); } Вот это код, что-бы галогеновая лампа, то становилась ярче, то угасала. Вот она схема. На ней оптопара или детектор нуля это - 4n35. Вопрос: Можно ли на арду подключить 2 оптопары? Если да то как в коде указать, какая оптопара будет управлять какой лампой?
Вторая оптопара не нужна, если лампы на одной фазе. Прохождение через ноль у обеих ламп будет в одно и то же время.
Дело в том что мне нужно подключить две лампы, на разные фазы. И что-бы яркость у каждой лампы была разная, в зависимости от того какой параметр я ей указал...
Обычно 2-й и 3-й цифровой пин с номерами прерываний 0 и 1 соответственно. См. http://arduino.net.ua/Arduino_articles/Opisanie jazyka Arduino na russkom jazyke/Funkcii preryvanij/
Простите за глупый вопрос: Тоесть мне за место этого: Код (C++): attachInterrupt(0, FrontUp, RISING); Вставить вот это?: Код (C++): attachInterrupt(1, FrontUp, RISING);
Микроконтроллеры AVR не имеют приоритетов для прерываний, это просто номера прерываний. Все прерывания равнозначны - одного приоритета.
Да, но учтите, что пока обрабатывается прерывание, все прерывания лучше запретить. Затем когда выходите из прерывания, все прерывания опять разрешаете.
Спасибо большое Radius. Но я честно говоря не понял, как запрещать и разрешать... Если подскажете огромный вам лайк от меня!
Запретить прерывание noInterrupts(номер прерывания), разрешить прерывание Interrupts(номер прерывания).