“MCookie-LEGOShield/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
开发
文档
 
(未显示2个用户的6个中间版本)
第22行: 第22行:
 
*主控:MCookie-LEGOShield采用Atmega328p主控,独立运行驱动程序。
 
*主控:MCookie-LEGOShield采用Atmega328p主控,独立运行驱动程序。
 
*通讯:IIC通讯,地址0x08(可自定义)
 
*通讯:IIC通讯,地址0x08(可自定义)
 +
*接口:4个NXT电机接口,6个NXT传感器接口(其中只有S1、S2支持超声波传感器和颜色传感器)
 
{|class="wikitable"
 
{|class="wikitable"
 
! rowspan="1" |mCookie引脚||shield芯片引脚||功能
 
! rowspan="1" |mCookie引脚||shield芯片引脚||功能
 
|-
 
|-
| A4||A4|| IIC接口SDA引脚
+
| SDA||SDA|| IIC接口SDA引脚
 
|-
 
|-
| A5||A5|| IIC接口SCL引脚
+
| SCL||SCL|| IIC接口SCL引脚
 
|-
 
|-
 
| D0|| D1||mCookie的Serial1 RX(可选悍,默认不连接)
 
| D0|| D1||mCookie的Serial1 RX(可选悍,默认不连接)
第42行: 第43行:
 
**如果使用shield供电,由于shield固件初始化需要一定时间,所以在mCookie写控制程序的时候需要上点延迟一会再运行(delay一段时间)
 
**如果使用shield供电,由于shield固件初始化需要一定时间,所以在mCookie写控制程序的时候需要上点延迟一会再运行(delay一段时间)
  
[[File:motor-Pinout-1Big.jpg|800px|thumb|center]]
+
[[File:mCookie-LEGOShield-TOP.jpg|800px|thumb|center]]
 
+
[[File:mCookie-LEGOShield-BUT.jpg|800px|thumb|center]]
==文档==
 
mcps17
 
A3906
 
Atmega328p
 
  
 
==开发==
 
==开发==
第54行: 第51行:
 
*针对各个传感器和电机已经做了常用的驱动封装,不需要关注底层的API
 
*针对各个传感器和电机已经做了常用的驱动封装,不需要关注底层的API
 
*直接调用库里的方法就可以操作,具体的协议在shield自己的主控里已经实现
 
*直接调用库里的方法就可以操作,具体的协议在shield自己的主控里已经实现
 +
*在开始使用各种传感器和电机直前,要先设置传感器的类型和每个接口的连接与否
 +
*只有S1和S2支持超声波和颜色传感器
 
===使用乐高NXT接口按键===
 
===使用乐高NXT接口按键===
 +
常用方法:
 +
====判断是否按下====
 +
====判断是否释放====
 
<source lang="cpp">
 
<source lang="cpp">
//D6,D8控制1A,1B的电机
+
 
#define OUT1A 6
 
#define OUT1B 8
 
//D5,D7控制2A,2B的电机
 
#define OUT2A 5
 
#define OUT2B 7
 
 
</source>
 
</source>
  
第67行: 第64行:
 
常用方法:
 
常用方法:
 
====设置固定的速度====
 
====设置固定的速度====
 +
速度范围:-255~255
 +
<source lang="cpp">
 +
#include <mCookieLEGO.h>
 +
#include "Wire.h"
  
 +
mCookieLEGO m;
 +
void setup(){
 +
Wire.begin();
 +
m.configConnection(0xFFFF); //设置每个接口的连接情况
 +
}
 +
 +
void loop(){
 +
m.motor_setFixedDrive(mCookieLEGO::M1, 50);
 +
delay(1); // very important
 +
m.motor_setFixedDrive(mCookieLEGO::M2, 50);
 +
delay(1); // very important
 +
m.motor_setFixedDrive(mCookieLEGO::M3, 50);
 +
delay(1); // very important
 +
m.motor_setFixedDrive(mCookieLEGO::M4, 50);
 +
delay(2000);
 +
}
 +
</source>
 
===使用乐高NXT接口超声波===
 
===使用乐高NXT接口超声波===
 
常用方法:
 
常用方法:
 
====获取当前的距离====
 
====获取当前的距离====
 
<source lang="cpp">
 
<source lang="cpp">
#define OUT1A 6
+
#include <mCookieLEGO.h>
#define OUT1B 8
+
#include "Wire.h"
#define OUT2A 5
 
#define OUT2B 7
 
  
void setup()
+
mCookieLEGO m;
{
+
void setup(){
  pinMode(OUT1A, OUTPUT);
+
    Wire.begin();
  pinMode(OUT1B, OUTPUT);
 
  pinMode(OUT2A, OUTPUT);
 
  pinMode(OUT2B, OUTPUT);
 
}
 
  
void loop()
+
    m.configSensorType(mCookieLEGO::S1, mCookieLEGO::SENSOR_ULTRA); // 把S1设置为超声波传感器
{
+
    m.configConnection(0xFFFF);
head();
 
delay(2000);
 
back();
 
delay(1000);
 
stop();
 
delay(500);
 
 
}
 
}
  
void head()
+
uint8_t dis;
{
 
  digitalWrite(OUT1A, HIGH);
 
  digitalWrite(OUT1B, LOW);
 
  digitalWrite(OUT2A, HIGH);
 
  digitalWrite(OUT2B, LOW);
 
}
 
void back()
 
{
 
  digitalWrite(OUT1A, LOW);
 
  digitalWrite(OUT1B, HIGH);
 
  digitalWrite(OUT2A, LOW);
 
  digitalWrite(OUT2B, HIGH);
 
}
 
void stop()
 
{
 
  digitalWrite(OUT1A, LOW);
 
  digitalWrite(OUT1B, LOW);
 
  digitalWrite(OUT2A, LOW);
 
  digitalWrite(OUT2B, LOW);
 
}
 
</source>
 
 
 
===PWM调速控制===
 
<source lang="cpp">
 
//D6,D8控制1A,1B的电机
 
#define OUT1A 6
 
#define OUT1B 8
 
//D5,D7控制2A,2B的电机
 
#define OUT2A 5
 
#define OUT2B 7
 
 
 
void setup()
 
{
 
  pinMode(OUT1A, OUTPUT);
 
  pinMode(OUT1B, OUTPUT);
 
  pinMode(OUT2A, OUTPUT);
 
  pinMode(OUT2B, OUTPUT);
 
}
 
  
void loop()
+
void loop(){
{
+
dis = m.sensor_ultra_getDistance(mCookieLEGO::S1);
  for (int fadeValue = 0; fadeValue <= 255; fadeValue += 5)
+
Serial.print("dis: ");
    //循环语句,控制PWM速度增加,控制fadeValue的变化大小可以控制亮度级别
+
Serial.println(dis);
  {
+
delay(1000);
    analogWrite(OUT1A, fadeValue);  //将速度级别写入电机
 
    digitalWrite(OUT1B, LOW);
 
    analogWrite(OUT2A, fadeValue);
 
    digitalWrite(OUT2B, LOW);
 
    delay(100);                      //速度度级别维持的时间,单位毫秒
 
  }
 
  for (int fadeValue = 255; fadeValue >= 0; fadeValue -= 5)
 
    //循环语句,控制PWM速度减小,控制fadeValue的变化大小可以控制亮度级别
 
  {
 
    digitalWrite(OUT1A, LOW);
 
    analogWrite(OUT1B, fadeValue); //将速度级别写入电机
 
    digitalWrite(OUT2A, LOW);
 
    analogWrite(OUT2B, fadeValue);
 
    delay(100);                    //速度度级别级别维持的时间,单位毫秒
 
  }
 
  delay(1000);
 
 
}
 
}
 
</source>
 
</source>
第162行: 第114行:
 
[[乐高遥控小车]]
 
[[乐高遥控小车]]
  
==购买==
 
暂不开放购买
 
  
==历史==
 
  
 
==图库==
 
==图库==
[[File:mCookie-Motor-t1.jpg|thumb|600px|center]]
+
[[File:mCookie-LEGOShield-pic1.jpg|800px|thumb|center]]
[[File:mCookie-Motor-b1.jpg|thumb|600px|center]]
 
  
==视频==
 
  
 
|}
 
|}

