初始提交:龙芯2K0300智能车卖家Demo完整代码
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# demo1
|
||||
add_executable(demo1 demo1.cpp)
|
||||
|
||||
# 链接 OpenCV 库
|
||||
target_link_libraries(demo1 common_lib ${OpenCV_LIBS})
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* @Author: ilikara 3435193369@qq.com
|
||||
* @Date: 2025-01-07 02:21:05
|
||||
* @LastEditors: ilikara 3435193369@qq.com
|
||||
* @LastEditTime: 2025-03-29 01:36:06
|
||||
* @FilePath: /smartcar/demo1/demo1.cpp
|
||||
* @Description: 遥控车Demo,通过键盘控制小车的运动,WASD分别控制前后左右,按下Q退出。由于SSH可能会只捕获到一个按键,所以设定按下WS时清除转向,不按WS时不清除前进后退。
|
||||
*/
|
||||
#include <iostream>
|
||||
#include <unordered_set>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "MotorController.h"
|
||||
#include "PwmController.h"
|
||||
#include "GPIO.h"
|
||||
|
||||
GPIO mortorEN(73);
|
||||
MotorController *motorController[2] = {nullptr, nullptr};
|
||||
PwmController servo(1, 0);
|
||||
|
||||
void Init()
|
||||
{
|
||||
mortorEN.setDirection("out");
|
||||
mortorEN.setValue(1);
|
||||
const int pwmchip[2] = {8, 8};
|
||||
const int pwmnum[2] = {2, 1};
|
||||
const int gpioNum[2] = {12, 13};
|
||||
const int encoder_pwmchip[2] = {0, 3};
|
||||
const int encoder_gpioNum[2] = {75, 72};
|
||||
const int encoder_dir[2] = {1, -1};
|
||||
const unsigned int period_ns = 50000; // 20 kHz
|
||||
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
motorController[i] = new MotorController(pwmchip[i], pwmnum[i], gpioNum[i], period_ns,
|
||||
0, 0, 0, 0,
|
||||
encoder_pwmchip[i], encoder_gpioNum[i], encoder_dir[i]);
|
||||
}
|
||||
|
||||
servo.setPeriod(3000000);
|
||||
servo.setDutyCycle(1500000);
|
||||
servo.enable();
|
||||
}
|
||||
|
||||
// 设置非阻塞输入
|
||||
void setNonBlockingInput(bool enable)
|
||||
{
|
||||
termios tty;
|
||||
tcgetattr(STDIN_FILENO, &tty);
|
||||
if (enable)
|
||||
{
|
||||
tty.c_lflag &= ~ICANON; // 禁用规范模式
|
||||
tty.c_lflag &= ~ECHO; // 禁用回显
|
||||
}
|
||||
else
|
||||
{
|
||||
tty.c_lflag |= ICANON;
|
||||
tty.c_lflag |= ECHO;
|
||||
}
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::unordered_set<char> pressedKeys;
|
||||
|
||||
setNonBlockingInput(true);
|
||||
std::cout << "Press keys (WASD). Press 'q' to quit." << std::endl;
|
||||
|
||||
Init();
|
||||
|
||||
while (true)
|
||||
{
|
||||
char ch = getchar();
|
||||
|
||||
if (ch == 'q')
|
||||
{ // 按 'q' 退出
|
||||
break;
|
||||
}
|
||||
|
||||
// 添加按下的键到集合中,并响应按下的键
|
||||
if (ch == 'w' || ch == 'W')
|
||||
{
|
||||
pressedKeys.insert('W');
|
||||
motorController[0]->updateduty(17);
|
||||
motorController[1]->updateduty(17);
|
||||
servo.setDutyCycle(1520000);
|
||||
}
|
||||
else if (ch == 'a' || ch == 'A')
|
||||
{
|
||||
pressedKeys.insert('A');
|
||||
servo.setDutyCycle(1360000);
|
||||
}
|
||||
else if (ch == 's' || ch == 'S')
|
||||
{
|
||||
pressedKeys.insert('S');
|
||||
motorController[0]->updateduty(-17);
|
||||
motorController[1]->updateduty(-17);
|
||||
servo.setDutyCycle(1520000);
|
||||
}
|
||||
else if (ch == 'd' || ch == 'D')
|
||||
{
|
||||
pressedKeys.insert('D');
|
||||
servo.setDutyCycle(1680000);
|
||||
}
|
||||
|
||||
// 显示当前按下的键
|
||||
std::cout << "Pressed Keys: ";
|
||||
for (char key : pressedKeys)
|
||||
{
|
||||
std::cout << key << " ";
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
// 清空按下的键集合
|
||||
pressedKeys.clear();
|
||||
|
||||
usleep(10000); // 10ms
|
||||
}
|
||||
|
||||
setNonBlockingInput(false);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user