【发布时间】:2015-04-22 23:54:37
【问题描述】:
我想通过 galileo gen 2 上的蓝牙模块 (hc 05) 控制一个 LED。我需要以下程序:发送一个字符后,比如说“1”,连接到引脚 2 的 LED 亮 5 秒,然后然后它关闭并等待另一个命令。我怎么能这样做?
我试过代码: (这实际上适用于 Galileo Gen 2,但我的蓝牙工作正常,我在其他示例中检查了打开和关闭 LED)
include TimerOne.h
TTYUARTClass* gSerialOnePtr = &Serial1;
char input;
int led = 2;
long offAt = 0;
enum States // set values for enum Mode
{
on,
off
};
States currentState, nextState;
void setup()
{
Timer1.initialize(1000000); // seting interrupt time to 1 sec
Timer1.attachInterrupt(checkBluetooth); // Declaring ISR Function name
gSerialOnePtr->begin(9600); //start serial connection
pinMode(led, OUTPUT);
currentState = off;
}
void loop()
{
switch(currentState) // android app sends letters from A to I each letter turn on different Mode.
{
case on://red color
ledOn();
break;
case off://green color
ledOff();
break;
default:
ledOff();
break;
}
currentState = nextState; //saving next mode in current mode.
}
void checkBluetooth() //ISR for timer1
{
if(gSerialOnePtr->available()) // checking if data arrived from bluetooth module.
{
input = gSerialOnePtr->read(); // save character from serial in bt.
if(input == '1')
{
currentState = on;
}
else if(input == '2')
{
currentState = off;
}
}
}
void ledOn()
{
if( (digitalRead(led) == LOW ) )
{
digitalWrite(led, HIGH);
offAt = millis() + 5000; //store var of now + 5 seconds
}
if(digitalRead(led) == HIGH) //if led is on
{
if(millis() >= offAt) //see if it's time to turn off LED
{
digitalWrite(led, LOW); //it's time. this also re-enables the button
}
}
}
void ledOff()
{
digitalWrite(led, LOW);
}
它还没有工作......
【问题讨论】:
-
我编辑了问题,代码如上所示