进阶之路(中级篇) - 015 串口控RGB三色灯

本文由博主原创,如有不对之处请指明,转载请说明出处。

 1 /*********************************
 2 代码功能:串口控RGB三色灯
 3 使用函数:
 4     Serial.flush();                                 //清空缓存区
 5     Serial.available();                             //读取当前串口缓冲池的数据量
 6     Serial.print(字符串);                           //通过TX传出去
 7     Serial.write(字符串);                           //写入串口中
 8     Serial.println(字符串);                         //通过TX传出去,并在尾端加换行
 9     strtok(字符串,'分隔符');                        //字符串分解
10     strtol(字符串地址,NULL(默认),设置进制);          //字符转整形
11     constrain(源数据,区间下界,区间上界);             //区间函数
12     analogWrite(引脚号.电平);                       //IO输出函数
13 创作时间:2016*01*05
14 作者邮箱:jikexianfeng@outlook.com
15 ********************************/
16 char buffer[18];                                //声明一个字符空间
17 int red,green,blue;                             //定义一个变量
18 
19 int Redpin = 11;                                //
20 int Greenpin = 10;                              //绿
21 int Bluepin = 9;                                //
22 
23 void setup(){
24     Serial.begin(9600);                         //初始化串口波特率
25     Serial.flush();                             //清空串口缓存
26     pinMode(Redpin,OUTPUT);
27     pinMode(Greenpin,OUTPUT);
28     pinMode(Bluepin,OUTPUT);
29 }
30 void loop()
31 {
32     if(Serial.available() > 0){                 //读取当前串口缓冲池的数据量
33         int index = 0;
34         delay(100);
35         int numChar = Serial.available();       //获取当前缓存池的数量
36         if(numChar > 15){                       //只要最后的15个字符
37             numChar = 15;
38         }
39         while(numChar--){
40             buffer[index++] = Serial.read();    //提取缓存中的数据
41         }
42         splitString(buffer);                    //传入功能函数
43     }
44 }
45 void splitString(char * data){
46     Serial.print("Data entered:");
47     Serial.println(data);
48     char* parameter;
49     parameter = strtok(data,",");               //分解字符串
50     while(parameter != NULL){                   //
51         setLED(parameter);
52         parameter = strtok(NULL,",");
53     }
54     for(int x=0;x<16;x++){
55         buffer[x]='\0';
56     }
57     Serial.flush();
58 }
59 void setLED(char *data){
60     if((data[0]=='r')||(data[0] == 'R')){       //是否是 r
61         int Ans = strtol(data+1,NULL,10);       //字符转整形
62         Ans = constrain(Ans,0,255);             //去区间值
63         analogWrite(Redpin,Ans);                //输出
64         Serial.print("Red is set to :");
65         Serial.println(Ans);
66     }
67     
68     if((data[0] == 'g')||(data[0] == 'G')){
69         int Ans = strtol(data+1,NULL,10);
70         Ans = constrain(Ans,0,255);
71         analogWrite(Greenpin,Ans);
72         Serial.print("Green is set to :");
73         Serial.println(Ans);
74     }
75     
76     if((data[0] == 'b')||(data[0] == 'B')){
77         int Ans = strtol(data+1,NULL,10);
78         Ans = constrain(Ans,0,255);
79         analogWrite(Bluepin,Ans);
80         Serial.print("Blue is set to :");
81         Serial.println(Ans);
82     }
83 }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

参考书籍:http://vdisk.weibo.com/s/B_U0yKSwLLqNM?category_id=0&parents_ref=B_U0yKSx62tsp

参考网站:http://wiring.org.co/reference/

参考网页:http://www.cnblogs.com/jikexianfeng/p/6243654.html

参考网页:http://www.cnblogs.com/rayray/p/3198091.html

posted @ 2017-05-08 16:13  极客先锋  阅读(1485)  评论(0编辑  收藏  举报