Files
RkApp/GPIOSignal/src/sendGpioSignal.cpp.bak
2025-10-31 13:32:51 +08:00

113 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
本程序用于读取配置文件
根据配置文件发送高低电平
发送引脚固定:7,8
*/
#include <iostream>
#include <thread>
#include <wiringPi.h>
#include "/home/orangepi/RKApp/softWareInit/NetraLib/include/Netra.hpp"
using namespace std;
using namespace QCL;
/*
Parmas:
argv[1]: GPIO引脚编号
argv[2]: 设置引脚为高/低电平
*/
const string SetFile = "/home/orangepi/InitAuth/conf/.env";
// 初始化GPIO引脚
int InitGpio(int GPIO_Pin1, int GPIO_Pin2);
// 写入GPIO引脚
void WriteGpio(int GPIO_Pin, int value);
// 获取输出模式
bool GetOutValue(int &value);
int main(int argc, char *argv[])
{
int GPIO_Pin1 = 7;
int GPIO_Pin2 = 8;
int value = 0;
cout << "[sendGpioSignal] 启动,读取配置: " << SetFile << endl;
if (GetOutValue(value) == false)
{
cerr << "[sendGpioSignal] 未读取到 outPutMode程序退出" << endl;
return -1;
}
cout << "[sendGpioSignal] 读取到 outPutMode=" << (value == 1 ? "true" : "false") << endl;
// 初始化GPIO引脚
if (InitGpio(GPIO_Pin1, GPIO_Pin2) != 0)
{
cout << "Error: Failed to initialize GPIO pin " << endl;
return 1;
}
// 写入GPIO引脚
cout << "[sendGpioSignal] 设置 GPIO(" << GPIO_Pin1 << "," << GPIO_Pin2 << ") 为 "
<< (value == 1 ? "HIGH" : "LOW") << endl;
WriteGpio(GPIO_Pin1, value);
WriteGpio(GPIO_Pin2, value);
cout << "[sendGpioSignal] 完成" << endl;
this_thread::sleep_for(chrono::milliseconds(100));
WriteGpio(GPIO_Pin1, !value);
WriteGpio(GPIO_Pin2, !value);
return 0;
}
// 获取输出模式
bool GetOutValue(int &value)
{
bool flag = true;
// 读取文件
ReadFile *rf =new ReadFile(SetFile);
if (rf->Open() == false)
{
cerr << "读取文件失败" << endl;
flag = false;
}
auto str = rf->ReadLines();
for (auto &ii : str)
{
if (ii.find("outPutMode") != string::npos)
{
value = (ii.substr(string("outPutMode:").size()) == "true" ? 1 : 0);
}
}
return flag;
}
// 初始化GPIO引脚
int InitGpio(int GPIO_Pin1, int GPIO_Pin2)
{
// 使用物理引脚编号,确保与实际排针一致
if (wiringPiSetupPhys() != 0)
{
return -1; // 初始化失败
}
pinMode(GPIO_Pin1, OUTPUT);
pinMode(GPIO_Pin2, OUTPUT);
digitalWrite(GPIO_Pin1, LOW); // 默认设置为低电平
digitalWrite(GPIO_Pin2, LOW); // 默认设置为低电平
return 0; // 初始化成功
}
// 写入GPIO引脚
void WriteGpio(int GPIO_Pin, int value)
{
digitalWrite(GPIO_Pin, value == 1 ? HIGH : LOW);
}