Stránka 1 z 4

MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 19:09
od Hana
Chtěla bych data získaná akcelerometrem MPU6050 přeposlat pomocí NRF24L01 na druhé arduino a zobrazit je na 4-místný sedmisegmentový displej. Když nahraju na Arduino kód týkající se pouze MPU6050, akcelerometr měří normálně, ale jakmile do kódu přidám i NRF24L01, vrací mi sériový monitor stále 0. NRF komunikace funguje nejspíše v pořádku, protože na displeji se zobrazují 4 nuly.

Zde je kód pouze pro MPU6050:

#include "Wire.h"
#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"

// vytvoříme objekt s názvem
MPU6050 accelerometer;

// zadáme konstantu Ludofova čísla
// pro pozdější výpočty
const float pi = 3.141592;
//zde zadejte z kolika vzorku bude
// měření probíhat
const int pocet_vzorku = 100;
// pojmenovýní proměných
int16_t ax, ay, az;
float x, y, z;
int pocet;
float _angle_x, angle_x, _angle_y, angle_y;
long ax_p, ay_p, az_p;

void setup() {
// inicializace I2C
Wire.begin();
// zvolíme vyšší rychlost pro seriový port
Serial.begin(38400);
// inicializace akcelerometru
accelerometer.initialize();
// Když to hodí chybu vypíšeme hlášku
if (accelerometer.testConnection());
Serial.println("Spojeni OK...");
}

void loop() {
// zjistí všechny hodnoty z akcelerometru
accelerometer.getAcceleration(&ax, &ay, &az);
// sčítáme potřebný počet hodnot
ax_p = ax_p + ax;
ay_p = ay_p + ay;
az_p = az_p + az;
// pomocné určení počru vzorků
pocet++;
// když se dosáhne určeného počtu vzorků
if (pocet == pocet_vzorku)
{
//zjistíme průmerné hodnoty
x = ax_p/pocet_vzorku;
y = ay_p/pocet_vzorku;
z = az_p/pocet_vzorku;
// vypočteme sklon a náklon
angle_y = atan2(y, sqrt(square(x) + square(z)) )/(pi/180);
// vynulujeme hodnoty pro další použití
delay(2000);
pocet = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;
// vypíšeme výsledky na seriový port
Serial.println(angle_y);
}

}

Zde pro MPU i NRF:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


#include "Wire.h"
#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"



RF24 radio(7,8); //NRF
const byte addresses[][6] = {"00001", "00002"};

MPU6050 accelerometer; //MPU
const float pi = 3.141592;
const int pocet_vzorku = 100;
int16_t ax, ay, az;
float x, y, z;
int pocet;
float _angle_x, angle_x, _angle_y, angle_y;
long ax_p, ay_p, az_p;

int angley;

byte num1;
byte num2;
byte num3;
byte num4;


void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(addresses[0]); //00001
radio.openReadingPipe(1, addresses[1]); //00002
radio.setPALevel(RF24_PA_LOW);

Wire.begin();
Serial.begin(38400);
accelerometer.initialize();
if (accelerometer.testConnection());
Serial.println("Spojeni OK...");

}

void loop() {


accelerometer.getAcceleration(&ax, &ay, &az);
ax_p = ax_p + ax;
ay_p = ay_p + ay;
az_p = az_p + az;
pocet++;
if (pocet == pocet_vzorku){
x = ax_p/pocet_vzorku;
y = ay_p/pocet_vzorku;
z = az_p/pocet_vzorku;
}
// vypočteme sklon a náklon
angle_y = atan2(y, sqrt(square(x) + square(z)) )/(pi/180);
angley = angle_y;

// vynulujeme hodnoty pro další použití

pocet = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;
Serial.println(angle_y);
num1 = (angley/10)%10;
num2 = (angley/100)%10;
num3 = (angley/1000)%10;
num4 = (angley/10000)%10;

delay(5);

radio.stopListening();
radio.write(&num1, sizeof(num1));
radio.write(&num2, sizeof(num2));
radio.write(&num3, sizeof(num3));
radio.write(&num4, sizeof(num4));

}

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 20:04
od pavel1tu
Kod se vkládá tlačítkem </>
No, nemám akcelerometr, tak alespoń co jsem viděl na první pokled
musím si to zkopírovat a v klidu prohlédnout

jako první zkus toto
Zásadní je - 2x deklaruješ Serial, stačí jednou a dal bych klidně 115200

Kód: Vybrat vše

