สวัสดีครับพี่ รบกวนสอบถามหน่อยครับ
ผมต้องการส่งข้อมูลของ gyro ไปยังอาดูโน่อีกตัวนึง โดยผ่าน nrf24l01
เเต่เมื่อผมให้อาดูโน่อ่านค่า gyro อย่างเดียวสามารถอ่านเเละตอบสนองได้เร็ว เเล้วเมื่อนำโค๊ดของ nrf24l01 มาใส่ ปรากฏว่า gyro ตอบสนอง ช้าลงเเละอ่านช้าลงมากมันเกิดจากอะไรหรอครับ
ขอบคุณครับ
นี่คือ code ของผมครับ
#include <Wire.h>
#include <MPU6050.h>
#include <SPI.h>
#include <nRF24L01p.h>
nRF24L01p transmitter(7, 8); //CSN,CE
MPU6050 mpu;
// Timers
unsigned long timer = 0;
float timeStep = 0.1;
float new_roll = 0;
// Pitch, Roll and Yaw values
float pitch = 0;
float roll = 0;
float yaw = 0;
void setup()
{
Serial.begin(115200);// Initialize MPU6050
SPI.begin();
SPI.setBitOrder(MSBFIRST);
transmitter.channel(90); // ตั้งช่องความถี่ให้ตรงกัน
transmitter.TXaddress("ALL"); // ตั้งชื่อตำแหน่งให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
transmitter.init();
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}
mpu.calibrateGyro();
mpu.setThreshold(3);
timer = millis();
// Read normalized values
Vector norm = mpu.readNormalizeGyro();
roll = roll + norm.XAxis * timeStep;
new_roll=roll ;
}
String message;
int x;
void loop()
{
timer = millis(); // Read normalized values
Vector norm = mpu.readNormalizeGyro(); // Calculate Pitch, Roll and Yaw
roll = roll + norm.XAxis * timeStep;// Output raw
Serial.print(" Roll = ");
Serial.println(new_roll-roll); // Wait to full timeStep period
delay((timeStep*1000) - (millis() - timer));
delay(10);
if (new_roll-roll>30&&new_roll-roll<40)
{
Serial.println("1");
transmitter.txPL("1"); // ค่าที่ต้องการส่ง
transmitter.send(FAST); // สั่งให้ส่งออก
}
}
gyro และ nrf24L01 ส่งค่าได้เร็วอยู่แล้ว สามารถทดลองแยกแต่ละส่วนเพื่อทดสอบผลลัพธ์ได้ครับ
สาเหตุที่ช้า เป็นที่โคดตรงคำสั่ง delay จะทำให้ทุกส่วนหยุดทำงาน จนกว่าจะ delay สำเร็จ
เช็คตรง delay นี้ครับ