2017年4月21日 (五) 06:11的最新版本

Language English
mCookie-LEGOShield


mCookie-LEGOShield(下文中简称shield)是一款乐高兼容底板,在兼容乐高NXT接口传感器和电机的同时,能够继续堆叠mCookie模块,让乐高更加智能。



特色

  • 4路电机接口,兼容乐高NXT电机;
  • 4路普通传感器接口,兼容NXT接口的按键、声音传感器等;
  • 2路全功能传感器接口,除了能兼容普通传感器接口的所有传感器之外,兼容NXT接口的超声波传感器和颜色传感器;
  • IIC接口通讯,不占用其他多余IO口

规格

  • 供电:使用2S航模锂电池供电,7.4V。
  • 主控:MCookie-LEGOShield采用Atmega328p主控,独立运行驱动程序。
  • 通讯:IIC通讯,地址0x08(可自定义)
  • 接口:4个NXT电机接口,6个NXT传感器接口(其中只有S1、S2支持超声波传感器和颜色传感器)
mCookie引脚 shield芯片引脚 功能
SDA SDA IIC接口SDA引脚
SCL SCL IIC接口SCL引脚
D0 D1 mCookie的Serial1 RX(可选悍,默认不连接)
D1 D0 mCookie的Serial1 TX (可选悍,默认不连接)
5V 5V 可以用shield给mCookie供电
GND GND 共地
  • 注意:
    • shield的IIC从机地址位可调节,需要重新烧写固件。
    • 如果使用shield供电,由于shield固件初始化需要一定时间,所以在mCookie写控制程序的时候需要上点延迟一会再运行(delay一段时间)
