我正在将HC-05与arduino配合使用并控制电动机。 每次我从应用程序向蓝牙发送字符(例如“ R”)时,我都希望电动机运行到特定值(k)。我一次可以,但是当我再次发送“ R”时,它不起作用。 我希望每当我发送字符“ R”时,电动机都应运转。
Arduino code
#define stpwm 13
#define stdir 12
int j=0;
int k=20;
char inChar;
void setup() {
Serial.begin(9600);
pinMode(stpwm, OUTPUT);
pinMode(stdir, OUTPUT);
}
void loop() {
if (Serial.available() > 0 ) { // Checks whether data is comming from the serial port
inChar = (Serial.read()); // Reads the data from the serial port
}
if (inChar == 'R')
{
if (j<=k)
{
analogWrite(AN2, 100);
analogWrite(AN1, 50);
analogWrite(stpwm, 50);
digitalWrite(stdir, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(100);
Serial.println(j);
j++;
}
analogWrite(stpwm,0);
}
答案 0 :(得分:0)
尝试
if (inChar == 'R')
{
while (j<=k)
{
analogWrite(AN2, 100);
analogWrite(AN1, 50);
analogWrite(stpwm, 50);
digitalWrite(stdir, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(100);
Serial.println(j);
j++;
}
j=0;
analogWrite(stpwm,0);
}
答案 1 :(得分:0)
您的代码存在一个主要问题:
用于控制 if语句的变量永远不会重置,因此有一段时间(当 j> = k 时)它永远不会为真,除非您重新启动系统;
尽管Pradeep的答案很有可能奏效,但它会将您的系统锁定在一个循环中,而而j小于k 。
因此,如果您想在系统中实现将来的控制代码,则可能会成为问题。例如,如果您需要将紧急停车设置为另一个字母,则只有当您没有被困在 while循环中时,才会读取该信息。
我建议使用一个非常简单的结构: else ;如下:
#define stpwm 13
#define stdir 12
#define k 20
uint8_t j=0;
char inChar[1];
void setup() {
Serial.begin(9600);
pinMode(stpwm, OUTPUT);
pinMode(stdir, OUTPUT);
}
void loop() {
if (Serial.available() > 0 ) { // Checks whether data is comming from the serial port
inChar = (Serial.read()); // Reads the data from the serial port
}
if (inChar == 'R')
{
if (j<=k)
{
analogWrite(AN2, 100);
analogWrite(AN1, 50);
analogWrite(stpwm, 50);
digitalWrite(stdir, HIGH);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(100);
Serial.println(j);
j++;
}
}
else{
// resets both j and inChar, so that the iteration does not restart
j = 0;
inChar = "";
// turn off signal only when this criteria is met: j > k
analogWrite(stpwm, 0);
}
}
我还对您的代码做了一些小的更改:
希望这会有所帮助。