Возникли проблемы с Serial.write в Arduino - PullRequest
1 голос
/ 04 августа 2020

Я изучаю Arduino и программирую некоторые базовые c вещи просто для упражнений, но я застрял на светодиодах RGB. Я свяжу код, чтобы вы увидели, что происходит.

int RGB_R = A5,
RGB_G = A4,
RGB_B = A3;
    
void setup() {
  pinMode(RGB_R, OUTPUT);
  pinMode(RGB_G, OUTPUT);
  pinMode(RGB_B, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  for(int i = 0; i < 256; i++){
      Serial.write(i);
    for(int j = 0; j < 256; j++){
      for(int k = 0; k < 256; k++){
        RGB_COLOR(i,j,k);
      }
    }
  }  
}

void RGB_COLOR(int R, int G, int B){
  analogWrite(RGB_R, R);
  analogWrite(RGB_G, G);
  analogWrite(RGB_B, B);
}

Я хочу медленно менять цвет RGB с шагом i, j and k, но он меняется между двумя цветами. Другая проблема, с которой я столкнулся, заключается в том, что я не могу напечатать в последовательном режиме, какое значение i, j and k.

Надеюсь, вы, ребята, можете мне помочь.

1 Ответ

1 голос
/ 04 августа 2020

вы должны предоставить некоторую задержку после установки RGB_COLOR

, потому что код выполняется быстро, и вы не видите изменения, добавьте функцию delay, она будет меняться медленнее

void loop() {
  for(int i = 0; i < 256; i++){
    for(int j = 0; j < 256; j++){
      for(int k = 0; k < 256; k++){
        // sending data to pc
        Serial.print("\ti= ");Serial.print(i);
        Serial.print("\tj= ");Serial.print(j);
        Serial.print("\tk= ");Serial.println(k);
        // change the data
        RGB_COLOR(i,j,k);
        delay(100); // wait for 100 ms
      }
    }
  }

}

обновление:

вы должны подключить контакты к штырю PWM ... если вы используете arduino uno, он будет (10,11,6,5,3) и измените соединение

int RGB_R = 10,
    RGB_G = 11,
    RGB_B = 6;

полный код

подключите контакты на (10,11,6) ... потому что analogWrite корректно работает только с выводами pwm

int RGB_R = 10,
    RGB_G = 11,
    RGB_B = 6; 
    
void setup() {
  pinMode(RGB_R, OUTPUT);
  pinMode(RGB_G, OUTPUT);
  pinMode(RGB_B, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  for(int i = 0; i < 256; i++){
    for(int j = 0; j < 256; j++){
      for(int k = 0; k < 256; k++){
        // sending data to pc
        Serial.print("\ti= ");Serial.print(i);
        Serial.print("\tj= ");Serial.print(j);
        Serial.print("\tk= ");Serial.println(k);
        // change the data
        RGB_COLOR(i,j,k);
        delay(100); // wait for 100 ms
      }
    }
  }

}


void RGB_COLOR(int R, int G, int B){
  analogWrite(RGB_R, R);
  analogWrite(RGB_G, G);
  analogWrite(RGB_B, B);
}
...