MCookie-LEGOShield-TOP.jpg
MCookie-LEGOShield-BUT.jpg

开发

shield采用IIC接口通讯,IIC地址默认为0x08,就像其他芯片一样读写寄存器地址。 API接口说明.pdf

  • 针对各个传感器和电机已经做了常用的驱动封装,不需要关注底层的API
  • 直接调用库里的方法就可以操作,具体的协议在shield自己的主控里已经实现
  • 在开始使用各种传感器和电机直前,要先设置传感器的类型和每个接口的连接与否
  • 只有S1和S2支持超声波和颜色传感器

使用乐高NXT接口按键

常用方法:

判断是否按下

判断是否释放


使用乐高NXT接口电机

常用方法:

设置固定的速度

速度范围:-255~255

#include <mCookieLEGO.h>
#include "Wire.h"

mCookieLEGO m;
void setup(){
	Wire.begin();
	m.configConnection(0xFFFF); //设置每个接口的连接情况
}

void loop(){
	m.motor_setFixedDrive(mCookieLEGO::M1, 50);
	delay(1); // very important
 	m.motor_setFixedDrive(mCookieLEGO::M2, 50);
 	delay(1); // very important
 	m.motor_setFixedDrive(mCookieLEGO::M3, 50);
 	delay(1); // very important
	m.motor_setFixedDrive(mCookieLEGO::M4, 50);
	delay(2000);
}

使用乐高NXT接口超声波

常用方法:

获取当前的距离

#include <mCookieLEGO.h>
#include "Wire.h"

mCookieLEGO m;
void setup(){
    Wire.begin();

    m.configSensorType(mCookieLEGO::S1, mCookieLEGO::SENSOR_ULTRA); // 把S1设置为超声波传感器
    m.configConnection(0xFFFF);
}

uint8_t dis;

void loop(){
	dis = m.sensor_ultra_getDistance(mCookieLEGO::S1);
	Serial.print("dis: ");
	Serial.println(dis);
	delay(1000);
}

应用

乐高遥控小车


图库

MCookie-LEGOShield-pic1.jpg