Добрый день.
Посмотрел видео от ALEXGYVER про ШИМ. Написал себе в скетч вот такой "кусок" (я удалил всё ненужное и оставил то, что относится к необходимой мне функции работы с RGB модулями):
Вопрос:
объясните, пожалуйста, почему в таком виде (выше) работает, а когда вставляю в свой скетч, то не работает до тех пор пока не закомментирую две строчки (причём не важно какие. Главное что бы их трех осталась только одна). Тогда Нано начинает загружаться и выполняться скетч.
Так - НЕ РАБОТАЕТ:
Так - РАБОТАЕТ.
Посмотрел видео от ALEXGYVER про ШИМ. Написал себе в скетч вот такой "кусок" (я удалил всё ненужное и оставил то, что относится к необходимой мне функции работы с RGB модулями):
C++:
#include <GyverTimers.h>
volatile uint8_t LightModePointer = 0;
volatile uint8_t RGBvalues [7][3] =
{ {0, 0, 100}, {100, 15, 20}, {15, 20, 25}, {20, 25, 30}, {25, 30, 35}, {30, 35, 40}, {35, 40, 45} };
void setup() {
Timer2.setFrequency(125000UL);
Timer2.enableISR();
pinMode(9,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(10,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(11,OUTPUT); // установить режим вывода для светодиодной летны
}
void loop() {
}
void RGBlightOn ()
{
static volatile byte counterRGB = 0;
if (counterRGB == 0)
{
if ((RGBvalues[LightModePointer][0])*2 > 0) digitalWrite (9, HIGH);
if ((RGBvalues[LightModePointer][1])*2 > 0) digitalWrite (10, HIGH);
if ((RGBvalues[LightModePointer][2])*2 > 0) digitalWrite (11, HIGH);
counterRGB = 0;
}
if (counterRGB == (RGBvalues[LightModePointer][0])*2) {digitalWrite (9, LOW);} //ЗЕЛЁНЫЙ
if (counterRGB == (RGBvalues[LightModePointer][1])*2) {digitalWrite (10, LOW);}
if (counterRGB == (RGBvalues[LightModePointer][2])*2) {digitalWrite (11, LOW);}
counterRGB++;
}
ISR (TIMER2_A)
{
RGBlightOn ();
}
объясните, пожалуйста, почему в таком виде (выше) работает, а когда вставляю в свой скетч, то не работает до тех пор пока не закомментирую две строчки (причём не важно какие. Главное что бы их трех осталась только одна). Тогда Нано начинает загружаться и выполняться скетч.
Так - НЕ РАБОТАЕТ:
C++:
#include <GyverTimers.h>
volatile uint8_t LightModePointer = 0;
volatile uint8_t RGBvalues [7][3] =
{ {0, 0, 100}, {100, 15, 20}, {15, 20, 25}, {20, 25, 30}, {25, 30, 35}, {30, 35, 40}, {35, 40, 45} };
void setup() {
Timer2.setFrequency(125000UL);
Timer2.enableISR();
pinMode(9,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(10,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(11,OUTPUT); // установить режим вывода для светодиодной летны
}
void loop() {
}
void RGBlightOn ()
{
static volatile byte counterRGB = 0;
if (counterRGB == 0)
{
if ((RGBvalues[LightModePointer][0])*2 > 0) digitalWrite (9, HIGH);
if ((RGBvalues[LightModePointer][1])*2 > 0) digitalWrite (10, HIGH);
if ((RGBvalues[LightModePointer][2])*2 > 0) digitalWrite (11, HIGH);
counterRGB = 0;
}
if (counterRGB == (RGBvalues[LightModePointer][0])*2) {digitalWrite (9, LOW);} //ЗЕЛЁНЫЙ
if (counterRGB == (RGBvalues[LightModePointer][1])*2) {digitalWrite (10, LOW);}
if (counterRGB == (RGBvalues[LightModePointer][2])*2) {digitalWrite (11, LOW);}
counterRGB++;
}
ISR (TIMER2_A)
{
RGBlightOn ();
}
Так - РАБОТАЕТ.
C++:
#include <GyverTimers.h>
volatile uint8_t LightModePointer = 0;
volatile uint8_t RGBvalues [7][3] =
{ {0, 0, 100}, {100, 15, 20}, {15, 20, 25}, {20, 25, 30}, {25, 30, 35}, {30, 35, 40}, {35, 40, 45} };
void setup() {
Timer2.setFrequency(125000UL);
Timer2.enableISR();
pinMode(9,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(10,OUTPUT); // установить режим вывода для светодиодной летны
pinMode(11,OUTPUT); // установить режим вывода для светодиодной летны
}
void loop() {
}
void RGBlightOn ()
{
static volatile byte counterRGB = 0;
if (counterRGB == 0)
{
if ((RGBvalues[LightModePointer][0])*2 > 0) digitalWrite (9, HIGH);
if ((RGBvalues[LightModePointer][1])*2 > 0) digitalWrite (10, HIGH);
if ((RGBvalues[LightModePointer][2])*2 > 0) digitalWrite (11, HIGH);
counterRGB = 0;
}
if (counterRGB == (RGBvalues[LightModePointer][0])*2) {digitalWrite (9, LOW);} //ЗЕЛЁНЫЙ
// if (counterRGB == (RGBvalues[LightModePointer][1])*2) {digitalWrite (10, LOW);}
// if (counterRGB == (RGBvalues[LightModePointer][2])*2) {digitalWrite (11, LOW);}
counterRGB++;
}
ISR (TIMER2_A)
{
RGBlightOn ();
}