具有C#WF应用的Arduino加速度计

具有C#WF应用的Arduino加速度计,c#,arduino,mpu6050,C#,Arduino,Mpu6050,我有一个问题:Arduino将MPU-6050加速计数据保存到外部SRAM。当我询问它时,它会读回一个阵列并将其串行发送到PC。如果我不移动传感器,它完全可以与2个加速计一起工作。如果我移动传感器,我会得到一个零的lof。这里有三张照片: 使用简单的串行图测试传感器。它工作得很好。如果我测量基本恒定的重力,它就会起作用。如果我开始慢慢移动传感器,我会得到第二张图片中的结果 如果我不使用我的C#程序,只使用Arduino自己的串行监视器。我将数字读入数组中(在以下名为:buffer的代码中)。Se

我有一个问题:Arduino将MPU-6050加速计数据保存到外部SRAM。当我询问它时,它会读回一个阵列并将其串行发送到PC。如果我不移动传感器,它完全可以与2个加速计一起工作。如果我移动传感器,我会得到一个零的lof。这里有三张照片:

使用简单的串行图测试传感器。它工作得很好。如果我测量基本恒定的重力,它就会起作用。如果我开始慢慢移动传感器,我会得到第二张图片中的结果

如果我不使用我的C#程序,只使用Arduino自己的串行监视器。我将数字读入数组中(在以下名为:buffer的代码中)。Serial.println一个接一个地打印所有数字。不管我是否移动传感器,它都能工作。我不明白为什么我的c代码和绘图只有在传感器不移动的情况下才能工作?采样率是相同的,零、-2056、11562等等。。。所有数字都是16位有符号整数

有人知道吗? 谢谢。: 法佐拉

