MPU6050 vrací stále hodnotu 0

Hana
Příspěvky: 19
Registrován: 26 říj 2020, 19:45
Reputation: 0

Re: MPU6050 vrací stále hodnotu 0

Příspěvek od Hana » 30 říj 2020, 22:51

Zkusila jsem to, ale svítí jen poslední nula na displeji a zbytek poblikává.
Teď zkusím, co vypíše monitor.

Ano, zkoušela jsem na displeji zobrazit 0123 a fungovalo to

Hana
Příspěvky: 19
Registrován: 26 říj 2020, 19:45
Reputation: 0

Re: MPU6050 vrací stále hodnotu 0

Příspěvek od Hana » 30 říj 2020, 23:00

Je mi jedno, zda přenesu digity nebo celé číslo, pokud by to bylo jednodušší, tak to ráda zkusím.

Displej jsem dělala podle videa: https://www.youtube.com/watch?v=ty7f71FQ5io&t=151s

Sériový monitor mi vypisuje nuly, ale možná jsem to špatně zapsala

vysílač:

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;

int data[4];


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

}

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);
  data[0] = (angley / 10) % 10;
  data[1] = (angley / 100) % 10;
  data[2] = (angley / 1000) % 10;
  data[3] = (angley / 10000) % 10;

  delay(5);

  radio.stopListening();
  radio.write(&data, sizeof(data));


}
přijímač:

Kód: Vybrat vše

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


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

typedef struct {
  byte num1;
  byte num2;
  byte num3;
  byte num4;
}
dataPacket;

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);
dataPacket packet;
  radio.startListening();
  if (radio.available()){
  radio.read(&packet, sizeof(dataPacket));
      delay(100*sizeof(dataPacket));
      Serial.println (packet.num1);
      Serial.println (packet.num2);
      Serial.println (packet.num3);
      Serial.println (packet.num4);
    if (packet.num1 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (packet.num1 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (packet.num1 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num1 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }

     if (packet.num2 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (packet.num2 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (packet.num2 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num2 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000010);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  
  
     if (packet.num3 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (packet.num3 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (packet.num3 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num3 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00000100);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
 
     if (packet.num4 == 0) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
    else if (packet.num4 == 1) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b01111001);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
     else if (packet.num4 == 2) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10100100);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 3) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10110000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 4) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10011011);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 5) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 6) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000010);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 7) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b11111000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 8) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
       else if (packet.num4 == 9) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b00001000);
      shiftOut(dataPin, clockPin, MSBFIRST, 0b10010000);
      digitalWrite(latchPin, HIGH);
      delay(1);
      }
  }
}

Uživatelský avatar
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

Příspěvek od pavel1tu » 30 říj 2020, 23:02

oprav si rozklad naměřené hodnoty na
při hodnotě 5842

Kód: Vybrat vše

packet.num1 = (angley/1)%10;
packet.num2 = (angley/10)%10;
packet.num3 = (angley/100)%10;
packet.num4 = (angley/1000)%10;
odesílám
22:59:37.676 -> 2
22:59:37.676 -> 4
22:59:37.676 -> 8
22:59:37.676 -> 5


funguje mi to i s přenosem
přijímám čísla
22:59:47.694 -> 2
22:59:47.694 -> 4
22:59:47.694 -> 8
22:59:47.694 -> 5


ten display je divnej, nepřepínáš tam digity mezi sebou
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Hana
Příspěvky: 19
Registrován: 26 říj 2020, 19:45
Reputation: 0

Re: MPU6050 vrací stále hodnotu 0

Příspěvek od Hana » 30 říj 2020, 23:14

A jak mám ta čísla zobrazit?

Uživatelský avatar
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

Příspěvek od pavel1tu » 31 říj 2020, 07:36

Hana píše:
30 říj 2020, 23:14
A jak mám ta čísla zobrazit?
vůbec jsi neopravila projekt jak jsem psal - nejprve vyčítáš, pak vše nuluješ, pak z těch nul počítáš a do podmínky zprůměrování to nikdy neskočí - pak jsou všude nuly
mám to asi 5 příspěvků zpět, tohle by mělo počítat, ale je to bez toho struct ještě

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;

}



