在Arduino中使用Serial.write时遇到一些问题

在Arduino中使用Serial.write时遇到一些问题,arduino,Arduino,我正在学习Arduino和编程一些基本的东西,只是为了锻炼,但我被RGB LED卡住了。我将链接代码,以便您查看发生了什么 int RGB_R=A5, RGB_G=A4, RGB_B=A3; 无效设置(){ pinMode(RGB_R,输出); pinMode(RGB_G,输出); pinMode(RGB_B,输出); Serial.begin(9600); } void循环(){ 对于(int i=0;i

我正在学习Arduino和编程一些基本的东西,只是为了锻炼,但我被RGB LED卡住了。我将链接代码,以便您查看发生了什么

int RGB_R=A5,
RGB_G=A4,
RGB_B=A3;
无效设置(){
pinMode(RGB_R,输出);
pinMode(RGB_G,输出);
pinMode(RGB_B,输出);
Serial.begin(9600);
}
void循环(){
对于(int i=0;i<256;i++){
串行写入(i);
对于(int j=0;j<256;j++){
对于(int k=0;k<256;k++){
RGB_颜色(i,j,k);
}
}
}  
}
无效RGB_颜色(整数R、整数G、整数B){
模拟写入(RGB_R,R);
模拟写入(RGB_G,G);
模拟写入(RGB_B,B);
}
我想随着I、j和k的增加,慢慢改变RGB的颜色,但它在两种颜色之间变化。我遇到的另一个问题是,我无法串行打印
I、j和k的值


希望你们能帮助我。

在设置RGB_颜色后,您必须提供一些延迟

因为代码执行得很快,而且您看不到更改,所以添加一个
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
      }
    }
  }

}

完整代码 连接(10,11,6)上的针脚。。。因为只有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);
}
int RGB_R=10,
RGB_G=11,
RGB_B=6;
无效设置(){
pinMode(RGB_R,输出);
pinMode(RGB_G,输出);
pinMode(RGB_B,输出);
Serial.begin(9600);
}
void循环(){
对于(int i=0;i<256;i++){
对于(int j=0;j<256;j++){
对于(int k=0;k<256;k++){
//向pc发送数据
Serial.print(“\ti=”);Serial.print(i);
Serial.print(“\tj=”);Serial.print(j);
Serial.print(“\tk=”);Serial.println(k);
//更改数据
RGB_颜色(i,j,k);
延迟(100);//等待100毫秒
}
}
}
}
无效RGB_颜色(整数R、整数G、整数B){
模拟写入(RGB_R,R);
模拟写入(RGB_G,G);
模拟写入(RGB_B,B);
}

我刚刚尝试过这样做,但不是答案。LED从绿色一直嘟嘟地响到关闭。@JoãoVítor将引脚更改为pwm引脚。。。。你用哪种arduino。。。anlog write只在pwm引脚上工作串行。print()工作正常,我不明白为什么我写的方式不起作用,你知道吗?更改引脚编号在我第一次尝试时,我使用的是数字(pwm)引脚,但我想我只是要向LED发送高或低数据,而且我们也不会意识到它应该发送多少RGB。我用的是Arduino,你选择的引脚是模拟输入。它们不是模拟输出。不能对它们使用analogWrite,否则它将默认为digitalWrite。尝试使用具有PWM功能的引脚。您还应该研究Serial.write和Serial.print之间的差异。这里你可能需要打印
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);
}