极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9641|回复: 1

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

[复制链接]
发表于 2014-5-18 09:29:07 | 显示全部楼层 |阅读模式
主机
#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数据发送
}

回复

使用道具 举报

发表于 2014-5-18 11:38:43 | 显示全部楼层
两台机在IIC上磨叽,磨叽高兴了闪下灯
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 14:13 , Processed in 0.035809 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表