Read ambient light and toggle display background accordingly. Also: isNight()

This commit is contained in:
Stefan `Sec` Zehl 2011-07-24 01:51:28 +02:00
parent b9a26a5698
commit da8d8003aa
4 changed files with 60 additions and 0 deletions

View File

@ -115,8 +115,15 @@ void tick_default(void) {
ctr++;
if(ctr>100){
VoltageCheck();
LightCheck();
ctr=0;
};
if(isNight())
backlightSetBrightness(100);
else
backlightSetBrightness(0);
if(ctr%5==0){
if(GetVoltage()<3600

View File

@ -8,6 +8,7 @@ OBJS += basic.o
OBJS += reinvoke_isp.o
OBJS += delayms.o
OBJS += voltage.o
OBJS += night.o
OBJS += keyin.o
OBJS += uuid.o
OBJS += crc.o

View File

@ -135,6 +135,11 @@ void delayms(uint32_t ms);
void VoltageCheck(void);
uint32_t GetVoltage(void);
// night.c
void LightCheck(void);
uint32_t GetLight(void);
char isNight(void);
// keyin.c
#define BTN_NONE 0
#define BTN_UP (1<<0)

47
firmware/basic/night.c Normal file
View File

@ -0,0 +1,47 @@
#include <sysinit.h>
#include "basic/basic.h"
#define RANGE (10)
#define HYST (4)
uint32_t light=300*HYST;
char _isnight=1;
void LightCheck(void){
int iocon;
char iodir;
int value;
iocon=IOCON_PIO1_11;
// iodir=gpioGetDir(RB_LED3);
iodir= (GPIO_GPIO1DIR & (1 << (RB_LED3) ))?1:0;
gpioSetDir(RB_LED3, gpioDirection_Input);
IOCON_PIO1_11 = IOCON_PIO1_11_FUNC_AD7|IOCON_PIO1_11_ADMODE_ANALOG;
light-=light/HYST;
light += adcRead(7);
gpioSetDir(RB_LED3, iodir);
IOCON_PIO1_11=iocon;
static uint16_t threshold=0;
if(threshold==0){
// read threshold from config
threshold=320 * HYST;
};
if(_isnight && light>(threshold+RANGE*HYST))
_isnight=0;
if(!_isnight && light<threshold)
_isnight=1;
};
uint32_t GetLight(void){
return light/HYST;
};
char isNight(void){
return _isnight;
};