Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bluetooth Arduino-序列1不可用_Bluetooth_Arduino_Serial Port - Fatal编程技术网

Bluetooth Arduino-序列1不可用

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

我正在用arduino和c学习编码。我的程序通过蓝牙发送命令,用步进电机为平台做简单的移动列表。 第一步-收到信息后,准备使用格式!,…@例如!1100.3,90。@平均向前移动1 100毫秒,向左移动3 90毫秒-流的开始@-流的结束 第二步-执行移动 第三步-如果没有更多,继续循环,直到下一个信息到达Serial1,这意味着开始第一步。 它甚至可以工作,但在第一次收到字符串后,我的Serial1.available返回false/ 我不知道为什么?他忙吗?我无法接收第二串命令

#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;
    }

  }