Serial.begin(9600);
Serial.begin(38400);
- možná by bylo lepší vyčítat vzorky ve smyčce for - vyzkoušej v samostatném programu - je to čistší, ale asi to nemá vliv na funkci ani programu ani živočicháře (ftip z filmu)

Kód: Vybrat vše

for ( int pocet = 1; pocet <= pocet_vzorku; pocet++) {
    // tady vycitat ty vzorky
    
  }
  
  // tady počítáš průměr a pokračovat
  

pak tam dělíš "long" / "int" - nejsem si jist, ale někdy mi to blblo, třeba mne ostatní opraví, pokud to zde funguje a vrací správné čísla - jako bych nic neřekl

Kód: Vybrat vše

//zjistíme průmerné hodnoty
x = ax_p/pocet_vzorku;
y = ay_p/pocet_vzorku;
z = az_p/pocet_vzorku;


více mne zatím nenapadá

PS: knihovny - napiš odkud jsou, jestli instalované přímo z IDE nebo jsi je někde stahovala - vůbec ten axcelerometr

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 20:29
od pavel1tu
Další problém je:

Kód: Vybrat vše

loop()

tady vyčteš poprvé z gyroskopu a uložíš
pak přičteš do počtu měření +1

     pak je podmínka jestli už jsi změřila 100x, pokud ano vypočteš x,y,z 

tady nuluješ proměnné pocet = 0; ax_p = 0; ay_p = 0; az_p = 0; takže vlastně nic nepčišítáš tan výše
pak počítáš úhel, ale neproběhla podmínka výše a stejně je vše vynulováno, takže výpočet nemůže proběhnou

pak odesíláš data
Já bych to řešil jinak

Kód: Vybrat vše

deklarace atd.
setup ()

loop()

tady bych dal smyčku for a Xkrát vyčetl akcelerometr

pak vypočítal průměr a úhel

odeslal

vynuloval co je potřeba


klidně se ptej

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 20:40
od pavel1tu
No, zkompilovat to šlo
jestli to funguje - toť otázka

klidně se ptej - učeš to lépe,

Kód: Vybrat vše

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "Wire.h"
#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"


RF24 radio(7,8); //NRF
const byte addresses[][6] = {"00001", "00002"};

MPU6050 accelerometer; //MPU
const float pi = 3.141592;
const int pocet_vzorku = 100;
int16_t ax, ay, az;
float x, y, z;
// int pocet;
float _angle_x, angle_x, _angle_y, angle_y;
long ax_p, ay_p, az_p;

int angley;

byte num1;
byte num2;
byte num3;
byte num4;


void setup() {
Serial.begin(115200);
radio.begin();
radio.openWritingPipe(addresses[0]); //00001
radio.openReadingPipe(1, addresses[1]); //00002
radio.setPALevel(RF24_PA_LOW);

Wire.begin();
// Serial.begin(38400);
accelerometer.initialize();
if (accelerometer.testConnection());
Serial.println("Spojeni OK...");

}

void loop() {

for ( int pocet = 1; pocet <= pocet_vzorku; pocet++) { // snad probehne 100x mam v tom nekdy hockej
    // tady vycitat ty vzorky
    accelerometer.getAcceleration(&ax, &ay, &az);
    ax_p = ax_p + ax;
    ay_p = ay_p + ay;
    az_p = az_p + az;
     }

// vypocet prumeru
x = ax_p/pocet_vzorku;
y = ay_p/pocet_vzorku;
z = az_p/pocet_vzorku;

// vypočteme sklon a náklon
angle_y = atan2(y, sqrt(square(x) + square(z)) )/(pi/180);
angley = angle_y;

Serial.println(angle_y);
num1 = (angley/10)%10;
num2 = (angley/100)%10;
num3 = (angley/1000)%10;
num4 = (angley/10000)%10;

delay(5);

radio.stopListening();
radio.write(&num1, sizeof(num1));
radio.write(&num2, sizeof(num2));
radio.write(&num3, sizeof(num3));
radio.write(&num4, sizeof(num4));

// vynulujeme hodnoty pro další použití

//pocet = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;

}

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 21:18
od Hana
Děkuji, už mi to ukazuje různé hodnoty, ale zase mám problém s přenosem informací přes NRF. Na displeji mi pouze svítí vždy jedna nula. Měla bych použít něco jiného než funkci byte pro ten přenos?

Zde je kód k displeji (doufám, že tentokrát to sem dám správně):

Kód: Vybrat vše

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


RF24 radio(7,8);
const byte addresses[][6] = {"00001", "00002"};

