This commit is contained in:
parent
1bdd51db00
commit
80f7f8f234
16
include/ir.h
16
include/ir.h
|
@ -1,7 +1,9 @@
|
|||
#ifndef IR_H
|
||||
#define IR_H
|
||||
|
||||
#include <SoftwareSerial.h>
|
||||
#include <Arduino.h>
|
||||
#include "consts.h"
|
||||
|
||||
enum IRMode
|
||||
{
|
||||
|
@ -9,24 +11,20 @@ enum IRMode
|
|||
IR_MODE_UART
|
||||
};
|
||||
|
||||
struct IRConfig
|
||||
{
|
||||
IRMode mode;
|
||||
uint8_t pins[5];
|
||||
};
|
||||
|
||||
struct IRData
|
||||
{
|
||||
uint8_t length;
|
||||
IRMode mode;
|
||||
uint8_t pins[IR_COUNT];
|
||||
uint8_t count;
|
||||
uint8_t data[8];
|
||||
};
|
||||
|
||||
class IR
|
||||
{
|
||||
public:
|
||||
static IRConfig config;
|
||||
static SoftwareSerial *uart;
|
||||
static IRData data;
|
||||
static void init(IRConfig config);
|
||||
static void init();
|
||||
static void update();
|
||||
};
|
||||
|
||||
|
|
|
@ -13,9 +13,11 @@ platform = espressif32
|
|||
board = esp32dev
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
lib_deps = plerup/EspSoftwareSerial@^8.2.0
|
||||
|
||||
[env:esp32s3]
|
||||
platform = espressif32
|
||||
board = adafruit_feather_esp32s3_tft
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
lib_deps = plerup/EspSoftwareSerial@^8.2.0
|
||||
|
|
36
src/ir.cpp
36
src/ir.cpp
|
@ -1,29 +1,45 @@
|
|||
#include "ir.h"
|
||||
|
||||
IRConfig IR::config;
|
||||
IRData IR::data;
|
||||
SoftwareSerial *IR::uart;
|
||||
|
||||
void IR::init(IRConfig config)
|
||||
void IR::init()
|
||||
{
|
||||
Serial.println("IR Init");
|
||||
IR::config = config;
|
||||
if (config.mode == IRMode::IR_MODE_GPIO)
|
||||
data.mode = IR_MODE;
|
||||
data.count = IR_COUNT;
|
||||
if (IR_MODE == IRMode::IR_MODE_GPIO)
|
||||
{
|
||||
data.length = 5;
|
||||
for (int i = 0; i < 5; i++)
|
||||
uint8_t pins[IR_COUNT] = IR_PINS;
|
||||
for (int i = 0; i < IR_COUNT; i++)
|
||||
{
|
||||
pinMode(config.pins[i], INPUT);
|
||||
data.pins[i] = pins[i];
|
||||
};
|
||||
}
|
||||
else if (IR_MODE == IRMode::IR_MODE_UART)
|
||||
{
|
||||
uint8_t pins[2] = IR_PINS;
|
||||
data.pins[0] = pins[0];
|
||||
data.pins[1] = pins[1];
|
||||
uart = new SoftwareSerial(pins[0], pins[1]);
|
||||
uart->begin(IR_BAUD);
|
||||
}
|
||||
}
|
||||
|
||||
void IR::update()
|
||||
{
|
||||
if (config.mode == IRMode::IR_MODE_GPIO)
|
||||
if (data.mode == IRMode::IR_MODE_GPIO)
|
||||
{
|
||||
for (int i = 0; i < 5; i++)
|
||||
for (int i = 0; i < data.count; i++)
|
||||
{
|
||||
data.data[i] = digitalRead(config.pins[i]);
|
||||
data.data[i] = digitalRead(data.pins[i]);
|
||||
}
|
||||
}
|
||||
else if (data.mode == IRMode::IR_MODE_UART)
|
||||
{
|
||||
if (uart->available())
|
||||
{
|
||||
data.data[0] = uart->read();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -28,7 +28,7 @@ void setup()
|
|||
{MOTOR_D_PWMB, MOTOR_D_BIN1, MOTOR_D_BIN2});
|
||||
|
||||
// 初始化红外循迹模块
|
||||
IR::init({IR_MODE, IR_PINS});
|
||||
IR::init();
|
||||
|
||||
// 初始化状态灯
|
||||
if (STATUS_LED_ENABLE)
|
||||
|
|
Loading…
Reference in New Issue