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()
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í.