收藏官网首页
查看: 16155|回复: 4

[问答] GoKit Arduino简化版

跳转到指定楼层
楼主
发表于 2015-12-23 00:29:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
盖个楼,第一贴:把板载马达封装成一个类,方便操作。

类定义:
  1. /******** (C) COPYRIGHT 2015 Gizwits *********
  2. * @file              : Motor.h
  3. * @author            : William Yip
  4. * @date              : 6 Dec 2015
  5. * @version           : 1.0
  6. * @brief             : 连接、增值、开放、中立、安全、自有、自由、生态
  7. ************************
  8. * History:
  9. ************************
  10. THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
  11. CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
  12. RESULT, GIZWITS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  13. CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
  14. SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  15. CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. ************************/

  17. #ifndef _MOTOR_H_
  18. #define _MOTOR_H_

  19. // Motor
  20. #define   PIN_D4_MOTOR_ANODE       4
  21. #define   PIN_D5_MOTOR_CATHODE     5
  22. #define   MOTOR_MAX_SPEED          255
  23. #define   MOTOR_MIN_SPEED          (-255)

  24. class Motor
  25. {
  26.         public:
  27.                 Motor();
  28.                 ~Motor();
  29.                 void Rotate(int speed);
  30. };

  31. #endif // _MOTOR_H_
复制代码

类实现:

  1. /****** (C) COPYRIGHT 2015 Gizwits ******
  2. * @file              : Motor.cpp
  3. * @author            : William Yip
  4. * @date              : 6 Dec 2015
  5. * @version           : 1.0
  6. * @brief             : 连接、增值、开放、中立、安全、自有、自由、生态
  7. ****************
  8. * History:
  9. ****************
  10. THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
  11. CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
  12. RESULT, GIZWITS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  13. CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
  14. SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  15. CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. ****************/

  17. #include <arduino.h>
  18. #include "motor.h"

  19. /**
  20.         @desc gokit板载马达的简单控制类,主要作PWM控制演示用,占用D4/D5两只GPIO引脚。
  21. */
  22. Motor::Motor()
  23. {
  24.         // 初始化引脚工作模式
  25.         pinMode(PIN_D4_MOTOR_ANODE, OUTPUT);
  26.         pinMode(PIN_D5_MOTOR_CATHODE, OUTPUT);
  27.         // 初始化引脚电平
  28.         analogWrite(PIN_D4_MOTOR_ANODE, LOW);
  29.         analogWrite(PIN_D5_MOTOR_CATHODE, LOW);
  30. }

  31. Motor::~Motor()
  32. {
  33.         // 复位引脚电压
  34.         analogWrite(PIN_D4_MOTOR_ANODE, LOW);
  35.         analogWrite(PIN_D5_MOTOR_CATHODE, LOW);
  36. }

  37. /**
  38.         @desc 使板载马达按指定速度转动
  39.         @param speed 只在-255 ~ 255间有效,正转最大速度 255,反转最大速度 -255。如果输入值超过范围,会自动修正到范围边界值。
  40. */
  41. void Motor::Rotate(int speed)
  42. {
  43.   // 输入修正,限制在-255 ~ 255之间
  44.   speed = (speed < MOTOR_MIN_SPEED) ? MOTOR_MIN_SPEED
  45.         : (speed > MOTOR_MAX_SPEED) ? MOTOR_MAX_SPEED
  46.         : speed;
  47.   // 把正反向速度,分为正负极各自的PWM值
  48.   int pwmAnode = (speed > 0) ? speed : 0;
  49.   int pwmCathode = (speed < 0) ? speed : 0;
  50.   // 执行到输出脚
  51.   analogWrite(PIN_D4_MOTOR_ANODE, pwmAnode);
  52.   analogWrite(PIN_D5_MOTOR_CATHODE, pwmCathode);
  53. }
复制代码

