-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathProject2.pas
84 lines (68 loc) · 2.23 KB
/
Project2.pas
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
program project2;
uses
system_LPC1114, utils, delay, spi, sh1106, adc, onewire, ds18b20;
const
OSC = 12000000;
FREQ = 48000000;
var
buffer : array [0..1024] of byte;
temperature : byte;
dev : byte;
data : String;
devState : TSearchState;
begin
// Inicjalize System Clock
SystemInit(OSC, FREQ);
LPC_SYSCON.SYSAHBCLKCTRL := LPC_SYSCON.SYSAHBCLKCTRL or ((1 shl 6) or (1 shl 16));
// Delay Init
Delay_Init();
SPI_Init(SPI0, SCK0_0_6);
// ADC Init
ADC_Init();
LPC_IOCON.R_PIO0_11 := $02;
SetInputs(0, GPIO_Pin_11);
// Init OLED
SH1106_Init();
SH1106_Clear(@buffer);
SH1106_Display(@buffer);
// Configure ports
SetOutputs(0, GPIO_Pin_1);
// Main loop
while true do
begin
SetPins(0, GPIO_Pin_1); // Led OFF
Delay_MS(1000);
// clear display buffer
SH1106_Clear(@buffer);
// convert temperature and get
DS18B20_Start_Convert();
temperature := DS18B20_Read_Temperature();
// Inicjalize struct for searching devices
devState.done:= false;
devState.lastZeroBranch := -1;
dev := 0;
// search devices
while (devState.done = false) do
begin
if(OW_Search_Device(devState)) then
inc(dev)
else devState.done:= true;
end;
data := 'OneWire devices: ' + IntToStr(dev) ;
SH1106_String(0, 0, PChar(@data[1]), 12, 1, @buffer);
FillChar(data, length(data)+1, #00); // clear buffer
data := 'ADC: ' + IntToStr(ADC_Get(0));
SH1106_String(0, 12, PChar(@data[1]), 12, 1, @buffer);
FillChar(data, length(data)+1, #00); // clear buffer
// Show others graphics
SH1106_Bitmap(0, 24, @Bat816, 16, 8, @buffer);
SH1106_Bitmap(0, 34, @Bluetooth88, 8,8, @buffer);
SH1106_Bitmap(0, 44, @Msg816, 16,8, @buffer);
SH1106_Char3216(20, 24, char((temperature div 10) + $30), @buffer);
SH1106_Char3216(36, 24, char((temperature mod 10) + $30), @buffer);
// Send buffer to OLED
SH1106_Display(@buffer);
ClrPins(0, GPIO_Pin_1); // Led ON
Delay_MS(100);
end;
end.