Странно работает аналог

aaleksander
Offline
Зарегистрирован: 06.04.2015

Добрый вечер, уважаемые.

Первый вечер ковыряю ардуино и вот наткнулся на такой глюк.

Простая программка мигания трехцветным диодом:

int ledGreen = 10;
int ledBlue = 7;
int ledRed = 9;

void setup() {                
  pinMode(ledGreen, OUTPUT);
  pinMode(ledRed, OUTPUT);
  pinMode(ledBlue, OUTPUT);
}

void blink(int aLed)
{
  digitalWrite(aLed, HIGH);
  delay(500);
  digitalWrite(aLed, LOW);
  delay(1);
}

void loop() {
  blink(ledRed);
  delay(10);
  blink(ledGreen);
  delay(10);
  blink(ledBlue);
  delay(10);
}

Все мигает, все хорошо.

Переписал функцию blink вот так (чтобы плавно загоралось)

void blink(int aLed)
{
  for(int i=0; i<50; i++)
  {
    analogWrite(aLed, i);
    delay(10);
  }
  delay(500);
  digitalWrite(aLed, LOW);
  delay(1);
}

Странно работает: красный и зеленый плавно загораются как и должны, а сильный вообще не горит.

В чем может быть дело, не пойму?

P.S. Freeduino Leanardo, питание от USB, если это важно.

aaleksander
Offline
Зарегистрирован: 06.04.2015

Все, разобрался. 7 выход - только цифровой. Там нет ШИМа :-)

Переделал на 11-ый - все замигало.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
  • ШИМ: 3, 5, 6, 9, 10, 11 и 13. Любой из выводов обеспечивает ШИМ с разрешением 8 бит при помощи функцииanalogWrite().
  • синий висит на пине 7, который не понимает, что такое PWM :(
  • подключите и переопределите его на любой пин из оставшихся с PWM - 3,5,6,11,13
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

int ledGreen = 10; - хватит и byte ledGreen = 10; , зачем память тратить ?
 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Хватит и         #define ledgreen 10      ,  зачем вообще переменную заводить....

aaleksander
Offline
Зарегистрирован: 06.04.2015

Развращен C# и десктопами. Все впереди.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

trembo пишет:

Хватит и         #define ledgreen 10      ,  зачем вообще переменную заводить....

эт, даааа.... а она будет запихуема в void blink(int aLed) ?

aaleksander
Offline
Зарегистрирован: 06.04.2015

SU-27-16 пишет:

trembo пишет:

Хватит и         #define ledgreen 10      ,  зачем вообще переменную заводить....

эт, даааа.... а она будет запихуема в void blink(int aLed) ?

Запихуема. Только что проверил. Кстати, void blink(char aLed), если уж на то пошло ;-)

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Ну тогда и сразу     for ( char  i=0 ; i<50 ; i++) можно попробовать......  
Или                          for ( byte  i=0 ; i<50 ; i++)

Тип char знаковый тип, т.е. число (код) хранящийся в памяти может принимать значения от -128 до 127.
Если необходима беззнаковая однобайтовая переменная, используйте тип byte.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а чё СД разгоняете только до 50, а не до 255 ? без резисторов играетесь ? 

aaleksander
Offline
Зарегистрирован: 06.04.2015

SU-27-16 пишет:

а чё СД разгоняете только до 50, а не до 255 ? без резисторов играетесь ? 

после 100 визуально уже не видно.  Резисторы на 220Ом стоят.

Я с электроникой не особо дружу, лет десят назад паял по мелочи. Буду разбираться.