2017-08-11 1 views
0

Je voudrais déclencher l'acquisition de données sur mon Arduino UNO avec l'accéléromètre connecté (MPU 6050) en utilisant Python. L'idée est que lorsque la commande est donnée en Python, l'Arduino commence à enregistrer des données sur sa SRAM et lorsqu'un certain nombre de mesures seront enregistrées, les données seront renvoyées dans un paquet à Python.Déclenchement de l'acquisition de données dans Arduino avec Python

Ceci est mon code actuel Arduino:

#include<Wire.h> 
#define MPU6050_DLPF_94HZ  MPU6050_DLPF_CFG_2 

const int MPU_addr_1 = 0x68; // I2C address of the first MPU-6050 
const int baudrate = 19200; 
int16_t AcX1; // definition of variables 

const int len = 200; // Buffer size 
float analogDataArray[len]; 
int count = 0; 

void setup() { 
    Wire.begin(); 
    Wire.beginTransmission(MPU_addr_1); 
    Wire.write(0x6B); // PWR_MGMT_1 register 
    Wire.write(0);  // set to zero (wakes up the MPU-6050) 
    Wire.endTransmission(true); 
    Serial.begin(baudrate); 
} 

void loop() { 
    Wire.beginTransmission(MPU_addr_1); 
    Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) 
    Wire.endTransmission(false); 
    Wire.requestFrom(MPU_addr_1, 8, true); // request a total of 14 registers 
    float AcX1 = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) 


    if (Serial.available()) 
    { 
    if (Serial.read() == 'Y') { 
     analogDataArray[count] = AcX1; 
     count = count + 1; 
     if (count >= len) { 
     for (int i; i <= len; i = i + 1) { 
      Serial.println(analogDataArray[i]/16384); 
     } 
     } 
     count = 0; 

    } 
    } 
    delay(5); 
} 

et voici mon code Python:

import serial 
arduinoData = serial.Serial('COM3', 19200) 
com = input('Press "Y":') 
arduinoData.write(bytes(com, 'utf-8')) 

vec = [] 

run = True 
while run is True: 
    while (arduinoData.inWaiting() == 0): 
     pass 
    arduinoString = arduinoData.readline() 
    vec.append(float(arduinoString)) 
    if len(vec) >= 100: 
     run = False 
print(vec) 

J'ai réussi à le faire fonctionner pour 1 mesure, mais dès que je définissais une tableau à l'intérieur d'Arduino pour enregistrer plusieurs mesures, le code ne fonctionne pas. Je suis sûr que ça marche, mais je ne trouve pas les détails qui m'empêchent de faire ça.

Nous vous remercions de l'aide fournie. Cordialement,

L

Répondre

0

Je l'ai eu de travail, le problème était dans mon code Arduino, comme prévu.

#include<Wire.h> 
#define MPU6050_DLPF_94HZ  MPU6050_DLPF_CFG_2 

const int MPU_addr_1 = 0x68; // I2C address of the first MPU-6050 
const int baudrate = 9600; 
int16_t AcX1; // definition of variables 

const int len = 200; // Buffer size 
float analogDataArray[len]; 
int count = 0; 

int ans; 

void setup() { 
    Wire.begin(); 
    Wire.beginTransmission(MPU_addr_1); 
    Wire.write(0x6B); // PWR_MGMT_1 register 
    Wire.write(0);  // set to zero (wakes up the MPU-6050) 
    Wire.endTransmission(true); 
    Serial.begin(baudrate); 
} 

void loop() { 
    Wire.beginTransmission(MPU_addr_1); 
    Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) 
    Wire.endTransmission(false); 
    Wire.requestFrom(MPU_addr_1, 8, true); // request a total of 14 registers 
    float AcX1 = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) 


    if (Serial.available() && Serial.read() == 'Y') { 
    ans = 1; 
    } 
    if (ans == 1) { 
    analogDataArray[count] = AcX1; 
    count = count + 1; 
    if (count >= len) { 
     for (int i; i <= len; i = i + 1) { 
     Serial.println(analogDataArray[i]/16384); 
     } 
     ans = 0; 
    } 
    } 
    delay(5); 
}