2020-11-14 22:50:55 +01:00
/*! @file Main.c
@ brief app main
@ author Hendrik Schutter
@ version V1 .0
@ date 14.11 .2020
This file contains the main app function and init .
*/
2020-11-15 20:14:26 +01:00
# include "audio.h"
# include "Board_DAC.h"
2020-11-14 22:50:55 +01:00
# include "Welcome.h"
2020-12-05 23:50:47 +01:00
# include "Board_ADC.h"
2020-11-14 22:50:55 +01:00
2020-11-14 23:10:32 +01:00
//25x25 Dot Qr Code, 25bits per line (x)
2020-11-14 22:50:55 +01:00
uint32_t au32QrCode [ 25 ] =
{
2020-11-14 23:10:32 +01:00
0x1FC897F ,
0x105BE41 ,
0x174E55D ,
0x175A85D ,
0x174555D ,
0x1054B41 ,
0x1FD557F ,
0x1400 ,
0x1F7DBAA ,
0xF08422 ,
0x15B31B ,
0x48E1C1 ,
0xEFA8D7 ,
0x15BDCAA ,
0x12703FB ,
0x1589271 ,
0x1161DF4 ,
0x1C918 ,
0x1FDB557 ,
0x1042118 ,
2020-11-15 11:19:55 +01:00
0x175E3F7 ,
2020-11-14 23:10:32 +01:00
0x1759A5F ,
0x1758D0D ,
0x1055BB9 ,
0x1FDD43F
2020-11-14 22:50:55 +01:00
} ;
static void vMainInitApp ( void ) ;
static void vPrintQr ( void ) ;
2020-12-05 21:50:44 +01:00
static bool bCheckButton ( void ) ;
2020-12-05 23:50:47 +01:00
static void vUpdateVolume ( void ) ;
//static void SysTickHandler(void);
2020-11-14 22:50:55 +01:00
/**
* @ fn int main ( void )
* @ brief app entry point
* @ param void
* @ return int
* @ author hendrik schutter
* @ date 14.11 .2020
*/
int main ( void )
{
vMainInitApp ( ) ; //init app
2020-11-14 23:10:32 +01:00
vPrintQr ( ) ; //print Qr
2020-12-05 23:52:24 +01:00
2020-11-30 18:49:36 +01:00
vStartAudio ( ) ;
2020-11-14 23:10:32 +01:00
2020-12-05 21:50:44 +01:00
while ( ! bCheckButton ( ) ) {
2020-12-05 23:52:24 +01:00
ADC_StartConversion ( ) ;
vUpdateLyrics ( ) ;
vUpdateVolume ( ) ;
2020-11-14 23:10:32 +01:00
}
2020-12-05 23:52:24 +01:00
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_Off ( 3 ) ;
LED_Off ( 4 ) ;
LED_Off ( 5 ) ;
LED_Off ( 6 ) ;
LED_Off ( 7 ) ;
LPC_TIM0 - > TCR = 0 ; // stop music
2020-11-14 22:50:55 +01:00
}
/**
* @ fn void vMainInitApp ( void )
* @ brief initialize app
* @ param void
* @ return void
* @ author hendrik schutter
* @ date 14.11 .2020
*/
static void vMainInitApp ( void )
{
2020-11-15 20:14:26 +01:00
// Init audio pin
DAC_Initialize ( ) ;
2020-11-14 22:50:55 +01:00
// Init GLCD
GLCD_Initialize ( ) ;
GLCD_SetForegroundColor ( GLCD_COLOR_BLACK ) ;
GLCD_SetBackgroundColor ( GLCD_COLOR_WHITE ) ;
GLCD_ClearScreen ( ) ;
GLCD_SetFont ( & GLCD_Font_16x24 ) ; // declared as extern in externals.h
2020-12-06 20:21:13 +01:00
GLCD_DrawString ( 4 * GLCD_Font_16x24 . width , 5 , " fckaf.de/2fs " ) ;
2020-11-14 22:50:55 +01:00
// Init LED
LED_Initialize ( ) ;
2020-12-05 23:52:24 +01:00
Buttons_Initialize ( ) ;
ADC_Initialize ( ) ;
2020-11-14 22:50:55 +01:00
}
/**
* @ fn static void vPrintQr ( void )
* @ brief print Qr code from array
* @ param void
* @ return void
* @ author hendrik schutter
* @ date 14.11 .2020
*/
2020-11-14 23:10:32 +01:00
static void vPrintQr ( void ) {
2020-11-30 18:49:36 +01:00
uint8_t u8DotSize = 7U ;
2020-11-14 23:10:32 +01:00
uint8_t u8Yoffset = 30U ;
2020-11-30 18:49:36 +01:00
uint8_t u8Xoffset = 72U ;
2020-11-14 23:10:32 +01:00
for ( uint8_t y = 0 ; y < 25 ; y + + ) {
for ( int8_t x = 0 ; x < 25 ; x + + ) {
if ( au32QrCode [ y ] & ( 1 < < x ) )
{
//print dots u8DotSize X u8DotSize
for ( uint8_t u8DotLine = 0 ; u8DotLine < u8DotSize ; u8DotLine + + )
{
//print horizontal line, swap left to right
GLCD_DrawHLine ( - ( x - 24 ) * u8DotSize + u8Xoffset , y * u8DotSize + u8DotLine + u8Yoffset , u8DotSize ) ;
}
}
}
}
2020-11-14 22:50:55 +01:00
}
2020-12-05 21:50:44 +01:00
static bool bCheckButton ( void )
2020-12-05 23:52:24 +01:00
{
static bool lastState ;
const bool btnState = Buttons_GetState ( ) ;
static uint16_t u16Debunce ;
if ( u16Debunce < 1000U )
{
u16Debunce + + ;
}
if ( btnState ) //btn pressed
{
if ( lastState & & ( u16Debunce > = 300U ) )
{
lastState = false ;
u16Debunce = 0 ;
return false ;
}
if ( ( ! lastState ) & & ( u16Debunce = = 1000U ) )
{
lastState = true ;
u16Debunce = 0 ;
return true ;
}
}
return lastState ;
2020-12-05 21:50:44 +01:00
}
2020-12-05 23:50:47 +01:00
static void vUpdateVolume ( void )
{
2020-12-05 23:52:24 +01:00
if ( ADC_ConversionDone ( ) = = 0 )
{
uint32_t u32ADCValue = ADC_GetValue ( ) ;
if ( u32ADCValue < = 512 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_Off ( 3 ) ;
LED_Off ( 4 ) ;
LED_Off ( 5 ) ;
LED_Off ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 16 ;
return ;
}
if ( u32ADCValue < = 1024 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_Off ( 3 ) ;
LED_Off ( 4 ) ;
LED_Off ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 64 ;
return ;
}
if ( u32ADCValue < = 1536 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_Off ( 3 ) ;
LED_Off ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 144 ;
return ;
}
if ( u32ADCValue < = 2048 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_Off ( 3 ) ;
LED_On ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 256 ;
return ;
}
if ( u32ADCValue < = 2560 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_Off ( 2 ) ;
LED_On ( 3 ) ;
LED_On ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 400 ;
return ;
}
if ( u32ADCValue < = 3072 )
{
LED_Off ( 0 ) ;
LED_Off ( 1 ) ;
LED_On ( 2 ) ;
LED_On ( 3 ) ;
LED_On ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 576 ;
return ;
}
if ( u32ADCValue < = 3584 )
{
LED_Off ( 0 ) ;
LED_On ( 1 ) ;
LED_On ( 2 ) ;
LED_On ( 3 ) ;
LED_On ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 784 ;
return ;
}
if ( u32ADCValue < = 4090 )
{
LED_On ( 0 ) ;
LED_On ( 1 ) ;
LED_On ( 2 ) ;
LED_On ( 3 ) ;
LED_On ( 4 ) ;
LED_On ( 5 ) ;
LED_On ( 6 ) ;
LED_On ( 7 ) ;
u32Volume = 1023 ;
return ;
}
}
2020-12-05 23:50:47 +01:00
}
2020-11-14 22:50:55 +01:00