или не срыв стека? Короче WTF) Два светодиода на 10,11. Вот так всё ок: Код (Text): void setup() { // put your setup code here, to run once: pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop() { // put your main code here, to run repeatedly: for (byte i=0; i<255; ++i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } for (byte i=255; i>0; --i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } } А вот так всё не ок. Добавили во втором цикле сравнение с нулём. В первый проход работают оба цикла, но после второго цикла идёт снова второй. и снова второй. и снова второй. и снова второй. Первого больше не будет никогда) WTF? Код (Text): void setup() { // put your setup code here, to run once: pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop() { // put your main code here, to run repeatedly: for (byte i=0; i<255; ++i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } for (byte i=255; i>=0; --i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } } Ну и если добавить меньше или равно в первом цикле, то будет только первый цикл Код (Text): void setup() { // put your setup code here, to run once: pinMode(10, OUTPUT); pinMode(11, OUTPUT); } void loop() { // put your main code here, to run repeatedly: for (byte i=0; i<=255; ++i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } for (byte i=255; i>0; --i) { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } } Ну и естественно если заменить byte на int то всё шикарно. Короче где-то что-то пошло не так) И не очень понятно почему. Открыл .hex в дизассемблере.... Попрактиковал "Метод пристального взгляда"... Закрыл дизассемблер)
Всё, апокалипсис отменяется) А теперь внимание, решение! Фаза 1: Код (Text): for (byte i=255; i>=0; --i) // допустим сейчас у нас i = 1. Отлично! Выполняем цикл! { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } //А вот тут у нас выполняется --i, и теперь i=0 Фаза 2: Код (Text): for (byte i=255; i>=0; --i) // Теперь у нас i=0. Условие выполняется? — ДА. // Отлично! Выполняем цикл! { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } //А вот тут у нас выполняется --i, и теперь у нас (БАРАБАННАЯ ДРОБЬ) i=255! Фаза 3: Код (Text): for (byte i=255; i>=0; --i) //сейчас у нас i = 255. Отлично! Выполняем цикл! { analogWrite(10, i); analogWrite(11, 255-i); delay(10); } //И так до бесконечности) Задачка для проверки себя. Почему 0-1=255?
0000 0000 - 0000 0001 = 1111 1111 byte согласно описанию типов данных на arduino.cc является без знаковым числом от 0 до 255. Таким образом -1 он никогда интерпретироваться не станет