Помогите написать программу, где три светодиода переключаются n количество раз. Причем один раз считается не весь цикл, а только переключение между одним и другим светодиодом. Например, n=10, значит должны последовательно загораться: 1, 2, 3, 1, 2, 3, 1, 2, 3, 1 (остановится на 1 светодиоде, который останется гореть). Если n=5, то последовательно загораются 1, 2, 3, 1, 2 и переключение останавливается, на последнем светодиоде 2.
Обращался, он из 10 генераций выдаёт одно и тоже - в цикле for (int i = 0; i < 10; i++) { Rgb1 = on; Rgb2 = off; Rgb3 = off; delay(500); Rgb1 = off; Rgb2 = on; Rgb3 = off; delay(500); Rgb1 = ogg; Rgb2 = off; Rgb3 = on) , а это не то что мне нужно!
При произвольных N действо раскладывается на два варианта - исполнение полного цикла и неполного. Полный цикл исполняется P = int(N / 3) количество раз. А неполный - один или два раза. K = N - P. Вот и напишите подпрограмму для полного цикла - { D1 = on; D2 = off; D2 = off; delay(t); D0 = off; D1 = on; D2 = off; delay(t); D0 =off; D1 = off; D2 = on; delay(t); } и две подпрограммы для неполных (K = 1, K = 2)
Всем спасибо, особенно Ariadna-on-Line! Всё сделал: Код (C++): void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); for (int i = 0; i < n/3; i++) { digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); delay(delayTime); digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); digitalWrite(LED3, LOW); delay(delayTime); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, HIGH); delay(delayTime); } int k = n % 3; if (k == 1) { digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); } if (k == 2) { digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); delay(delayTime); digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); digitalWrite(LED3, LOW); } }
Двухмерный массив: кадр, положение переключателей. Один цикл который эти кадры гоняет. Строк несколько.