Здравствуйте, столкнулся с такой проблемой, что после пайки схемы программа перестала адекватно работать.
Изначально я все соединял с помощью стандартных ардуиновских штекеров и бредборда, все работало нормально, как я только спаял схему(все перепроверял, все спаяно правильно!) начался бред. У меня есть арудино 1(получает данные с датчика MPU6050 и отправляет их по HC-05), арудино 2(просто получает данные по HC-05 и выводит данные). Может быть дело как-то в самом коде? Я просто уже не знаю что подумать, все варианты перепробовал.
Наверное сейчас главный вопрос после моего бессмысленного текста выше:
Т.к. HC-05 и arduino nano подключены по RX/TX, то соответственно перед прошивкой arduino nano я должен выдергивать два этих провода, НО я пробовал загрузить код с ПК на ардуино только с одним отключенным проводом(RX на arduino nano) и программа нормально загружалась, просто слышал, что надо отключать 2 провода перед прошивкой, может ли что то перегореть/сломаться в таком случае?
Раньше, когда я открывал com-port для отображения данных шел непрерывный поток данных(числа), сейчас я открываю ком-порт получаю данные в течение 1-5сек, и данные больше не приходят, хотя светодиод на арудино2 мерцает, что говорит о приходе данных, причем когда я во время работы открываю каждый раз по новой ком-порт приходят новые данные и так же останавливаются, и когда я открываю ком-порт, на ардуино1 мерцает светодиод RX до тех пор, пока приходят данные на ардуино2
Связь:
MPU–>NANO (VCC → 3V3 ; GND → GND; SCL → A5; SDA → A4)
HC-05–>NANO (+5V → +5V; GND → GND; RX->TX1; TX->Ключ->RX0)
Общий код арудино 1:
#include "I2Cdev.h"
#include "MPU6050.h"
#include <EasyTransfer.h>
#define TO_DEG 57.2957f
#define TIME_GYRO 2000 // период опроса mpu6050 в микросекундах
MPU6050 accgyro;
// ------------------------ BLUETOOTH ----------------------------
struct SEND_DATA_STRUCTURE {
float AngleX;
float AngleY;
float MoveGX;
float MoveGY;
};
SEND_DATA_STRUCTURE data;
EasyTransfer ETin, ETout; // 2 объекта ИзиТрансфера 1 для отправки и 1 получения информации
// ----------------------------------------------------
int16_t ax_raw, ay_raw, az_raw, gx_raw, gy_raw, gz_raw; // сырые данные в кодах АЦП (3 ускорения и 3 скорости)
long int time_timer; // переменная таймера для опроса
// ------------------------ АКСЕЛЕРОМЕТР ----------------------------
float ax, ay, az; // значения ускорения в единицах гравитации g
float angle_ax, angle_ax1, angle_ay, angle_az; // углы, рассчитанные по акселерометру
// ------------------------ ГИРОСКОП ----------------------------
float gx, gy, gz; // значения угловой скорости в градусах в секунду
float angle_gx, angle_gy, angle_gz; // углы, рассчитанные по гироскопу
float gyro_x_zero, gyro_y_zero, gyro_z_zero; // калибровочные углы смещения нуля гироскопа
// ------------------------ ФИЛЬТР ----------------------------
float angle_fx, angle_fy, angle_fz; //угол после обработки комплементарным фильтром
void setup() {
Serial.begin(115000);
ETout.begin(details(data), &Serial);
accgyro.initialize();
calibrateMPU();
}
void loop() {
if( time_timer < micros() ){
time_timer = micros() + TIME_GYRO;
accgyro.getMotion6(&ax_raw, &ay_raw, &az_raw, &gx_raw, &gy_raw, &gz_raw);
getAngleAcsel(); // функция получения углов angle_ax, angle_ay, angle_az по акселерометру
getAngleGyro(); // функция получения углов angle_gx, angle_gy, angle_gz по гироскопу
getAngleFiltr(); // функция получения углов angle_fx, angle_fy, angle_fz с применением фильтра (по сути суммирует углы акселерометра и гироскопа)
////////////////////////////////////////
data.AngleX=angle_gx;
data.AngleY=angle_gy;
data.MoveGX=gx;
data.MoveGY=gy;
ETout.sendData();
}
}
Код арудино 2:
#include <EasyTransfer.h>
struct RECEIVE_DATA_STRUCTURE {
float AngleX;
float AngleY;
float MoveGX;
float MoveGY;
};
RECEIVE_DATA_STRUCTURE data;
EasyTransfer ETin,ETout;
void setup() {
Serial.begin(115000);
ETin.begin(details(data), &Serial);
Serial.flush();
Serial.println("angleGX, angleGY, MGX, MGY");
}
//Serial.println(sqrt(newGX+newGY));
void loop() {
if(ETin.receiveData()) {
float newGX = data.AngleX;
float newGY = data.AngleY;
float newMGX = data.MoveGX;
float newMGY = data.MoveGY;
Serial.print(newGX);
Serial.print(' ');
Serial.print(newGY);
Serial.print(' ');
Serial.print(newMGX);
Serial.print(' ');
Serial.println(newMGY);
}
}