第三十六课--Microduino 红外遥控器更改EEPROM值/zh

来自Microduino Wikipedia
Pkj讨论 | 贡献2014年3月5日 (三) 06:39的版本 (Created page with "{{Language|Lesson_36--Microduino_Infrared_Remote_Control_Changes_EEPROM_values}} {| style="width: 800px;" |- | ==目的== 本教程将在上一课的基础上教大家如何...")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
Language English

目的

本教程将在上一课的基础上教大家如何用红外控制EEPROM的值,并在Microduino-OLED中显示

设备



原理图

第三十六课-Microduino红外更改EEPROM原理图.jpg

程序

#include <IRremote.h>
#include <avr/eeprom.h>
#include "U8glib.h"
#define EEPROM_write(address, var) eeprom_write_block((const void *)&(var), (void *)(address), sizeof(var))
#define EEPROM_read(address, var) eeprom_read_block((void *)&(var), (const void *)(address), sizeof(var))

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);//定义OLED连接方式

int action;//用于记录遥控器按键
int t;//初始值
int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;

// 定义一个包含 int 类别的 config_type 结构
struct config_type
{
  int num;
};


void draw(int changeNum) {
  // 1) 定义结构变量config,并定义config的内容
  config_type config;
  config.num = changeNum;
  // 2) 把变量config存储到EEPROM,从地址0开始写入。
  EEPROM_write(0, config);
  // 3) 从EEPROM地址0开始读取,结果存储在config_readback
  config_type config_readback;
  EEPROM_read(0, config_readback);
  u8g.setFont(u8g_font_unifont);//字体1
  u8g.drawStr( 0, 16, "Num:");
  u8g.setFont(u8g_font_7x13);//字体2
  u8g.setPrintPos(0, 32);
  u8g.print(config_readback.num);

}  


int deckey(unsigned long t)
{
  switch(t){
  case 0xFD08F7://按钮1的编码
    return 1;
    break;
  case 0xFD8877://按钮2的编码
    return 2;
    break;
  case 0xFD48B7://按钮3的编码
    return 3;
    break;
  case 0xFD28D7://按钮4的编码
    return 4;
    break;
  case 0xFDA857://按钮5的编码
    return 5;
    break;
  case 0xFD6897://按钮6的编码
    return 6;
    break;
  case 0xFD18E7://按钮7的编码
    return 7;
    break;
  case 0xFD9867://按钮8的编码
    return 8;
    break;
  case 0xFD58A7://按钮9的编码
    return 9;
    break;
  default:
    return 0;
    break;
  }
} 

void setup()
{
  irrecv.enableIRIn(); // 初始化红外接收器
  t=0;
}

void loop()
{
  if (irrecv.decode(&results))
  {
    action=deckey(results.value);
    u8g.firstPage();  
    do {
      draw(action);
    } 
    while( u8g.nextPage() ); 

    delay(10);
    irrecv.resume();
  }
}

调试

步骤一:把代码复制到IDE中,编译

步骤二:电路连接如下图:

第三十六课-Microduino红外更改EEPROM连接图.jpg

步骤三:运行代码

步骤四:遥控器对着红外接收器按键,查看OLED显示

结果

OLED会显示红外遥控器的按键值,并把值存入到EEPROM里去。

视频

http://v.youku.com/v_show/id_XNjgwODM4Mzk2.html