注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙粒的博客

 
 
 

日志

 
 

arduino: pc控制的调光灯  

2015-02-25 22:53:55|  分类: arduino |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、功能:

1pc发送0~255的数据给arduino,arduinoPWM端口根据接收数据控制灯的亮度。

2pc2slider控件输入数据分别控制arduino2个灯,数据同步在edit控件中显示。

3、由arduinoPWM910脚控制灯

二、通信协议

1、协议4个字节,分别表示开始、设备号、数据、结束。

2、控制第一个灯的字符串为{0x02,0x31,0xdata,0x04}

3、控制第二个灯的字符串为{0x02,0x32,0xdata,0x04}

三、arduino代码

const int ledpin9=9;

const int ledpin10=10;

 char lamp,d;

 int pinR=5;

 int pinB=6;

 int pinG=7;

 int num;

 char rec[4];

 bool flag;

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  pinMode(ledpin9,OUTPUT);

  digitalWrite(ledpin9,HIGH); 

  pinMode(ledpin10,OUTPUT);

  digitalWrite(ledpin10,HIGH); 

  pinMode(pinR,OUTPUT); 

  pinMode(pinG,OUTPUT);

  pinMode(pinB,OUTPUT); 

  digitalWrite(pinR,LOW);                                                                                                                                  

  digitalWrite(pinG,LOW);

  digitalWrite(pinB,LOW); 

  num=0;

  flag=false;

}

 

void loop() {

  // put your main code here, to run repeatedly: 

  if(Serial.available())

  {

    d=Serial.read();   

     if(flag==true)

    {

      rec[num]=d;

      num++;

    }   

    if(num==0)

    {   

      if(d==0x02)

      {

        rec[num]=d;

        num++; 

        flag=true;       

      }

    }   

   if(num==4)

    {

       num=0;

      flag=false;     

      if(rec[3]==0x04)

      {    

      if(rec[1]==0x31)

      {

        lamp=rec[2];

        lamp=~lamp;

        analogWrite(ledpin9,lamp);       

      }

      if(rec[1]==0x32)

      {

         lamp=rec[2];

        lamp=~lamp;

        analogWrite(ledpin10,lamp);

      }  

      }

    }      

  }

}

四、pc端关键代码:

1、pc串口通信部分参考串口通信模板程序

2、slider控件响应程序

void CpcDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)

{

LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

// TODO: 在此添加控件通知处理程序代码


UpdateData(TRUE);


int m_int=m_slider.GetPos();


//发送数据

char d=(char)m_int;

char buf[4]={0x02,0x31,d,0x04};


WriteComm(buf,4);

CString str;

str.Format(_T("%d"),m_int);


//显示数据

GetDlgItem(IDC_EDIT_slider)->SetWindowText(str);


*pResult = 0;

}


  评论这张
 
阅读(443)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017