#包括//版权所有(c)2017,JustinMattair(justin@mattair.net)
#包括
#包括
//Sram设置
#定义SPI_外围SPI
#定义芯片\选择\引脚27
外部双线电缆1;
国际贸易组织;
SRAM_23LC SRAM(SPI外围设备、芯片选择引脚、SRAM_23LCV512);
常数int MPU_addr=0x68;
图1、图2;
常数int16_t prec=2048;
字节rl1,rh1,rl2,rh2;
int-led1Pin=50;
int-led2Pin=51;
int-led3Pin=52;
字符串inputString=“”;
布尔stringComplete=false;
String commandString=“”;
布尔值未连接=假;
int bite=16384;
int16_t raw2;
//字节buf2[8192];
无效设置(){
//----------------------------
pinMode(50,输出);
pinMode(51,输出);
pinMode(52,输出);
//----------------------------
Wire.begin();
有线设置时钟(100000);
导线开始传输(MPU地址);
Wire.write(0x6B);//压水堆管理1寄存器
Wire.write(0);//设置为零以唤醒MPU6050
线端传输(真);
Wire.beginTransmission(0b1101000);//MPU6050的I2C地址
Wire.write(0x1C);//加速计配置
//Wire.write(0b00000000);//将加速度设置为+/-2g
//Wire.write(0b00001000);//将加速度设置为+/-4g
//Wire.write(0b00010000);//将加速度设置为+/-8g
Wire.write(0b00011000);//将加速度设置为+/-16g
导线端传动();
//---------------------------
Wire1.begin();
有线1.设置时钟(100000);
线路1.开始传输(MPU地址);
Wire1.写入(0x6B);//PWR_管理_1寄存器
Wire1.write(0);//设置为零以唤醒MPU6050
有线1.终端传输(正确);
Wire1.beginTransmission(0b1101000);//MPU6050的I2C地址
Wire1.写入(0x1C);
//Wire1.写入(0b00000000);//设置为+-2g
Wire1.写入(0b00011000);//将加速度设置为+/-16g
线1.端传动();
SRAM.begin(20000000UL);//10Mhz el megnyitva az spi最大20MHz
序列号开始(115200);
数字写入(led3Pin,高);
}
void循环(){
如果(完成){
stringComplete=false;
getCommand();
if(commandString.equals(“START”)){
数字写入(led3Pin,低电平);
数字写入(led1Pin,高);
对于(int i=0;i>8);
rl2=Raw2&0xff;
rh2=(Raw2>>8);
SRAM.writeByte(4*i,rl1);
SRAM写字节(4*i+1,rh1);
SRAM.writeByte(4*i+2,rl2);
SRAM写入字节(4*i+3,rh2);
}
数字写入(led1Pin,低电平);
数字写入(led3Pin,高);
}
if(commandString.equals(“impo”)){
数字写入(led2Pin,高);
数字写入(led3Pin,低电平);
字节buf1[8192];
对于(int i=0;ia=Wire.read()尝试将传感器数据直接写入终端(不带SRAM)并检查问题是否仍然存在。我尝试了问题仍然存在。如果您在此处提供arduino传感器读取代码,将更容易找到原因。代码现在有问题。您使用裸机-从axel请求数据很容易出错。您检查过此库吗?arduino有许多库。它可以节省很多工作量
#include<SRAM_23LC.h> //Copyright (c) 2017, JustinMattair(justin@mattair.net)
#include<Wire.h>
#include<SPI.h>
//Sram settings
#define SPI_PERIPHERAL    SPI
#define CHIP_SELECT_PIN   27
extern TwoWire Wire1;
int16_t b;

SRAM_23LC SRAM(&SPI_PERIPHERAL, CHIP_SELECT_PIN, SRAM_23LCV512);


const int MPU_addr = 0x68;
int16_t Raw1, Raw2;
const int16_t prec = 2048;
byte rl1, rh1, rl2, rh2;
int led1Pin = 50;
int led2Pin = 51;
int led3Pin = 52;
String inputString = "";
boolean stringComplete = false;
String commandString = "";
boolean isConnected = false;
int bite = 16384;
int16_t raw2;
//byte buf2[8192];

void setup() {
  //----------------------------
 pinMode(50, OUTPUT);
 pinMode(51, OUTPUT);
 pinMode(52, OUTPUT);
 //----------------------------
 Wire.begin();
 Wire.setClock(100000);
 Wire.beginTransmission(MPU_addr);
 Wire.write(0x6B);                         //PWR_MGMT_1 register
 Wire.write(0);                            //set to zero in order to wake up MPU6050
 Wire.endTransmission(true);
 Wire.beginTransmission(0b1101000);        // I2C adress of MPU6050
 Wire.write(0x1C);                         //Accelerometer config
 //Wire.write(0b00000000);                   //Setting the accel to +/- 2g
 //Wire.write(0b00001000);                   //Setting the accel to +/- 4g
 //Wire.write(0b00010000);                   //Setting the accel to +/- 8g
 Wire.write(0b00011000);                   //Setting the accel to +/- 16g
 Wire.endTransmission();
 //---------------------------
 Wire1.begin();
 Wire1.setClock(100000);
 Wire1.beginTransmission(MPU_addr);
 Wire1.write(0x6B);                         //PWR_MGMT_1 register
 Wire1.write(0);                            //set to zero in order to wake up MPU6050
 Wire1.endTransmission(true);
 Wire1.beginTransmission(0b1101000);        // I2C adress of MPU6050
 Wire1.write(0x1C);
 //Wire1.write(0b00000000);                     // Setting to +- 2g
 Wire1.write(0b00011000);                   //Setting the accel to +/- 16g
 Wire1.endTransmission();

 SRAM.begin(20000000UL);                    // 10Mhz-el megnyitva az spi max20MHz
 Serial.begin(115200);
 digitalWrite(led3Pin, HIGH);

}

void loop() {
  if (stringComplete) {
    stringComplete = false;
getCommand();
if (commandString.equals("START")) {
  digitalWrite(led3Pin, LOW);
  digitalWrite(led1Pin, HIGH);
  for (int i = 0; i < bite / 4; i++) {
    Raw1 = olvas1();
    Raw2 = olvas2();
    //rl2 = lowByte(Raw2);         //Szetosztas 2 byte-ra
    //rh2 = highByte(Raw2);
    rl1 = Raw1 & 0xff;
    rh1 = (Raw1 >> 8);
    rl2 = Raw2 & 0xff;
    rh2 = (Raw2 >> 8);
    SRAM.writeByte(4 * i, rl1);
    SRAM.writeByte(4 * i + 1, rh1);
    SRAM.writeByte(4 * i + 2, rl2);
    SRAM.writeByte(4 * i + 3, rh2);
  }
  digitalWrite(led1Pin, LOW);
  digitalWrite(led3Pin, HIGH);
}
if (commandString.equals("IMPOR")) {
  digitalWrite(led2Pin, HIGH);
  digitalWrite(led3Pin, LOW);
  byte buf1[8192];
  for (int i = 0; i < bite / 4; i++) {
    byte lb1 = SRAM.readByte(4 * i);
    byte hb1 = SRAM.readByte(4 * i + 1);
    //raw2 = word(hb, lb);
    buf1[2 * i] = lb1;
    buf1[2 * i + 1] = hb1;
  }
  Serial.write(buf1, sizeof(buf1));
  digitalWrite(led2Pin, LOW);
  digitalWrite(led3Pin, HIGH);
}
if (commandString.equals("IMPOT")) {
  digitalWrite(led2Pin, HIGH);
  digitalWrite(led3Pin, LOW);
  byte buf2[8192];
  for (int i = 0; i < bite / 4; i++) {
    byte lb2 = SRAM.readByte(4 * i + 2);
    byte hb2 = SRAM.readByte(4 * i + 3);
    buf2[2 * i] = lb2;
    buf2[2 * i + 1] = hb2;
  }
  Serial.write(buf2, sizeof(buf2));
  digitalWrite(led2Pin, LOW);
  digitalWrite(led3Pin, HIGH);

}
inputString = "";
 }

}


int16_t olvas1() {
  int16_t a;
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3F);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr, 2, true);
  a = Wire.read() << 8 | Wire.read();
  return a;
}

int16_t olvas2() {
  Wire1.beginTransmission(MPU_addr);
  Wire1.write(0x3F);
  Wire1.endTransmission(false);
  Wire1.requestFrom(MPU_addr, 2, true);
  b = Wire1.read() << 8 | Wire1.read();
  return b;
}

void getCommand() {
  if (inputString.length() > 0) {
  commandString = inputString.substring(1, 6);
  }
}

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}