123 lines
4.7 KiB
C
123 lines
4.7 KiB
C
/*********************************************************************************************************************
|
||
* MSPM0G3507 Opensource Library 即(MSPM0G3507 开源库)是一个基于官方 SDK 接口的第三方开源库
|
||
* Copyright (c) 2022 SEEKFREE 逐飞科技
|
||
*
|
||
* 本文件是 MSPM0G3507 开源库的一部分
|
||
*
|
||
* MSPM0G3507 开源库 是免费软件
|
||
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
|
||
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
|
||
*
|
||
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
|
||
* 甚至没有隐含的适销性或适合特定用途的保证
|
||
* 更多细节请参见 GPL
|
||
*
|
||
* 您应该在收到本开源库的同时收到一份 GPL 的副本
|
||
* 如果没有,请参阅<https://www.gnu.org/licenses/>
|
||
*
|
||
* 额外注明:
|
||
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
|
||
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
|
||
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
|
||
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
|
||
*
|
||
* 文件名称 mian
|
||
* 公司名称 成都逐飞科技有限公司
|
||
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
|
||
* 开发环境 MDK 5.37
|
||
* 适用平台 MSPM0G3507
|
||
* 店铺链接 https://seekfree.taobao.com/
|
||
********************************************************************************************************************/
|
||
|
||
#include "zf_common_headfile.h"
|
||
// 打开新的工程或者工程移动了位置务必执行以下操作
|
||
// 第一步 关闭上面所有打开的文件
|
||
// 第二步 project->clean 等待下方进度条走完
|
||
|
||
// 本例程是开源库空工程 可用作移植或者测试各类内外设
|
||
// 本例程是开源库空工程 可用作移植或者测试各类内外设
|
||
// 本例程是开源库空工程 可用作移植或者测试各类内外设
|
||
|
||
// **************************** 代码区域 ****************************
|
||
#include "Motor.h"
|
||
#include "zf_device_key.h"
|
||
#include "Task.h"
|
||
#include "IMU.h"
|
||
#include "Beep.h"
|
||
#include "GrayscaleSensor.h"
|
||
#include "MotorEncoder.h"
|
||
|
||
/*
|
||
定时器资源分配:
|
||
G0 右电机PWM
|
||
G7 左电机PWM
|
||
A0 100Hz任务
|
||
A1 50Hz任务
|
||
G6 20Hz任务
|
||
*/
|
||
/*
|
||
中断等级分配:
|
||
0 GPIOA_INT_IRQn 外部中断模拟四倍频正交编码器
|
||
1 TIMA0_INT_IRQn 100Hz任务
|
||
1 TIMA1_INT_IRQn 50Hz任务
|
||
1 UART2_INT_IRQn Command串口接收中断
|
||
7 TIMG6_INT_IRQn 20Hz任务
|
||
*/
|
||
int main (void)
|
||
{
|
||
clock_init(SYSTEM_CLOCK_80M); // 时钟配置及系统初始化<务必保留>
|
||
debug_init(); // 调试串口信息初始化
|
||
// 此处编写用户代码 例如外设初始化代码等
|
||
beep_init(50);
|
||
motor_init();
|
||
key_init(50);//按键初始化,参数为扫描周期50ms
|
||
imu_init(200);// IMU 初始化,参数为采样频率 200Hz 需要与定时器中断频率一致
|
||
imu_calibrate_gyro(); // IMU 陀螺仪零偏校准 需要在静止状态下调用
|
||
grayscale_sensor_init();//灰度传感器初始化
|
||
motor_encoder_init();//电机编码器初始化
|
||
|
||
task_init();
|
||
|
||
beep_on_time(500);//初始化完成,蜂鸣器响 500ms
|
||
// 此处编写用户代码 例如外设初始化代码等
|
||
while(1)
|
||
{
|
||
// 此处编写需要循环执行的代码
|
||
system_delay_ms(100);
|
||
char str[20] = {0};
|
||
sprintf(str,"%d,%d,%d\n", (int)(imu_angle.yaw*100),(int)(yaw_ref*100),(int)(grayscale_sensor_position*100));
|
||
debug_send_buffer((const uint8 *)str,strlen(str));
|
||
if(KEY_SHORT_PRESS == key_get_state(KEY_1))
|
||
{
|
||
while(KEY_SHORT_PRESS == key_get_state(KEY_1));
|
||
// 等待按键释放
|
||
grayscale_sensor_set_white();
|
||
beep_on_time(200);
|
||
}
|
||
else if(KEY_SHORT_PRESS == key_get_state(KEY_2))
|
||
{
|
||
while(KEY_SHORT_PRESS == key_get_state(KEY_2));
|
||
// 等待按键释放
|
||
grayscale_sensor_set_black();
|
||
beep_on_time(200);
|
||
}
|
||
else if(KEY_SHORT_PRESS == key_get_state(KEY_3))
|
||
{
|
||
while(KEY_SHORT_PRESS == key_get_state(KEY_3));
|
||
// 等待按键释放
|
||
set_yaw_ref(yaw_ref + 5.0f);
|
||
beep_on_time(200);
|
||
}
|
||
else if(KEY_SHORT_PRESS == key_get_state(KEY_4))
|
||
{
|
||
while(KEY_SHORT_PRESS == key_get_state(KEY_4));
|
||
// 等待按键释放
|
||
set_yaw_ref(yaw_ref - 5.0f);
|
||
beep_on_time(200);
|
||
}
|
||
|
||
// 此处编写需要循环执行的代码
|
||
}
|
||
}
|
||
|