进阶之路(中级篇) - 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