调用例子:

  1. #include "Motor.h"

  2. static Motor * motor = NULL;
  3. static uint32_t ts = 0;

  4. void loop() {
  5.   // put your main code here, to run repeatedly:
  6.   // 马达调用的示例代码:每500毫秒随机换一个转速
  7.   if (NULL == motor)
  8.     motor = new Motor;
  9.   if (millis() - ts < 500)
  10.     return;
  11.   ts = millis();
  12.   motor->Rotate(random(-255, 255));
  13. }
复制代码





1

主题

17

帖子

196

积分

注册会员

Rank: 2

积分
196
沙发
发表于 2016-1-7 16:49:32 | 只看该作者
点赞点赞点赞
板凳
 楼主| 发表于 2016-1-13 13:44:30 | 只看该作者
第二贴,红外光电反射传感(ST188)
类定义:


  1. /** (C) COPYRIGHT 2015 Gizwits **
  2. * @file              : IRSensor.h
  3. * @author            : William Yip
  4. * @date              : 6 Dec 2015
  5. * @version           : 1.0
  6. * @brief             : 连接、增值、开放、中立、安全、自有、自由、生态
  7. ****
  8. * History:
  9. ****
  10. THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
  11. CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
  12. RESULT, GIZWITS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  13. CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
  14. SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  15. CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. ****/

  17. #ifndef _IR_SENSOR_H_
  18. #define _IR_SENSOR_H_

  19. // IRSensor
  20. #define   PIN_D2_IR_SENSOR       2

  21. class IRSensor
  22. {
  23.         public:
  24.                 IRSensor();
  25.                 ~IRSensor();
  26.         private:
  27.                 static void onChanged();
  28. };

  29. #endif // _IR_SENSOR_H_
复制代码

类实现:


  1. /** (C) COPYRIGHT 2015 Gizwits **
  2. * @file              : IRSensor.cpp
  3. * @author            : William Yip
  4. * @date              : 6 Dec 2015
  5. * @version           : 1.0
  6. * @brief             : 连接、增值、开放、中立、安全、自有、自由、生态
  7. ***
  8. * History:
  9. ***
  10. THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
  11. CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
  12. RESULT, GIZWITS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  13. CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
  14. SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  15. CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. ***/

  17. #include <Arduino.h>
  18. #include "IRSensor.h"
  19. #include "GoKit.h"

  20. /*
  21.         @desc GoKit板载红外动作探测器的简单控制类,主要作中断处理、引脚监听上报演示用,占用D2一只GPIO引脚。
  22. */
  23. IRSensor::IRSensor()
  24. {
  25.         // 初始化监听引脚变化的中断处理函数
  26.         attachInterrupt(digitalPinToInterrupt(PIN_D2_IR_SENSOR), IRSensor::onChanged, CHANGE);
  27. }

  28. IRSensor::~IRSensor()
  29. {
  30.         // 复位引脚
  31.         detachInterrupt(digitalPinToInterrupt(PIN_D2_IR_SENSOR));
  32. }

  33. /* @desc 中断处理函数,会在PIN2_IR引脚电平改变时被触发,开发者可以自由增加自定义的处理逻辑代码 */
  34. void IRSensor::onChanged()
  35. {
  36.         // TODO: you can do more when IR is triggered.
  37.         GoKit::onIrChanged();
  38. }
复制代码


调用例子:


  1. #include "IRSensor.h"

  2. static IRSensor * irSensor = NULL;

  3. void GoKit::onIrChanged()
  4. {
  5.   // TODO: process ir sensor changed value here
  6. }

  7. void setup()
  8. {
  9.   pGoKit->irSensor = new IRSensor;
  10. }
复制代码


2

主题

4

帖子

32

积分

新手上路

Rank: 1

积分
32
地板
发表于 2016-4-30 00:56:18 | 只看该作者
申请是stm32底板,为什么换成自用的arduino uon r3就.不行?已经烧录好程序。

5

主题

18

帖子

77

积分

注册会员

Rank: 2

积分
77
5#
发表于 2016-5-11 12:34:52 | 只看该作者
汉枫LPB120模块
好文,不错,精简了不少
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表