Stránka 4 z 4

Re: MPU6050 vrací stále hodnotu 0

Napsal: 31 říj 2020, 20:55
od pavel1tu
Do deklarací nahoru nad setup()

Kód: Vybrat vše

unsigned int angley_ui;
někam za to místo kde přijímáš angley

Kód: Vybrat vše

angley_ui = angley *100;

num1 = (angley_ui/1)%10;      
num2 = (angley_ui/10)%10;      
num3 = (angley_ui/100)%10;      
num4 = (angley_ui/1000)%10;       
Já nepracuji na Arduinu ale mám tu profesionální simulátor různých Arduin, AVR atd. mohu testovat i část kodu, tak to někdy deklaruji jakoby za chodu programu - promiň

digity pak jsou XX.XX 43.21

Re: MPU6050 vrací stále hodnotu 0

Napsal: 01 lis 2020, 18:01
od Hana
Dobrý den, zkusila jsem to, ale vrací mi angley_ui mi vrací čtyřmístné číslo, například 2684.

Na internetu na této stránce (https://www.instructables.com/Temperatu ... nt-common/) jsem našla kód pro čtení hodnot ze senzoru teploty a pro zobrazení využívají stejný displej, ale místo 2 74HC595 využívají jen jedno. Chtěla jsem ten kód interpretovat pro moji potřebu, problém je, že mají z displeje připojené navíc čtyři piny pro jednotlivé digity k Arduinu, zatímco jí je mám připojeny posuvným registrům. Myslíte, že by ten kód šel nějak upravit, abych mohla použít 2 registry nebo musí být jen jeden.

Zde je můj částečně upravený kód, nevím si rady s const int digitPins[4] = { 4,5,6,7}; - tyto piny má připojené k Arduinu

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;

const int digitPins[4] = {
  4,5,6,7};                 //4 common anode pins of the display
  
const int clockPin = 10;    //74HC595 Pin 11 
const int latchPin = 9;    //74HC595 Pin 12
const int dataPin = 6;     //74HC595 Pin 14

const byte digit[10] =      //seven segment digits in bits
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};
int digitBuffer[4] = {
  0};
int digitScan = 0, flag=0,  soft_scaler = 0;
;

void setup(){                
  for(int i=0;i<4;i++)
  {
    pinMode(digitPins[i],OUTPUT);
  }

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

//writes the temperature on display
void updateDisp(){
  for(byte j=0; j<4; j++)  
    digitalWrite(digitPins[j], LOW);

  digitalWrite(latchPin, LOW);  
  shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
  digitalWrite(latchPin, HIGH);

  delayMicroseconds(100);
  digitalWrite(digitPins[digitScan], HIGH); 

  digitalWrite(latchPin, LOW);  
  if(digitScan==2)
    shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B10000000)); //print the decimal point on the 3rd digit
  else
    shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);

  digitalWrite(latchPin, HIGH);
  digitScan++;
  if(digitScan>3) digitScan=0; 
}

void loop(){ 

  angley = int(angley*100);
  digitBuffer[3] = int(angley)/1000;
  digitBuffer[2] = (int(angley)%1000)/100;
  digitBuffer[1] = (int(angley)%100)/10;
  digitBuffer[0] = (int(angley)%100)%10;
  updateDisp();
  delay(2);

}

Re: MPU6050 vrací stále hodnotu 0

Napsal: 01 lis 2020, 18:48
od pavel1tu
Hana píše:
01 lis 2020, 18:01
Dobrý den, zkusila jsem to, ale vrací mi angley_ui mi vrací čtyřmístné číslo, například 2684.
Ale to by mělo být dobře ne ? pokud angley_ui =2684 tak angley=26,84
angley - to je přijatá hodnota úhlu
anglay_ui je vynásobená stem - aby se na digity "rozebíralo" tím dělení právě jen celé číslo, pak když se natvrddo rozsvítí správná desetinná tečka - tak z toho bude zpět původní číslo uložené v angley

