SystemClock类讲解

1、System.currentTimeMillis()是一个标准的“墙”时钟(时间和日期),表示从纪元到现在的毫秒数。

   System.currentTimeMillis(),这种方式获得的时间就是按毫秒数计算的。  

   uptimeMillis()表示自系统启动时开始计数,以毫秒为单位。 


  大多数的方法接受一个时间戳的值除了uptimeMillis()时钟。


有几种机制控制事件发生的时间:

1、标准的方法像Thread.sleep(millis)     这些同步方法可能被Thread.interrupt()中断,并且你必须处理InterruptedException异常。

2、SystemClock.sleep(millis)是一个类似于Thread.sleep(millis)的实用方法,但是它忽略InterruptedException异常。

1、public static long currentThreadTimeMillis () 返在当前线程运行的毫秒数。

4、public static boolean setCurrentTimeMillis (long millis) 设置当前的"墙"时间,要求调用进程有许可权限。返回是否成功。

5、public static void sleep (long ms) 等待给定的时间。和Thread.sleep(millis)类似,但是它不会抛出InterruptedException异常。事件被推迟到下一个中断操作。该方法直到指定的时间过去才返回。

6、public static long uptimeMillis () 返回系统启动到现在的毫秒数,不包含休眠时间。就是说统计系统启动到现在的非休眠期时间。
















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,下面我以STM32为例来讲解小车循迹代码的实现。 1.定义引脚 ```C++ #define leftSensor PA0 // 左侧循迹模块引脚 #define rightSensor PA1 // 右侧循迹模块引脚 #define motor1 PB0 // 左侧电机编号 #define motor2 PB1 // 右侧电机编号 ``` 2.初始化电机 ```C++ TIM_HandleTypeDef htim3; // 定义定时器句柄 TIM_OC_InitTypeDef sConfigOC; void motorInit() { HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 启动左侧电机的PWM输出 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 启动右侧电机的PWM输出 } void setLeftMotorSpeed(int speed) { HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1); sConfigOC.Pulse = speed * 1000 / 100 - 1; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); } void setRightMotorSpeed(int speed) { HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2); sConfigOC.Pulse = speed * 1000 / 100 - 1; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); } ``` 3.定义循迹函数 ```C++ void run() { int leftValue = HAL_ADC_GetValue(&hadc1, &leftSensor); // 读取左侧循迹模块的值 int rightValue = HAL_ADC_GetValue(&hadc1, &rightSensor); // 读取右侧循迹模块的值 // 如果左侧循迹模块和右侧循迹模块都在黑线上,则向前走 if (leftValue < 500 && rightValue < 500) { setLeftMotorSpeed(50); // 左侧电机速度 setRightMotorSpeed(50); // 右侧电机速度 } // 如果左侧循迹模块在黑线上,右侧循迹模块不在黑线上,则向左转 if (leftValue < 500 && rightValue > 500) { setLeftMotorSpeed(0); // 左侧电机停止 setRightMotorSpeed(50); // 右侧电机速度 } // 如果左侧循迹模块不在黑线上,右侧循迹模块在黑线上,则向右转 if (leftValue > 500 && rightValue < 500) { setLeftMotorSpeed(50); // 左侧电机速度 setRightMotorSpeed(0); // 右侧电机停止 } // 如果左侧循迹模块和右侧循迹模块都不在黑线上,则向后走 if (leftValue > 500 && rightValue > 500) { setLeftMotorSpeed(-50); // 左侧电机速度 setRightMotorSpeed(-50);// 右侧电机速度 } } ``` 4.在 `main()` 函数中调用循迹函数和电机初始化函数 ```C++ int main(void) { HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟 MX_TIM3_Init(); // 初始化定时器 MX_ADC1_Init(); // 初始化ADC模块 motorInit(); // 初始化电机 while (1) { run(); // 调用循迹函数 } } ``` 总体来说,STM32的小车循迹代码实现和Arduino似,也是通过读取循迹模块的反馈信息,根据不同的反馈信息控制电机的转速和方向,从而实现小车的循迹运动。但是具体的实现细节会因为硬件平台的不同而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值