0
このスケッチでは、ArduinoはAndroidアプリに接続し、Bluetooth接続を介してデータを受信します。これは意図したとおりに動作しますが、Bluetoothが接続されておらず、スケッチがシリアルデータを受信していない場合、スケッチはwhileループで停止しています。ブルートゥースが接続されていてシリアルデータを受信していればうまく動作しますが、ボタンの状態を読むことができるようにスケッチをwhileループで中断させる方法はわかりません。私はボタンの状態を読むためにwhileループを壊すためにスケッチが必要です。誰にもアイデアはありますか? L178: R215: L-125: R-115: - 記号や、その後255に番号-255が続いていないマイナス記号 続いLまたはRのいずれかが常にあるデータは、これらの例のように見える受信しました常にによって:whileループを読み込みボタン
char myChar = 'a';
String string;
char LorR;
int M2INA = 8; //left
int M2INB = 7;
int M2PWM = 9;
int M1INA = 11; //right
int M1INB = 12;
int M1PWM = 10;
int ledB = A2;
int ledR = A3;
int button = 2;
int buttonState;
int val;
int mode = 0;
void setup() {
pinMode(M1INA, OUTPUT);
pinMode(M1INB, OUTPUT);
pinMode(M2INA, OUTPUT);
pinMode(M2INB, OUTPUT);
pinMode(M1PWM, OUTPUT);
pinMode(M2PWM, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(ledR, OUTPUT);
Serial.begin(57600); //230400 460800 921600
buttonState = digitalRead(button); // read the initial state
}
void loop() {
val = digitalRead(button); // read input value and store it in val
if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
if (mode == 0) { // light is off
mode = 1; // light is on!
} else {
mode = 0; // light is on!
}
}
}
buttonState = val; // save the new state in our variable
if (mode == 0) {
btMode();
}
if (mode == 1) {
followMode();
}
}
void followMode() {
digitalWrite (ledR, HIGH);
digitalWrite (ledB, LOW);
}
void btMode() {
digitalWrite (ledR, LOW);
digitalWrite (ledB, HIGH);
string = "";
//Add to string
while (true) {
myChar = Serial.read();
if (32 <= myChar && myChar <= 127) {
string += myChar;
}
if (myChar == ':'){
break;
}// While End
}
//Analyse string
if (string != "off:" && string != "on:") {
if (string != "L0:" && string != "R0:") {
//code for setting motor left or right
if (string[0] == 'L') {
LorR = 'L';
} else {
LorR = 'R';
}
string.remove(0, 1);
//code for putting it in reverse
if (string[0] == '-') {
string.remove(0, 1);
string.remove((string.length() - 1), 1);
//Serial.println(string);
if (LorR == 'L') {
//digitalWrite(M2EN, HIGH);
digitalWrite (M2INA, LOW);
digitalWrite (M2INB, HIGH);
analogWrite(M2PWM, string.toInt());
} else { //Reverse left
//digitalWrite(M1EN, HIGH);
digitalWrite (M1INA, LOW);
digitalWrite (M1INB, HIGH);
analogWrite(M1PWM, string.toInt());
}
} else {
string.remove((string.length() - 1), 1);
if (LorR == 'L') {
//digitalWrite(M2EN, HIGH);
digitalWrite (M2INA, HIGH);
digitalWrite (M2INB, LOW);
analogWrite(M2PWM, string.toInt());
} else {
digitalWrite (M1INA, HIGH);
digitalWrite (M1INB, LOW);
analogWrite(M1PWM, string.toInt());
}
}
} else {
allStop();
}
}//End of long if statment
if (string == "on:") {
}
if (string == "off:") {
}
}
void allStop() { //coast
analogWrite(M1PWM, 0);
analogWrite(M2PWM, 0);
digitalWrite(M1INA, HIGH);
digitalWrite(M2INA, HIGH);
digitalWrite(M1INB, HIGH);
digitalWrite(M2INB, HIGH);
}
'if'ステートメントの多用性、特に' else'と 'else if'について読んでください。あなたのスケッチについては、私はArduinoのためにプログラムされたことはありませんが、私はループ内のBluetooth接続の状態を確認することをお勧めします。 – Sam