А с этим какие проблемы? Ждет нажатия, как дождалась записывает мс в очередную переменную массива, счетчик увеличивает на один, ждет отжатия, как дождался записывает и так по кругу.
Вот прошу, нажимал кнопку с разным интервалом Где 0 нажимал больше 1 секунды. Вот код Код (C++): unsigned long duration; void setup() { pinMode(7, INPUT_PULLUP); Serial.begin(9600); } void loop() { duration = pulseIn(7, LOW); duration = (duration / 1000); Serial.println(duration); }
Сейчас почитал на сайте и нашел такую строку Сейчас поменяю и посмотрю на результат. И ведь действительно работает, но с небольшими погрешностями. Сейчас попробую с массивом поиграть. Может получится что - то
На нажатие работает, светодиод горит, с той задержкой которую задал кнопкой. Осталось придумать на отжатие кнопки Код (C++): int pin = 7; int cli, fo, On = 1; int clicks[20]; unsigned long duration; void setup() { pinMode(pin, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(13, OUTPUT); Serial.begin(9600); Serial.println(On); } void loop() { if (!digitalRead(6)) { On = (On * -1); Serial.println(On); } if (On == 1) { cli++; duration = pulseIn(7, LOW); duration = (duration / 1000); Serial.println(duration); clicks[cli] = duration; } if (On == -1) { Serial.println(clicks[fo]); digitalWrite(13, HIGH); delay(clicks[fo]); digitalWrite(13, LOW); fo++; delay(1000); } }
Зачем вам микросекунды? Вместо pulsein написать свою функцию, вместо unsigned long достаточно unsigned int если не планируются паузы длиннее 1 минуты. Хотел написать свой вариант, но к сожалению все время сегодня потратил на другую задачу и уже хочу спать. Если актуально, попробую завтра.
На одной ардуине никак. Если вы про мгновенное одновременное выполнение. Ардуина выполняет последовательность комманд. Хотя я не уверен, что вы заметите отстование одного действия от другого на мск.
Вы проведите эксперемент. Подключите 2 светодиода на пин 2,3. Потом запустите этот скетч. Заметите отставание? Код (C++): int led1 = 2; int led2 = 3; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); delay(2000); digitalWrite(led1, LOW); digitalWrite(led2, LOW); delay(2000); }
по идее можно запускать сразу оба выхода одной однотактной командой PORTD|=0x0С; тогда оба светоидода загорятся СТРОГО одновременно, с точностью до 10 пс надо только префикс из wiring знать, я не в курсе.
А если например. Большое условие с функцией delay. И надо, чтобы работал одновременно 2 скрипт без задержки. То как это реализовать