“乐高遥控小车”的版本间的差异
(→准备) |
(→程序说明) |
||
第32行: | 第32行: | ||
==程序说明== | ==程序说明== | ||
+ | |||
+ | <source lang=cpp> | ||
+ | #include <mCookieLEGO.h> | ||
+ | #include <Microduino_Protocol_HardSer.h> | ||
+ | #include "Wire.h" | ||
+ | |||
+ | |||
+ | uint16_t Data[8]; | ||
+ | int speedLeft = 0; | ||
+ | int speedRight = 0; | ||
+ | Protocol ProtocolB(&Serial1, TYPE_NUM); | ||
+ | mCookieLEGO m; | ||
+ | |||
+ | void setup(){ | ||
+ | Wire.begin(); | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | ProtocolB.begin(9600); //9600/19200/38400 | ||
+ | m.configSensorType(mCookieLEGO::S1, mCookieLEGO::SENSOR_ULTRA); | ||
+ | m.configConnection(0xFFFF); | ||
+ | } | ||
+ | uint8_t dis; | ||
+ | |||
+ | void loop(){ | ||
+ | int sta = ProtocolB.parse(Data, MODE_WHILE); | ||
+ | if (sta != P_NONE) { | ||
+ | switch (sta) { | ||
+ | case P_FINE: | ||
+ | speedLeft = map(Data[1], 1000, 2000, -255, 255); | ||
+ | speedRight = speedLeft; | ||
+ | int speedTurn = map(Data[4], 1000, 2000, -255, 255); | ||
+ | if(speedTurn < 0){ | ||
+ | speedLeft += speedTurn; | ||
+ | } | ||
+ | else{ | ||
+ | speedRight -= speedTurn; | ||
+ | } | ||
+ | break; | ||
+ | // default: | ||
+ | // break; | ||
+ | } | ||
+ | } | ||
+ | refreshSpeed(); | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | void refreshSpeed{ | ||
+ | m.motor_setFixedDrive(mCookieLEGO::M3, speedLeft); | ||
+ | m.motor_setFixedDrive(mCookieLEGO::M4, speedRight); | ||
+ | } | ||
+ | |||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
“ble()”函数是蓝牙接收数据及控制彩灯。 | “ble()”函数是蓝牙接收数据及控制彩灯。 | ||
*定义蓝牙通讯串口 | *定义蓝牙通讯串口 | ||
第68行: | 第123行: | ||
} | } | ||
</source> | </source> | ||
+ | |||
==调试代码== | ==调试代码== | ||
*通过CoreUSB模块连接电脑并加载程序后,点击串口监视器,会弹出一个窗口,里面会显示光线传感器接收到的光线值的变化。 | *通过CoreUSB模块连接电脑并加载程序后,点击串口监视器,会弹出一个窗口,里面会显示光线传感器接收到的光线值的变化。 |
2016年4月24日 (日) 04:26的版本
Language | English |
---|
目的通过mCookieLEGOShield,使mCookie可以控制NXT接口的电机和传感器。 原理通过手机端的mTank软件发送指令,叠加在mCookie的蓝牙模块接收并解析指令 通过IIC通讯,mCookie控制LEGOShield,完成对NXT接口电机和传感器的控制 设备
准备
程序说明#include <mCookieLEGO.h>
#include <Microduino_Protocol_HardSer.h>
#include "Wire.h"
uint16_t Data[8];
int speedLeft = 0;
int speedRight = 0;
Protocol ProtocolB(&Serial1, TYPE_NUM);
mCookieLEGO m;
void setup(){
Wire.begin();
Serial.begin(9600);
ProtocolB.begin(9600); //9600/19200/38400
m.configSensorType(mCookieLEGO::S1, mCookieLEGO::SENSOR_ULTRA);
m.configConnection(0xFFFF);
}
uint8_t dis;
void loop(){
int sta = ProtocolB.parse(Data, MODE_WHILE);
if (sta != P_NONE) {
switch (sta) {
case P_FINE:
speedLeft = map(Data[1], 1000, 2000, -255, 255);
speedRight = speedLeft;
int speedTurn = map(Data[4], 1000, 2000, -255, 255);
if(speedTurn < 0){
speedLeft += speedTurn;
}
else{
speedRight -= speedTurn;
}
break;
// default:
// break;
}
}
refreshSpeed();
delay(10);
}
void refreshSpeed{
m.motor_setFixedDrive(mCookieLEGO::M3, speedLeft);
m.motor_setFixedDrive(mCookieLEGO::M4, speedRight);
}
#define my_Serial Serial1
#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 2
#define lightSensorPin A0
#define lightSwitch 700
sensorValue = analogRead(lightSensorPin);
if(sensorValue>lightSwitch) {
Serial.println(sensorValue);
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.setPixelColor(1, strip.Color(0, 0, 0));
strip.show();
} else {
ble();
if (!color_en) {
for (int i = 0; i < 1; i++)
rainbow(10);
}
}
调试代码
当前设定的感光值是700,你可以尝试根据之前监测出来的数据在程序中更改这一数值,重新刷入程序,看看会产生什么效果。 搭建硬件
LED灯的连接方法如图,请注意连接顺序,从LED的IN接口接入,从OUT接口接出本应用最多可控制2个LED灯。
APP调试
结果遮住光线传感器,或进入较暗环境下,LED灯就会发光,这时你就可以用蓝牙来控制灯光的颜色。你也可以通过乐高搭建一个漂亮的外观。 视频 |