“触碰传感器”的版本间的差异
853387039@qq.com(讨论 | 贡献) (→实验四:短按、长按功能) |
(→实验五:控制彩灯) |
||
(未显示2个用户的12个中间版本) | |||
第36行: | 第36行: | ||
|- | |- | ||
|[[Microduino-Crash/zh]]||1||碰撞开关 | |[[Microduino-Crash/zh]]||1||碰撞开关 | ||
+ | |- | ||
+ | |[[Microduino-Color led/zh]]||1||彩灯 | ||
|} | |} | ||
+ | |||
+ | *其他硬件设备 | ||
+ | **USB数据连接线*1 | ||
+ | **传感器接线*2 | ||
[[File:Crash-module.jpg|center|600px]] | [[File:Crash-module.jpg|center|600px]] | ||
− | |||
− | |||
− | |||
===准备=== | ===准备=== | ||
*Setup 1:将Crash背面接口和Hub的数字口(D6)接起来,这个就是控制碰撞开关的引脚,用户可自己更改。 | *Setup 1:将Crash背面接口和Hub的数字口(D6)接起来,这个就是控制碰撞开关的引脚,用户可自己更改。 | ||
[[file:mCookie-Crash-sensor.JPG|600px|center]] | [[file:mCookie-Crash-sensor.JPG|600px|center]] | ||
− | *Setup | + | *Setup 2:将CoreUSB,Hub,Crash连接在一起。通过USB数据线将接入电脑。 |
− | [[file:mCookie- | + | [[file:mCookie-Crash-pc.JPG|600px|center]] |
==调试== | ==调试== | ||
第75行: | 第78行: | ||
} | } | ||
</source> | </source> | ||
− | * | + | *选择正确的板卡和COM端口 |
− | [[file:upload.JPG| | + | [[file:upload.JPG|600px|center]] |
− | * | + | *编译通过后直接下载。 |
− | [[file: | + | [[file:upload-crash.JPG|600px|center]] |
− | * | + | *打开串口监视器。可以看到不按时“buttonState”的值为1,按下的值为0; |
− | [[file:Crash-one-res.JPG| | + | [[file:Crash-one-res.JPG|600px|center]] |
'''*采用“digitalRead(XX)”函数来读取按键信号,该信号为数字信号,只有“0”和“1”两种状态。''' | '''*采用“digitalRead(XX)”函数来读取按键信号,该信号为数字信号,只有“0”和“1”两种状态。''' | ||
第118行: | 第121行: | ||
*“!=”表示不等于,当按下值有变化时候才执行。 | *“!=”表示不等于,当按下值有变化时候才执行。 | ||
*结果:打开串口监视器,按下按键时串口打印“Control”,松开时串口打印“Loosen”。 | *结果:打开串口监视器,按下按键时串口打印“Control”,松开时串口打印“Loosen”。 | ||
− | [[file:Crash-two-res.JPG| | + | [[file:Crash-two-res.JPG|600px|center]] |
===实验三:按下状态翻转=== | ===实验三:按下状态翻转=== | ||
第152行: | 第155行: | ||
*“= !”表示等于非,一个布尔量它的值只有“真”和“假”,这样每运行一次“str”值翻转一次。 | *“= !”表示等于非,一个布尔量它的值只有“真”和“假”,这样每运行一次“str”值翻转一次。 | ||
*按一次“str”值为真(1),再按一次“str”值为假(0),反复循环。 | *按一次“str”值为真(1),再按一次“str”值为假(0),反复循环。 | ||
− | [[file:Crash-three-res.JPG| | + | [[file:Crash-three-res.JPG|600px|center]] |
===实验四:短按、长按功能=== | ===实验四:短按、长按功能=== | ||
第200行: | 第203行: | ||
*当按键按下时,检测按键是否松开,如果在一定时间内没松开则认为长按,否则短按。 | *当按键按下时,检测按键是否松开,如果在一定时间内没松开则认为长按,否则短按。 | ||
*短按是串口打印“short”;长按时串口打印“long”。 | *短按是串口打印“short”;长按时串口打印“long”。 | ||
+ | [[file:Crash-long-short-res.JPG|600px|center]] | ||
===实验五:控制彩灯=== | ===实验五:控制彩灯=== | ||
*打开Arduino IDE,将下列代码复制到IDE中。 | *打开Arduino IDE,将下列代码复制到IDE中。 | ||
<source lang="cpp"> | <source lang="cpp"> | ||
− | #define | + | #define PIN A0 |
#define PIN_key 6 | #define PIN_key 6 | ||
+ | #define NUMPIXELS 2 //级联彩灯数量 | ||
boolean status=false; | boolean status=false; | ||
− | #include < | + | #include <Microduino_ColorLED.h> //引用彩灯库 |
− | + | ColorLED strip = ColorLED(NUMPIXELS, PIN); //将ColorLED类命名为strip,并定义彩灯数量和彩灯引脚号 | |
void setup() | void setup() | ||
{ | { | ||
pinMode(PIN_key, INPUT); | pinMode(PIN_key, INPUT); | ||
− | pinMode( | + | pinMode(PIN, OUTPUT); |
− | strip.begin(); //初始化LED | + | strip.begin(); //初始化LED |
+ | strip.setBrightness(60); //设置彩灯亮度 | ||
strip.show(); // Initialize all pixels to 'off' | strip.show(); // Initialize all pixels to 'off' | ||
} | } | ||
第235行: | 第241行: | ||
if(status) | if(status) | ||
{ | { | ||
− | colorWipe(strip.Color(0, 0, 0), 10); //关灯 | + | colorWipe(strip.Color(0, 0, 0), 10); //关灯 |
} | } | ||
else | else | ||
{ | { | ||
− | + | colorWipe(strip.Color(255, 0, 0), 10); //红色 | |
− | } | + | } |
// Fill the dots one after the other with a color | // Fill the dots one after the other with a color | ||
+ | } | ||
void colorWipe(uint32_t c, uint8_t wait) | void colorWipe(uint32_t c, uint8_t wait) | ||
{ | { |
2017年8月3日 (四) 06:36的最新版本
目录概述用来检测是否发生碰撞,因此也可称为碰撞信号传感器。由于碰撞位置不同,分成左碰撞传感器和右碰撞传感器。
规格
开发设备
准备
调试实验一:检测按键
#define pushButton 6
int buttonState;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
buttonState = digitalRead(pushButton);//读取碰触开关输入的值
// print out the state of the button:
Serial.print("buttonState:");
Serial.println(buttonState); //串口打印碰触开关的值
delay(100); //延时100ms
}
*采用“digitalRead(XX)”函数来读取按键信号,该信号为数字信号,只有“0”和“1”两种状态。 实验二:按下、松开
#define pushButton 6 //定义按键控制引脚
int buttonState, num;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
buttonState = digitalRead(pushButton);//读取碰触开关输入的值
// print out the state of the button:
//按下或松开串口打印碰触开关的值
if (num != buttonState)
{
num = buttonState;
if (num == 1)
Serial.println("Loosen");//松开
else
Serial.println("Control");//按下
delay(100); //延时100ms
}
}
实验三:按下状态翻转
#define pushButton 6
int buttonState;
boolean str;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);//串口通讯波特率
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
buttonState = digitalRead(pushButton);//读取碰触开关输入的值
if (!buttonState)
{
delay(300);
str = !str;
Serial.print("str:");
Serial.println(str);
}
}
实验四:短按、长按功能
#define pushButton 6
int buttonState, num;
unsigned long button_time_cache = 0;
unsigned long button_time = 0;
boolean button_sta = false;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
void loop() {
// read the input pin:
buttonState = digitalRead(pushButton);//读取碰触开关输入的值
if (buttonState == 0)
{
delay(100);
if (digitalRead(pushButton) == 1 && !button_sta)//按键松开并且没进入长按,则认为是短按
{
Serial.println("short");
}
else if (millis() - button_time_cache > 1500) //时间大于1.5S则认为长按
{
button_sta = true;
button_time_cache = millis();
Serial.println("long");
}
}
else if (buttonState == 1)
{
button_time_cache = millis();
button_sta = false;
}
}
实验五:控制彩灯
#define PIN A0
#define PIN_key 6
#define NUMPIXELS 2 //级联彩灯数量
boolean status=false;
#include <Microduino_ColorLED.h> //引用彩灯库
ColorLED strip = ColorLED(NUMPIXELS, PIN); //将ColorLED类命名为strip,并定义彩灯数量和彩灯引脚号
void setup()
{
pinMode(PIN_key, INPUT);
pinMode(PIN, OUTPUT);
strip.begin(); //初始化LED
strip.setBrightness(60); //设置彩灯亮度
strip.show(); // Initialize all pixels to 'off'
}
// the loop function runs over and over again forever
void loop()
{
if(!digitalRead(PIN_key))
{
delay(100);
if(!digitalRead(PIN_key))
{
status=!status;
}
}
if(status)
{
colorWipe(strip.Color(0, 0, 0), 10); //关灯
}
else
{
colorWipe(strip.Color(255, 0, 0), 10); //红色
}
// Fill the dots one after the other with a color
}
void colorWipe(uint32_t c, uint8_t wait)
{
for(uint16_t i=0; i<strip.numPixels(); i++)
{
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
视频 |