大海 发表于 2014-5-18 09:29:07

求大神指教程序含义。内有timer库函数

主机
#include "Timer.h"        //添加定时器库函数
#include <Wire.h>        //添加IIC通信库函数
int pin = 13;                //定义LED引脚
int flag=0,count=0;        //定义计数变量
byte LEDflag=0;
byte x=0;        //定义IIC接收状态
volatile int state = LOW;        //LED状态

Timer t;        //创建一个Timer对象

void setup()        //初始化函数
{
Serial.begin(9600);        //定义串口波特率
   Wire.begin();         //开始IIC通信
pinMode(pin, OUTPUT);                //定义脚输出模式
attachInterrupt(0, blink, FALLING);                //中断定义
//t.oscillate(pin, 100, LOW);
t.every(1000, takeReading);                //定时器定义
delay(500);
Wire.requestFrom(3, 1);    //通知3号从机上传1个字节(其实是主机)
}


void loop()                                //程序无限循环函数
{
        if(flag==1){                        //中断标志判断
    flag=0;
    x=1;
    Wire.beginTransmission(3);         //IIC数据发送
    Wire.write(x);               //发送内容
    Wire.endTransmission();    //停止发送
}
        LEDflag=Wire.read();
        if(LEDflag==5){
                t.update();                //定时器更新函数
                LEDflag=4;
        }
      if(LEDflag!=5){
          t.update();                //定时器更新函数
      }
}


void takeReading()                //定时器中断函数
{
count++;
if(count==10){                //判断是否到达10秒钟
    count=0;                        //计数清零
    state=~state;
    digitalWrite(pin,state);                //LED状态改变
}
}

void blink()                        //外部中断函数
{
flag++;
}
从机
#include <Wire.h>        //添加IIC库函数
int LED=13;                        //定义LED引脚
int x=0;                        //数据接收标志

void setup()                //初始化函数
{
Wire.begin(3);          //IIC定义,开始   
Wire.onReceive(receiveEvent);         //注册两个事件
Wire.onRequest(requestEvent);
pinMode(LED,OUTPUT);        //定义输出模式
// Serial.begin(9600);    //测试用   
}

void loop()                        //无限循环
{

if(x==1){                        //IIC数据判断后执行相应操作
   digitalWrite(LED,HIGH);
   delay(3000);                        //灯亮3秒后灭掉
   digitalWrite(LED,LOW);
   x=0;                        //数据清零
}
}


void receiveEvent(int howMany)                //接收数据事件回调函数
{

x = Wire.read();                    //读取IIC数据
// Serial.println(x);   
}


void requestEvent()                        //数据请求回调函数
{

Wire.write(5);                         //IIC数据发送
}

sam 发表于 2014-5-18 11:38:43

两台机在IIC上磨叽,磨叽高兴了闪下灯:lol
页: [1]
查看完整版本: 求大神指教程序含义。内有timer库函数