byte num1;
byte num2;
byte num3;
byte num4;

int latchPin = 9; //pin 12 on the 595
int dataPin = 6; //pin 14 on the 595
int clockPin = 10; //pin 11 on the 595

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(addresses[1]);
  radio.openReadingPipe(1, addresses[0]);
  radio.setPALevel(RF24_PA_LOW);



  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}


void loop () {
  


  delay(5);

  radio.startListening();
  if (radio.available()){
  radio.read(&num1, sizeof(num1));
    if (num1 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (num1 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (num1 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num1 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  } 

  if (radio.available()){
    radio.read(&num2, sizeof(num2));
     if (num2 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (num2 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (num2 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num2 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  }

  if (radio.available()){
    radio.read(&num3, sizeof(num3));
     if (num3 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (num3 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (num3 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num3 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  }
  
  if (radio.available()){
    radio.read(&num4, sizeof(num4));
     if (num4 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (num4 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (num4 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (num4 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  }
}

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 21:36
od pavel1tu
byte nevadí, prostě se z výpočtu uloží jen "celé" číslo 0-255 - více ta proměnná neumí

problém je že //podle mého názoru

Kód: Vybrat vše

if (radio.available()){
  radio.read(&num1, sizeof(num1));
přijme vše ale uloží jen poslední nebo první číslo

já tohle taky moc neumím, ale odesílal a přijímal bych to pomocí "struct"

hnedle to popíši

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 21:46
od pavel1tu
ve vysílači i přijímači založíš struct, tam kde deklaruješ promněnné

Kód: Vybrat vše

typedef struct {         // struktura paketu pro odeslání
  byte num1;
  byte num2;
  byte num3;
  byte num4;
} dataPacket;
pak tam kde jsi ukládata vypočítané hodnoty

Kód: Vybrat vše

num1 = (angley/10)%10;
num2 = (angley/100)%10;
num3 = (angley/1000)%10;
num4 = (angley/10000)%10;

změníš na 

dataPacket packet;
packet.num1 = (angley/10)%10;
packet.num2 = (angley/100)%10;
packet.num3 = (angley/1000)%10;
packet.num4 = (angley/10000)%10;

tím to uložíš do jednoho balíku, tam můžeš níchat klidně cokoliv, 
jen musíš mít navlas stejnou deklaraci ve vysílači i přijímači
a musí to být stejné zařízení - Arduina (mezi Arduinem a STM32 to nemusí vždy fungovat)
pak odešlaš celý balík

Kód: Vybrat vše

    radio.stopListening();
    radio.write(&packet, sizeof(dataPacket));
    delay(5*sizeof(dataPacket)); //toto tam kdyžtak nemusí být, dělá to delay podle množství odesílaných dat
uff a jdeme na příjem

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 21:57
od pavel1tu
v přijímači musí být úplně stejná deklarace struktury - i stejné pořadí proměnných !!!

pak přijmeš

Kód: Vybrat vše

    dataPacket packet;
    
    radio.startListening();  //pokud jen přijímáš, melo by to být jen v setupu - asi nevím určitě ale pokud funguje nech to tu

  if (radio.available()) {
    radio.read(&packet, sizeof(dataPacket));
    delay(100*sizeof(dataPacket));
tím se přijak celý balík dat pěkně srovnaný přesně jako ve vysílači
pak to máš uložené v packet.num1 packet.num2 packet.num3 packet.num4
a upravíš podmínky pro jednotlivé zobrazení - pokud to někdy zobrazovalo více čísel - nevím přesně o jaký display jde

Kód: Vybrat vše

if (packet.num1 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
      
      a tak dále
jen nechápu proč přenášíš 4 hodnoty, doufám že to nejsou jednotlivé digity, v popisku to není tak si nejsem jistý
stačilo by přenést celé číslo a rozložit ho na digity až v přijímači, ale takto je to zajímavější ;)

aaa j eto tak - přehlédl jsem to na začátku, ale třeba to bude fungovat

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 22:06
od pavel1tu
Máš rozchozený ten display ?
Že někdy fungovaly všechny digity ?

Re: MPU6050 vrací stále hodnotu 0

Napsal: 30 říj 2020, 22:21
od pavel1tu
Nepřepínáš digity (asi už tu jsem sám, že ?)
posíláš data jen na 1 digit

na tom přijímači si vypiš do serialu všechny 4 přijímané hodnoty co ti chodí

napiš sem podle čeho (odkaz na netu) jsi dělala ten display