aboutsummaryrefslogtreecommitdiffhomepage
path: root/workspace/ts100/src/Main.c
blob: c5563b8fbabd0554ae5c800d8099e709d779c5cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
 * Created by Ben V. Brown
 */

#include "Modes.h"
#include "Bios.h"
#include "MMA8652FC.h"
#include "PID.h"
#include "Oled.h"
#include "Settings.h"
#include "I2C.h"

void setup();

int main(void) {
	setup();/*Setup the system*/
	while (1) {
		Clear_Watchdog(); //reset the Watch dog timer
		ProcessUI();
		DrawUI();
		delayMs(50); //Slow the system down a little bit
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == Bit_RESET) {
			lastMovement = millis();
			//This is a workaround for the line staying low as the user is still moving. (ie sensitivity is too high for their amount of movement)
		}
	}
}
void setup() {
	RCC_Config(); 										//setup system clock
	NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
	GPIO_Config(); 									//setup all the GPIO pins
	Init_EXTI(); 										//Init the EXTI inputs
	Init_Timer3(); 							//Used for the soldering iron tip
	Adc_Init(); 										//Init adc and DMA
	I2C_Configuration();								//Start the I2C hardware
	GPIO_Init_OLED();						//Init the GPIO ports for the OLED
	restoreSettings();									//Load settings
	StartUp_Accelerometer(systemSettings.sensitivity); //Start the accelerometer
	setupPID(); 										//Init the PID values
	readIronTemp(systemSettings.tempCalibration, 0, 0); //load the default calibration value
	Init_Oled(systemSettings.flipDisplay); 				//Init the OLED display

	OLED_DrawString("VER 1.15", 8); 					//Version Number
	delayMs(300);								//Pause to show version number
	showBootLogoIfavailable();
	Start_Watchdog(1000); 		//start the system watch dog as 1 second timeout
}