Bluetooth Arduino-序列1不可用
我正在用arduino和c学习编码。我的程序通过蓝牙发送命令,用步进电机为平台做简单的移动列表。 第一步-收到信息后,准备使用格式!,…@例如!1100.3,90。@平均向前移动1 100毫秒,向左移动3 90毫秒-流的开始@-流的结束 第二步-执行移动 第三步-如果没有更多,继续循环,直到下一个信息到达Serial1,这意味着开始第一步。 它甚至可以工作,但在第一次收到字符串后,我的Serial1.available返回false/ 我不知道为什么?他忙吗?我无法接收第二串命令Bluetooth Arduino-序列1不可用,bluetooth,arduino,serial-port,Bluetooth,Arduino,Serial Port,我正在用arduino和c学习编码。我的程序通过蓝牙发送命令,用步进电机为平台做简单的移动列表。 第一步-收到信息后,准备使用格式!,…@例如!1100.3,90。@平均向前移动1 100毫秒,向左移动3 90毫秒-流的开始@-流的结束 第二步-执行移动 第三步-如果没有更多,继续循环,直到下一个信息到达Serial1,这意味着开始第一步。 它甚至可以工作,但在第一次收到字符串后,我的Serial1.available返回false/ 我不知道为什么?他忙吗?我无法接收第二串命令 #define
#define a1 4 //stepper motor connection
#define a2 3
#define b1 5
#define b2 6
int licznikRuch = 0; // counter for tabMove
int licznikCzas = 0;// counter for tabTime
int kolejka = 0;
bool CiagRuch = false;
bool CiagCzas = false; //
bool Zakonczono = false; //
int SubPoczatek, SubKoniec; // substring start / substring end
bool Wykonaj = false;
String tabMove[100];
String tabTime[100];
String inputString = "";
String StringCzas = "";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600); //
Serial2.begin(9600);
inputString.reserve(200);
for(int i = 0; i < 100; i++){
tabMove[i] = "";
tabTime[i] = "";
}
pinMode(19, OUTPUT);pinMode(17,OUTPUT);
pinMode(51,OUTPUT);
pinMode(a1, OUTPUT); pinMode(a2, OUTPUT);
pinMode(b1, OUTPUT); pinMode(b2, OUTPUT);
digitalWrite(a1,LOW); digitalWrite(a2,LOW);
digitalWrite(b1,LOW); digitalWrite(b2,LOW);
}
void loop() {
// put your main code here, to run repeatedly:
if(Zakonczono){ // operacje na wczytanym ciagu. wydobycie rozkazow i czasu
Serial.println(inputString);
for(int i = 0; i < inputString.length();i++){
if(inputString[i] == '!'){
for(int l =0;l<100;l++){
Wykonaj = false;
tabTime[l] = "";
tabMove[l] = "";
licznikCzas = 0;
licznikRuch = 0;
}
}
if(inputString[i] == '@'){
Wykonaj = true;
}
if(inputString[i] == '.'){
SubKoniec = i;
tabTime[licznikCzas++] = inputString.substring(SubPoczatek+1,SubKoniec);
CiagCzas = false;
StringCzas = "";
}
if(inputString[i] == ','){
tabMove[licznikRuch++] = inputString[i-1];
CiagCzas = true;
SubPoczatek = i;
}
}
for(int i = 0; i< licznikCzas;i++)
Serial.println(i+"Ruch"+tabMove[i]+"Czas:"+tabTime[i]);
Zakonczono = false;
inputString= "";
}
while(Wykonaj) // if you cut off whole this loop Serial1 is still available and recive commands
{
if(tabMove[kolejka] == "1") // move forward
{
digitalWrite(a1,LOW);
digitalWrite(a2,HIGH);
digitalWrite(b1,LOW);
digitalWrite(b2,HIGH);
delay(tabTime[kolejka].c_str());
Serial.print("1");
digitalWrite(a1,LOW);
digitalWrite(a2,LOW);
digitalWrite(b1,LOW);
digitalWrite(b2,LOW);
kolejka++;
// Serial.print(kolejka);
}
if(tabMove[kolejka] == "2"){ // left
digitalWrite(a1,LOW);
digitalWrite(a2,HIGH);
digitalWrite(b1,HIGH);
digitalWrite(b2,LOW);
delay(tabTime[kolejka].c_str());
Serial.print("2");
digitalWrite(a1,LOW);
digitalWrite(a2,LOW);
digitalWrite(b1,LOW);
digitalWrite(b2,LOW);
kolejka++;
}
if(tabMove[kolejka] == "3"){ // right
digitalWrite(a1,HIGH);
digitalWrite(a2,LOW);
digitalWrite(b1,LOW);
digitalWrite(b2,HIGH);
delay(tabTime[kolejka].c_str());
Serial.print("3");
digitalWrite(a1,LOW);
digitalWrite(a2,LOW);
digitalWrite(b1,LOW);
digitalWrite(b2,LOW);
kolejka++;
}
if(tabMove[kolejka] == "4"){ // back
digitalWrite(a1,HIGH);
digitalWrite(a2,LOW);
digitalWrite(b1,HIGH);
digitalWrite(b2,LOW);
delay(tabTime[kolejka].c_str());
Serial.print("3");
digitalWrite(a1,LOW);
digitalWrite(a2,LOW);
digitalWrite(b1,LOW);
digitalWrite(b2,LOW);
kolejka++;
}
if(tabMove[kolejka] == ""){
Wykonaj = false;
if(!Serial1.available())
Serial.print("Serial1 not avaliable ;("); // ???
break;
}
}
}
void serialEvent1(){
char Znak = "_";
// char PoprzedniZnak = Znak;
while(Serial1.available()){
// Serial.write(Znak);
Znak = (char)Serial1.read();
inputString+= Znak;
if(Znak == '\n')
Zakonczono = true;
kolejka = 0;
}
}
好吧,首先,让我们避开那些愚蠢的事情: 您是否已尝试将usb从pc连接/重新连接到arduino? 您是否尝试重新启动电脑并拔下usb插头? 上传代码后,您是否检查过引脚0 RX引脚是否没有连接电线?这是一个非常常见的错误,如果是这样的情况,请在上载之前从引脚0中取出导线,然后上载,并在上载完全完成后再次放入导线,在上载完成后,您将获得白色文字 确保您的pc驱动器是最新的,并且您可以在您的periferials和IDE中看到串行数据,并且连接正确 好了,现在这是解决问题的办法,有几点建议: 在帖子中写下错误号,Serial.available为false,并不意味着什么,如果Serial.available=true,然后发生了什么事情,您触发Serial.available为false的条件? 你的代码乱七八糟,无意冒犯,如果你想让别人试一试的话,一定要把它弄得更好一点! 现在谈谈你的问题: 我不知道你的意思是你的代码是坏的,还是串行口变成了ape 这里有两个解决方案 守则: 您在此处所写的内容将不起作用,因此序列号不可用: 应该是这样的:
void serialEvent1(){
String Znak = "_";
while(Serial1.available() == 0){
// Serial.write(Znak);
Znak = Serial1.readString();
inputString+= Znak;
if(Znak == '\n') //This is quite weird if a char or a String ==
//enter(button)?
Zakonczono = true;
kolejka = 0;
}
}
0,如果您希望它从串行输入开始,另外,如果这是一个选择程序,我郑重建议您不要使用while循环,除非您包含while循环中的所有选择,然后您有另一个while循环来处理其他选择
但是他说让我们来看第二个解决方案:
与硬件中相同的串行:
你必须给我写下你收到的错误号码,否则我帮不了你,检查我上面的步骤,确保你没有犯这些错误,如果你没有,请在帖子中写下你的错误号码
希望有帮助!
我并不太苛刻 我的错误,标签序列和arduino应该足够了,但我还不能使用它
void serialEvent1(){
String Znak = "_";
while(Serial1.available() == 0){
// Serial.write(Znak);
Znak = Serial1.readString();
inputString+= Znak;
if(Znak == '\n') //This is quite weird if a char or a String ==
//enter(button)?
Zakonczono = true;
kolejka = 0;
}
}