Re: [閒聊] 大家下班後都在做甚麼
※ 引述《mvsaigx (心火)》之銘言:
: 下班後常常覺得無聊,
: 一個人住外面,附近連運動場都沒有...
: 每天上班、下班,過得好無聊
: 不知大家下班後都做些什麼?
有一次跟朋友聊天,問他在幹麻,他說他正在做遙控電燈
我說:「蛤?那是啥?」
他說:「就...妳也知道我很懶,躺在床上時不想爬起來關燈。」
所以他寫了一套程式,做了一組接收器,改裝了房間的電燈開關
現在,他只要躺在床上,隨便拿起他手邊任一個遙控器,都可以關掉房間的燈...
我跟他要了那套程式來看,看了三年,我還沒看完。
-------main.c
#include "typedef.h"
#include "GPIO.h"
#include "EEPROM.h"
#include "PCA.h"
#include "timer.h"
#include "UART0.h"
#include "ir.h"
#include "7_segment.h"
//====================================================================
#define EEPROM_SIGNATURE 0xAA55
#define EEPROM_ADDR_SIGNATURE 0
#define EEPROM_ADDR_LIGHT 2
#define EEPROM_ADDR_IR_ID 4
#define EEPROM_ADDR_IR_KEY_LIGH 6
#define EEPROM_ADDR_IR_KEY_ADD 7
#define EEPROM_ADDR_IR_KEY_DEC 8
#define EEPROM_ADDR_IR_KEY_RESET 9
//====================================================================
u16_t g_TimeOut = 0;
u8_t g_ZeroWait = 0;
bit g_SetupMode = FALSE;
u8_t g_SwState = 0xFF;
u16_t g_IrCfgId = 0xFFFF;
u16_t g_IrCfgLighKey = IR_NULL;
u16_t g_IrCfgAddKey = IR_NULL;
u16_t g_IrCfgDecKey = IR_NULL;
u16_t g_IrCfgResetKey = IR_NULL;
u8_t g_SetupIdx = 0;
u8_t g_SetupTimeout = 0;
//====================================================================
void set7SegPiliMode(void)
{
if(PIN_LIGHT == SW_ON)
SEG_SetDisMode(SEG_MODE_PILI);
else
SEG_SetDisMode(SEG_MODE_PILI2);
}
//====================================================================
void reverseLightPin(void)
{
PIN_LIGHT = !PIN_LIGHT;
EEPROM_WriteByte(EEPROM_ADDR_LIGHT, PIN_LIGHT);
if(g_TimeOut == 0)
set7SegPiliMode();
}
//====================================================================
void checkIrKey(void)
{
u8_t key, minute;
key = IR_GetSpKey();
if(key != IR_NULL)
{
g_IrCfgId = IR_GetSpId();
IR_SetId(g_IrCfgId);
IR_GetKey();
g_SetupMode = TRUE;
g_SetupIdx = 1;
g_SetupTimeout = 0;
SEG_SetDisMode(SEG_MODE_DEC);
SEG_SetValue(1);
DEBUGP("IR SP Mode: ", key);
return;
}
key = IR_GetKey();
if(key == IR_NULL)
return;
DEBUGP("IR Key: ", key);
if(key == g_IrCfgLighKey)
{
reverseLightPin();
return;
}
else if(key == g_IrCfgAddKey)
{
minute = (g_TimeOut + 59) / 60;
if(minute < 90)
minute += 10;
minute = (minute / 10) * 10;
g_TimeOut = minute * 60;
}
else if(key == g_IrCfgDecKey)
{
minute = g_TimeOut / 60;
if(minute >= 1)
minute--;
minute = (minute / 10) * 10;
g_TimeOut = minute * 60;
}
else if(key == g_IrCfgResetKey)
{
g_TimeOut = 0;
g_ZeroWait = 0;
}
else
return;
SEG_SetDisMode(SEG_MODE_DEC);
SEG_SetValue((g_TimeOut + 59) / 60);
}
//====================================================================
void checkTimeOut(void)
{
static _Timer timer = 0;
if(TMR_GetPeriod(timer) < 100)
return;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.188.22
※ 文章網址: https://www.ptt.cc/bbs/MenTalk/M.1434296131.A.428.html
推
06/14 23:37, , 1F
06/14 23:37, 1F
硬體我叫他做一套就有了,程式是看爽的
推
06/14 23:37, , 2F
06/14 23:37, 2F
推
06/14 23:38, , 3F
06/14 23:38, 3F
你的問題太專業了,我回答不了
推
06/14 23:38, , 4F
06/14 23:38, 4F
推
06/14 23:39, , 5F
06/14 23:39, 5F
推
06/14 23:40, , 6F
06/14 23:40, 6F
推
06/14 23:41, , 7F
06/14 23:41, 7F
→
06/14 23:41, , 8F
06/14 23:41, 8F
窮工程師想省錢啊
推
06/14 23:44, , 9F
06/14 23:44, 9F
→
06/14 23:44, , 10F
06/14 23:44, 10F
→
06/14 23:45, , 11F
06/14 23:45, 11F
推
06/14 23:45, , 12F
06/14 23:45, 12F
→
06/14 23:45, , 13F
06/14 23:45, 13F
→
06/14 23:46, , 14F
06/14 23:46, 14F
推
06/14 23:46, , 15F
06/14 23:46, 15F
就跟用腳泡牛奶一樣的原理啊 XD
推
06/14 23:47, , 16F
06/14 23:47, 16F
推
06/14 23:49, , 17F
06/14 23:49, 17F
推
06/15 00:00, , 18F
06/15 00:00, 18F
推
06/15 00:06, , 19F
06/15 00:06, 19F
推
06/15 00:07, , 20F
06/15 00:07, 20F
推
06/15 00:08, , 21F
06/15 00:08, 21F
推
06/15 00:09, , 22F
06/15 00:09, 22F
→
06/15 00:24, , 23F
06/15 00:24, 23F
→
06/15 00:46, , 24F
06/15 00:46, 24F
推
06/15 01:32, , 25F
06/15 01:32, 25F
推
06/15 06:51, , 26F
06/15 06:51, 26F
推
06/15 07:54, , 27F
06/15 07:54, 27F
推
06/15 08:40, , 28F
06/15 08:40, 28F
→
06/15 08:41, , 29F
06/15 08:41, 29F
推
06/15 18:30, , 30F
06/15 18:30, 30F
推
06/16 11:54, , 31F
06/16 11:54, 31F
推
06/17 11:51, , 32F
06/17 11:51, 32F
※ 編輯: Asanoizumi (220.136.244.158), 06/17/2015 16:42:50
討論串 (同標題文章)