具有C#WF应用的Arduino加速度计
我有一个问题:Arduino将MPU-6050加速计数据保存到外部SRAM。当我询问它时,它会读回一个阵列并将其串行发送到PC。如果我不移动传感器,它完全可以与2个加速计一起工作。如果我移动传感器,我会得到一个零的lof。这里有三张照片: 使用简单的串行图测试传感器。它工作得很好。如果我测量基本恒定的重力,它就会起作用。如果我开始慢慢移动传感器,我会得到第二张图片中的结果 如果我不使用我的C#程序,只使用Arduino自己的串行监视器。我将数字读入数组中(在以下名为:buffer的代码中)。Serial.println一个接一个地打印所有数字。不管我是否移动传感器,它都能工作。我不明白为什么我的c代码和绘图只有在传感器不移动的情况下才能工作?采样率是相同的,零、-2056、11562等等。。。所有数字都是16位有符号整数 有人知道吗? 谢谢。: 法佐拉具有C#WF应用的Arduino加速度计,c#,arduino,mpu6050,C#,Arduino,Mpu6050,我有一个问题:Arduino将MPU-6050加速计数据保存到外部SRAM。当我询问它时,它会读回一个阵列并将其串行发送到PC。如果我不移动传感器,它完全可以与2个加速计一起工作。如果我移动传感器,我会得到一个零的lof。这里有三张照片: 使用简单的串行图测试传感器。它工作得很好。如果我测量基本恒定的重力,它就会起作用。如果我开始慢慢移动传感器,我会得到第二张图片中的结果 如果我不使用我的C#程序,只使用Arduino自己的串行监视器。我将数字读入数组中(在以下名为:buffer的代码中)。Se
#包括//版权所有(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;i a=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;
}
}
}