já se několikrát ptal zda naměřená hodnota se odešle a ta samá přijme,
pak už musí být někde chyba v tom zpracování po příjmu

nebylo by lepší to použít tak jak to je ?
bohužel balím a na týden odjíždím
vždy když bude čas, mrknu sem

Re: MPU6050 vrací stále hodnotu 0

Napsal: 01 lis 2020, 19:27
od Hana
Ano, odešle se a přijme stejná hodnota, vyzkoušela jsem tedy jen s jedním registrem a nejspíše funguje dobře, ale čísla se mi zobrazují jedno po druhém, například začne svítit čtvrté číslo, přestane a začne třetí atd.

Re: MPU6050 vrací stále hodnotu 0

Napsal: 01 lis 2020, 19:56
od pavel1tu
Hana píše:
01 lis 2020, 19:27
Ano, odešle se a přijme stejná hodnota, vyzkoušela jsem tedy jen s jedním registrem a nejspíše funguje dobře, ale čísla se mi zobrazují jedno po druhém, například začne svítit čtvrté číslo, přestane a začne třetí atd.
Ale v jednom příspěvku jsi psala že display máš vyzkoušený, že ti funguje
Já tu mám ten IO jen jeden, tak mi to nešlo vyzkoušet - psal jsem

Pokud chceš použít s tvýma vědomostma nějaký kod, musíš to i stejně zapojit jako je v článku,
já zase nejsem tak dobrý, abych to dal z fleku když ten HW nemám na stole a netestnu si to.

Re: MPU6050 vrací stále hodnotu 0

Napsal: 01 lis 2020, 20:01
od pavel1tu
Asi jsem to našel, ale to tak nebylo na začátku dle mne

Kód: Vybrat vše

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;
}   //asi chybí
na konci ti chybí asi ta závorka a máš ji až na koncikodu - jednu na konci smazat
pak se ASI displej vykresluje jen když přijdou nová data

aby se data přijmula jen když budou a display se vykresloval pořád dokola

jdu hledat dál, testni to prosím

doplněno - smazat delay () co je po příjmu dat //delay(100*sizeof(angley));

Kód: Vybrat vše

 delay(5); asi bych taky zrušil

  radio.startListening(); dal bych do SETUP
víc mne opravdu nenapadá

Re: MPU6050 vrací stále hodnotu 0

Napsal: 04 lis 2020, 19:42
od Hana
Nepomohlo to, ale moc děkuji za všechnu pomoc
Asi zkusím LCD displej

Re: MPU6050 vrací stále hodnotu 0

Napsal: 04 lis 2020, 21:05
od pavel1tu
Hana píše:
04 lis 2020, 19:42
Nepomohlo to, ale moc děkuji za všechnu pomoc
Asi zkusím LCD displej
Jak chceš, já bych postupoval jinak.

Rozchoď si ten displej - samotný, aby zobrazoval prostě třeba 1234
Měření, zpracování, přenos i dekodování na jednotlivé segmenty by mělo být funkční, tak to přeci nevzdáš.
Nebo si tel LED displej kup hotový https://arduino-shop.cz/arduino/3073-ho ... -bily.html
https://navody.arduino-shop.cz/navody-k ... m1637.html

Re: MPU6050 vrací stále hodnotu 0

Napsal: 06 lis 2020, 21:16
od Hana
Já jsem schopná na tom displeji zobrazit třeba 0123, ale opravdu jsem si už nevěděla rady, jak dál.
Zkusila jsem ten LCD displej, se kterým mi to funguje jak má a asi to bude i vhodnější řešení, jelikož na něm mohu zobrazit jak data z akcelerometru, tak data z gyroskopu zároveň.
Ale ještě jednou moc děkuju za pomoc, bez Vás bych to ani nepřenesla na druhé Arduino.

Re: MPU6050 vrací stále hodnotu 0

Napsal: 06 lis 2020, 21:44
od pavel1tu
OK, displej si vyber podle toho, aby k němu byla knihovna pro Arduino,
je to málokdy, ale někdy se najdou displeje s řadičem, ke kterému knihovna není.