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
使用串行/fopen(第72行)MATLAB时出错_Matlab_Arduino_Arduino Uno_I2c - Fatal编程技术网

使用串行/fopen(第72行)MATLAB时出错

使用串行/fopen(第72行)MATLAB时出错,matlab,arduino,arduino-uno,i2c,Matlab,Arduino,Arduino Uno,I2c,我正在使用压力传感器D6F-PH测量压差。这是我编写的Arduino代码,用于从传感器获取值 #include "Wire.h" #define addrs 0x6C // I2C bus address int P; int I; float T;c int initialize(int i2c_addr) { //INITIALIZATION AFTER POWER UP Wire.beginTransmission(i2c_addr); Wi

我正在使用压力传感器D6F-PH测量压差。这是我编写的Arduino代码,用于从传感器获取值

 #include "Wire.h"
    #define addrs 0x6C // I2C bus address
    int P;
    int I;
    float T;c

int initialize(int i2c_addr)
{
  //INITIALIZATION AFTER POWER UP
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x0B);
  Wire.write(0x00);
  int x = Wire.endTransmission();
  return x;
}

int pressure(int i2c_addr)
{
  //MCU MODE
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x00);
  Wire.write(0xD0);  // reg 0 - address register high byte
  //  Wire.write(0x51);  // reg 1 - address register low byte
  Wire.write(0x40);  // reg 1 - address register low byte
  Wire.write(0x18);  // reg 2  - serial control register - indicate # bytes among others (page 7 bottom)
  Wire.write(0x06);  // reg 3 - value to be written to SENS control register
  int x = Wire.endTransmission();

  delay(33);

  //WRITE
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x00);
  Wire.write(0xD0);
  Wire.write(0x51);
  Wire.write(0x2C);
  x = Wire.endTransmission();

  //READ
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x07);
  x = Wire.endTransmission();

  Wire.requestFrom(i2c_addr, 2);
  byte hibyte = Wire.read();
  byte lobyte = Wire.read();
  long raw = word( hibyte, lobyte);
  //Serial.print("raw pressure:\t ");
  Serial.println(raw);

  // D6F-PH5050AD3 ==> rangeMode=500 ==> int rd_pressure =  ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode
  // D6F-PH0505AD3 ==> rangeMode=50  ==> int rd_pressure =  ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode
  // D6F-PH0025AD1 ==> rangeMode=250 ==> int rd_pressure=(raw - 1024) * rangeMode / 60000L
  //int rangeMode = 50;
  int rangeMode = 250;
  int rd_pressure = (raw - 1024) * rangeMode / 60000L;
  //int rd_pressure =  ((raw - 1024) * rangeMode * 10/60000L) - rangeMode;
  return rd_pressure;
}

float temperature(int i2c_addr)
{
  //MCU MODE
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x00);
  Wire.write(0xD0);  // reg 0 - address register high byte
  // Wire.write(0x51);  // reg 1 - address register low byte
  Wire.write(0x40);  // reg 1 - address register low byte
  Wire.write(0x18);  // reg 2  - serial control register - indicate # bytes among others (page 7 bottom)
  Wire.write(0x06);  // reg 3 - value to be written to SENS control register
  int x = Wire.endTransmission();

  delay(33);

  //WRITE
  Wire.beginTransmission(i2c_addr);
  Wire.write(0x00);
      Wire.write(0xD0);
      Wire.write(0x61);
      Wire.write(0x2C);
      x = Wire.endTransmission();

      //READ
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x07);
      x = Wire.endTransmission();

      Wire.requestFrom(i2c_addr, 2);
      byte hibyte = Wire.read();
      byte lobyte = Wire.read();
      long raw = word( hibyte, lobyte);
      //Serial.print("raw temperature:\t ");
      //Serial.println(raw);
      int temp = round((float)(raw - 10214) / 3.739);  // this is the temperature multiplied by 10...
      return (temp / 10.0);           // ...and the function returs the float 
    temperature with 0.1°C resolution
    }

    void setup()
    { // Open serial communications
      Wire.begin();
      Serial.begin(9600);
      I = initialize (addrs); // start wire connection

    }

    void loop()
    {
      P = pressure(addrs);
      Serial.print("pressure:\t ");
      Serial.println(P);
      T = temperature(addrs);
      Serial.print("temperature:\t ");
      Serial.println(T);
      delay(300); //delay for 30 seconds

    }
我可以使用串行监视器从arduino uno板测量压力和温度

当我尝试使用MATLAB检索数据时,我无法这样做

s=serial('COM6','BaudRate',9600);
fopen(s);
这是我在尝试打开端口时收到的错误消息:使用串行/fopen时出错(第72行) 打开失败:无法连接到COM2端口。可能的原因还有另一个 应用程序已连接到端口或端口不存在。

我已经检查了COM端口号并使用了delete(instrfindall);命令无效。
请帮助解决问题。在与MATLAB建立连接之前,我需要关闭串行监视器。

已解决。在创建与MATLAB的连接之前,我需要关闭串行监视器