利用Arduino上的atmega8u2制作红外遥控版PPT控制器
演示:http://www.tudou.com/v/ddbAphZMp7w/&rpid=113202837&resourceId=113202837_04_05_99/v.swf
原理:
通过USBASP给Arduino板载的usb转串口芯片刷入新的固件,使其连接电脑时能被识别为键盘。PPT程序打开时,F5键为从头开始放映,方向键右为下一张,方向键左上一张,ESC键为退出放映。目前实现了这么四个键,还可以扩展,源码简单,其余靠各位想象吧。
所需物品:
1.USBASP
2.带atmega8u2的Arduino开发板(如果是atmega16u2,应该需要更换固件,但我这里没有实验的条件)
3.杜邦线
4.打印机线
5.红外线一体接收头
6.红外遥控器
制作:
1.根据源代码注释,连接好线路
2.编译后面提供的代码,并写入atmega2560
3.,断开Arduino与电脑连接,将USBASP与atmega8u2的ISP接口相连,然后连接电脑,使用avr_fighter上写入Arduino-keyboard-0.3-mega2560.hex这个程序,这里芯片选的是atmega8,烧写前最好备份原固件,不过Arduino官网也提供下载
4.将Arduino重新与电脑连接,此时电脑会识别到一个USB键盘并进行驱动安装,安装完驱动,打开Power Point程序即可以控制
图片说明:
连接图:
关于USBASP与ISP:
烧写界面:
源代码:
#include <IRremote.h>
#define RECV_PIN 2
#define CODE_PLAY 0xFFC23D
#define CODE_NEXT 0xFF02FD
#define CODE_PREV 0xFF22DD
#define CODE_EXIT 0xFF906F
#define MOD_CONTROL_LEFT (1<<0)
#define MOD_SHIFT_LEFT (1<<1)
#define MOD_ALT_LEFT (1<<2)
#define MOD_GUI_LEFT (1<<3)
#define MOD_CONTROL_RIGHT (1<<4)
#define MOD_SHIFT_RIGHT (1<<5)
#define MOD_ALT_RIGHT (1<<6)
#define MOD_GUI_RIGHT (1<<7)
#define KEY_A 4
#define KEY_B 5
#define KEY_C 6
#define KEY_D 7
#define KEY_E 8
#define KEY_F 9
#define KEY_G 10
#define KEY_H 11
#define KEY_I 12
#define KEY_J 13
#define KEY_K 14
#define KEY_L 15
#define KEY_M 16
#define KEY_N 17
#define KEY_O 18
#define KEY_P 19
#define KEY_Q 20
#define KEY_R 21
#define KEY_S 22
#define KEY_T 23
#define KEY_U 24
#define KEY_V 25
#define KEY_W 26
#define KEY_X 27
#define KEY_Y 28
#define KEY_Z 29
#define KEY_1 30
#define KEY_2 31
#define KEY_3 32
#define KEY_4 33
#define KEY_5 34
#define KEY_6 35
#define KEY_7 36
#define KEY_8 37
#define KEY_9 38
#define KEY_0 39
#define KEY_ENTER 40
#define KEY_ESCAPE41
#define KEY_BACKSPACE42
#define KEY_TAB 43
#define KEY_SPACE 44
#define KEY_MINUS 45
#define KEY_EQUALS46
#define KEY_LBRACKET 47
#define KEY_RBRACKET 48
#define KEY_BACKSLASH 49
#define KEY_NONUS_NUMBER 50
#define KEY_SEMICOLON 51
#define KEY_QUOTE 52
#define KEY_TILDE 53
#define KEY_COMMA 54
#define KEY_PERIOD55
#define KEY_SLASH 56
#define KEY_CAPSLOCK 57
#define KEY_F1 58
#define KEY_F2 59
#define KEY_F3 60
#define KEY_F4 61
#define KEY_F5 62
#define KEY_F6 63
#define KEY_F7 64
#define KEY_F8 65
#define KEY_F9 66
#define KEY_F10 67
#define KEY_F11 68
#define KEY_F12 69
#define KEY_PRNTSCRN 70
#define KEY_SCROLLLOCK71
#define KEY_PAUSE 72
#define KEY_INSERT 73
#define KEY_HOME 74
#define KEY_PAGEUP 75
#define KEY_DELETE 76
#define KEY_END 77
#define KEY_PAGEDOWN 78
#define KEY_RIGHT_ARROW 79
#define KEY_LEFT_ARROW80
#define KEY_DOWN_ARROW81
#define KEY_UP_ARROW 82
#define KEY_NUM_LOCK 83
#define KEY_NUM_DIV 84
#define KEY_NUM_MUL 85
#define KEY_NUM_SUB 86
#define KEY_NUM_ADD 87
#define KEY_NUM_ENTER 88
#define KEY_NUM_1 89
#define KEY_NUM_2 90
#define KEY_NUM_3 91
#define KEY_NUM_4 92
#define KEY_NUM_5 93
#define KEY_NUM_6 94
#define KEY_NUM_7 95
#define KEY_NUM_8 96
#define KEY_NUM_9 97
#define KEY_NUM_0 98
#define KEY_NUM_DOT 99
#define KEY_ARROW_LEFT 0x50
IRrecv irrecv(RECV_PIN);
decode_results results;
uint8_t buf = { 0 };
void releaseKey()
{
buf = 0;
buf = 0;
Serial.write(buf, 8); // Release key
}
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); //初始化红外遥控
//pinMode(13,1);
}
void loop() {
if (irrecv.decode(&results)) {
if(results.value == CODE_PLAY){
//Serial.println("You Press Play button");
buf = KEY_F5;
Serial.write(buf, 8);
releaseKey();
}
else if(results.value == CODE_NEXT) {
//Serial.println("You Press Next button");
buf = KEY_RIGHT_ARROW;
Serial.write(buf, 8);
releaseKey();
}
else if(results.value == CODE_PREV){
//Serial.println("You Press Prcv button");
buf = KEY_LEFT_ARROW;
Serial.write(buf, 8);
releaseKey();
}
else if(results.value == CODE_EXIT){
//Serial.println("You Press Exit button");
buf = KEY_ESCAPE;
Serial.write(buf, 8);
releaseKey();
}
/*
else {
Serial.println("You Press Unknown button!");
}
*/
irrecv.resume(); // 接收下一个值
}
}
转播微博http://app.qlogo.cn/mbloghead/792461ab49809187ae3e 呵呵,东西做的不错,就是感觉用了牛刀! 好帖子,顶! 楼主,有原来的固件吗。。按照你的做法实现了。现在想要还原,找不到固件了。。:'(:'(。。
GW.wangshuo 发表于 2014-11-29 13:37 static/image/common/back.gif
楼主,有原来的固件吗。。按照你的做法实现了。现在想要还原,找不到固件了。。。。
arduino官网有哦 @Rooting大哥,固件怎么制作呢?
页:
[1]