-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathirremote.c
49 lines (38 loc) · 875 Bytes
/
irremote.c
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
#include <esp8266.h>
#include <espressif/esp_common.h>
#include "irremote.h"
uint8_t ir_gpio_pin;
uint16_t frequency;
void ir_set_pin(uint8_t pin) {
ir_gpio_pin = pin;
}
void ir_set_frequency(uint16_t khz) {
frequency = 1000 / khz / 2;
}
void ir_mark(uint16_t time) {
uint32_t start = sdk_system_get_time();
while(sdk_system_get_time() - start < time) {
gpio_write(ir_gpio_pin, 1);
sdk_os_delay_us(frequency);
gpio_write(ir_gpio_pin, 0);
sdk_os_delay_us(frequency);
}
}
void ir_space(uint16_t time) {
gpio_write(ir_gpio_pin, 0);
if (time > 0) {
sdk_os_delay_us(time);
}
}
void ir_send_raw(uint16_t buffer[], uint16_t bufferSize, uint16_t hz) {
ir_set_frequency(hz);
uint16_t i;
for (i = 0; i < bufferSize; i++) {
if (i & 1) {
ir_space(buffer[i]);
} else {
ir_mark(buffer[i]);
}
}
ir_space(0);
}