Не работает Fade

Megawollt
Offline
Зарегистрирован: 06.12.2015

Есть задача сделать Fade на 2х каналах. Микросхема на внутреннем кварце 1 мгц.

В реальности работает только один канал. Второй просто мерцает и все.

Вот скетч. Подскажите, в чем ошибка?


unsigned int ch1 = 1;
unsigned int ch2 = 127;

int am1=1;
int am2=1;

void setup() {

pinMode(2,INPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
}

void loop() {

if(digitalRead(2) == HIGH){

if (ch1 <= 1 || ch1 >= 255) {
    am1 = -am1;
  }
if (ch2 <= 0 || ch2 >= 255) {
am2 = -am2;
}  

ch1 = ch1+am1; 
analogWrite(9, ch1);

ch2 = ch2+am2;
analogWrite(10, ch2); 
delay(20);
}



}

 

b707
Offline
Зарегистрирован: 26.05.2017

в самой первой строке выберите начальное значение ch1 больше единицы, например ch1=2; - все должно заработать

vk007
Offline
Зарегистрирован: 16.06.2015

К слову, в 23 строке выражение ch2 <= 0 не совсем корректно. ch2 не может быть меньше 0 по определению, ведь определено оно у вас как беззнаковое целое.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Спасибо. Заработало, но иногда промаргивает. Почему?

Да, беззнаковое. Просто скопировал пример и не исправил

sadman41
Offline
Зарегистрирован: 19.10.2016

Раз неизвестно что промаргивает и как, то можно свалить вину на разные условия для ch1 и ch2 - строки 20 и 23.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Да, заработало. Скорее всего именно из за этого и моргало