(klidně místo vypočítávané hodnoty dej třeba "1234" nějaký pomocný integer,
pak by ti na příjmu mělo vypadnout po jednotlivých byte 4-3-2-1

pak můžeme pokračovat, ale dnes to bude pomalejší z mé strany, mám jinou práci
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
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

Příspěvek od pavel1tu » 31 říj 2020, 08:14

Pokud do kodu přijímače natvrddo napíšeš do kodu

Kód: Vybrat vše

  if (radio.available()){
  radio.read(&packet, sizeof(dataPacket));
      delay(100*sizeof(dataPacket));
      Serial.println (packet.num1);
      Serial.println (packet.num2);
      Serial.println (packet.num3);
      Serial.println (packet.num4);
      
      packet.num1 = 4;
      packet.num2 = 3;
      packet.num3 = 2;
      packet.num4 = 1;
      
zobrazí to ta čísla ?

PS: už jsem našel kde posouváš mezi digity, máme tu na kroužku jen jeden ten IO, tak to nejde otestovat
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Hana
Příspěvky: 19
Registrován: 26 říj 2020, 19:45
Reputation: 0

Re: MPU6050 vrací stále hodnotu 0

Příspěvek od Hana » 31 říj 2020, 10:59

Zkusila jsem data z jednoho Arduina přenést do druhého ve formě jednoho čísla a to se mi na monitoru druhého Arduina zobrazí v pořádku. Ale teď je problém, že se jedná o desetinná čísla (přenáším je pomocí float) a nevím , jak to mám rozdělit na ty digity.

vysílač:

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;

float angley;


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(angley);

delay(5);

radio.stopListening();
radio.write(&angley, sizeof(angley));
delay(5*sizeof(angley));

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

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

}
přijímač:

Kód: Vybrat vše

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


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

float angley;

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(115200);
  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(&angley, sizeof(angley));
  delay(100*sizeof(angley));
      Serial.println(angley);

/*
num1 = (angley/1)%10;
num2 = (angley/10)%10;
num3 = (angley/100)%10;
num4 = (angley/1000)%10;
  
    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 (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 (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 (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);
      }
    */ 
  }
  
}

Uživatelský avatar
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

Příspěvek od pavel1tu » 31 říj 2020, 11:15

No, říká se tomu "přetypování" ? kdyžtak mne chytřejší opraví
U čísel to neřeším ukazately, peostě tak jako jsi to měla ty

Kód: Vybrat vše

//máš float
float angley;

// uděláme unsigned int
unsigned int angley_ui;

angley_ui = angley; // a máme z toho celé číslo ? snad 

Serial.println(angle_ui);   // pokud to vypíše celé číslo máme vyhráno
num1 = (angle_ui/1)%10;
num2 = (angle_ui/10)%10;
num3 = (angle_ui/100)%10;
num4 = (angle_ui/1000)%10;

// dál zpracovat na display

jo deklarovat ty byte num1; atd.



nejsem si moc jistý
- vařím, peču a u toho se snažím zkompilobat nový armbian
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
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

Příspěvek od pavel1tu » 31 říj 2020, 11:29

oprava
to jakoby přetypování takto

Kód: Vybrat vše

unsigned int angley_ui = angley;
mi to funguje ;)
11:30:43.962 -> 1234.57
11:30:43.962 -> 1234
11:30:43.962 -> 4
11:30:43.962 -> 3
11:30:43.962 -> 2
11:30:43.962 -> 1
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Hana
Příspěvky: 19
Registrován: 26 říj 2020, 19:45
Reputation: 0

Re: MPU6050 vrací stále hodnotu 0

Příspěvek od Hana » 31 říj 2020, 13:30

Zkusila jsem, ale vracelo mi to stále nuly.

Ještě mě napadlo, že bych to vynásobila 100, ale nevím, jak napsat kód, aby když je číslo menší než 100 tam před ním byly nuly nebo pokud by bylo menší než tisíc, tak aby tam byla před tím jedna nula.

Zkusila jsem tohle, ale to mi vracelo:
6
5
6
atd.

Kód: Vybrat vše

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


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

float angley;

char s [10];
long angle;

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(115200);
  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(&angley, sizeof(angley));
  delay(100*sizeof(angley));
  
  angle = sprintf (s, "%d", angley);
  Serial.println (angle);

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů