MPU6050 vrací stále hodnotu 0
MPU6050 vrací stále hodnotu 0
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));
}
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));
}
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
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
- 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)
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
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
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);
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
Další problém je:
Já bych to řešil jinak
klidně se ptej
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
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
No, zkompilovat to šlo
jestli to funguje - toť otázka
klidně se ptej - učeš to lépe,
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;
}
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: MPU6050 vrací stále hodnotu 0
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ě):
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);
}
}
}
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
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
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
problém je že //podle mého názoru
Kód: Vybrat vše
if (radio.available()){
radio.read(&num1, sizeof(num1));
já tohle taky moc neumím, ale odesílal a přijímal bych to pomocí "struct"
hnedle to popíši
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
ve vysílači i přijímači založíš struct, tam kde deklaruješ promněnné
pak tam kde jsi ukládata vypočítané hodnoty
pak odešlaš celý balík
uff a jdeme na příjem
Kód: Vybrat vše
typedef struct { // struktura paketu pro odeslání
byte num1;
byte num2;
byte num3;
byte num4;
} dataPacket;
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)
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
v přijímači musí být úplně stejná deklarace struktury - i stejné pořadí proměnných !!!
pak přijmeš
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
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
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));
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
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
Máš rozchozený ten display ?
Že někdy fungovaly všechny digity ?
Že někdy fungovaly všechny digity ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: MPU6050 vrací stále hodnotu 0
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
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů