Dopomoc s projektom

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Dopomoc s projektom

Príspevok od používateľa weider123 » 03 Mar 2018, 14:52

Zdravím s arduinom som začiatočník a tak som sa rozhodol že sa radšej spýtam skúsenejších :D

vytvoril som kód uvedený nižšie, arduino má generovať 3 impulzy : jeden je impulz diaľky (loop1), synchronizačný impulz (loop3) , a impulz ktorý sa má posúvať pomocou potenciometra (loop2,4) a má byť posúvaný od jednej hondoty do druhej. Po spustený ale nastane problém. Po pripojení osciloskopu mi ani z jedného výstupu nezobrazí dané impulzy. Keď ich dám samostatne do 3 rôznych skriptov tak nieje žiaden problém. Tak by som sa chcel spýtať či je chyba v skripte alebo to skrátka arduino nedokáže vygenerovať . Zjednodušene opísané čo by to malo robiť je že by som mal merať pomocou funkcie milis( neviem ako spraviť :( ) vzdialenosť medzi synchronizačným impulzom a tým posúvnym impulzom. A impulz diaľky má tam byť len na zobrazenie.

Kód: Vybrať všetko

int sensorPin = A0;    
int sensorValue = 0;  
int x=0,y=13,c=12, a=0,d=0;
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}


void loop(void) {
  loop1();
  loop2();
  loop3();
  delay(x-356.3); 
  loop4();
  delay(x-963); 
  }
  
  

  
void loop1(void)  //dosah
{
  digitalWrite(12,HIGH);
  delayMicroseconds(66.7);
  digitalWrite(12,LOW);
  delayMicroseconds(33.3);
}


void loop2(void) 
{
  x = analogRead(sensorPin); 
}


void loop3(void)  //synchro
{
  digitalWrite(13, HIGH);
  delayMicroseconds(1);
  digitalWrite(13, LOW);
  delayMicroseconds(100); 
}


void loop4(void)  //potenciometer
{
  digitalWrite(11, HIGH);
  delayMicroseconds(1);
  digitalWrite(11, 0);
  delayMicroseconds(6.67);
}

  



Ďakujem za vaše odpovede :)
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 03 Mar 2018, 19:37

Toto je správna cesta ako urobiť nejakých pár impulzov za nejaký čas. To čo žiadaš v inom vlákne s 555 je dnes anachronizmus. Dnes platí pravidlo že ak niekde potrebujem jednu 555 tak tam dám radšej MCU a bude to vždy 1000x lepšie ako tá 555.

K problému: Ten tvoj kód neobsahuje žiadne if ani nič čo by zamotávalo situáciu. Že tie impulzy nevidíš bude mať na svedomí niektoré volanie v tom loope. Takže podľa mňa stačilo len vyskúšať ktoré to sú a je to. Je tam 6 volaní takže na 6krát sa dá na to prísť čo tam robí paseku. Podľa mňa je to to že pre funkciu delay ti vyjde záporné číslo. Lenže ona záporné číslo neberie. Ona berie unsigned long. To znamená že sa to automaticky preklopí na strašne veľké kladné číslo a potom aj keď sú to milisekundy tak to tam trčí niekoľko dní.

Ak si nevieš predstaviť ako funguje aritmetika na unsigned long. tak si pozri tento môj pokec. Máš tam simuláciu operácie plus a mínus. Je to v súvislosti milis ktorú neskôr budeš asi tiež potrebovať.
http://www.plesnik.sk/Sim/milis.html

Ešte malé vysvetlenie ako som vedel čo delay chce. Z dokumentácie na stránke sa dozvieš figu https://www.arduino.cc/reference/en/lan ... ime/delay/, lebo arduinisti takéto detaily pred začiatočníkmi taja. Ba je to tam, len ja som slepý.
To sa musíš pozrieť do zdrojového kódu a rozumieť C aby si vedel čo a ako funguje.
https://github.com/arduino/Arduino/blob ... AY/delay.c
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 04 Mar 2018, 00:54

Ďakujem veľmi pekne za vašu odpoveď. Overiť to môžem až v utorok pretože momentálne nemám po ruke osciloskop ale ak existuje aj nejaká iná cesta ako to overiť rád sa jej priučím pretože som totálny začiatočník v týchto veciach.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 04 Mar 2018, 08:36

No v susednom vlákne o 555 to už začína smerovať správnym smerom, ale už tam teraz tam je viac obvodov ako je jeden MCU. A dostaneš z toho jeden napevno zadrátovaný obvod, ktorého funkciu nebude možné pozmeniť inak len zmenou zapojenia a pridávaním kde jakých logických obvodov. Takto sa to robilo keď som dvadsať rokov a jediným MCU ktorý sa ale nedal zohnať bol MHB8048 z tesly Pieštany. Dnes sme ale úplne inde. MCU stojí menej ako 555, žerie menej ako 555, je presný na desatinu mikrosekundy, dá sa preprogramovať za 10 sekund a tak upraviť funkciu zapojenia. Jediná nevýhoda je že treba vedieť programovať a nie len lepiť zopár ľahko pochopiteľných príkazov k sebe.
A to je ten najväčší problém. Lebo podobne ako je zúfalý nedostatok dobrých autorov hudby, textu, tak je aj zúfalý nedostatok dobrých programátorov.

Iné cesty overovania činnosti programov v MCU:
  1. predĺžiť si časy 1000,000 krát a pozerať sa ako blikajú LEDky. Celá tá tvoja úloha je v podstate urobiť dve blikajúce LEDky s nejakým presne požadovaným časovaním. Takže začal by som tréningom takýchto úloh.
  2. nasadiť logovanie cez sériový port. Tak si viem sledovať kade sa mi program pohybuje a viem si tiež vypisovať obsahy premenných
  3. simulácia chovania programu na hostitelskom systéme. Toto nie je cool pre arduinistov lebo to vyžaduje porozumenie ako to funguje, čo je nebezpečné. Takto zmúdrelý človek by mohol prestať kupovať arduino hotové veci, lebo by potom vedel stavať vlastné. Ono o to ani nie je záujem na strane začiatočníkov, lebo je to časovo a intelektovo náročná vec. Oveľa jednoduchšie je napísať na fórum kde to múdry človek opraví za pár minút. Len sa mi zdá že múdry ľudia vymierajú, alebo nemajú čas a chuť písať po fórach stále to isté dokola.
  4. Naučiť sa programovať. Dnes má každý v ruke 1000,000 krát lepší počítač než ten čo pristál na mesiaci. Alebo má na stole počítač čo by dokázal robiť evidenciu daní pre celú európu. Lenže 99,9% populácie vie tak akurát hladkať displej
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 982
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Dopomoc s projektom

Príspevok od používateľa budvar10 » 04 Mar 2018, 14:20

Tie dva delaye x - dačo sa mi zdajú problém, len tak narýchlo som to pozrel. Pozri si aký parameter vyžaduje delay(), je to unsigned long. Určite nie float a neviem načo tam dávaš x - niečo, x je 0, takže to asi budú brutálne dlhé delaye, keďže hodnota v parametri je záporná.
0

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 04 Mar 2018, 14:33

Ďakujem za odpoveď. Tie delaye som tam dával kvôli tomu že ten impulz s potenciometrom by mal fungovať iba od jedného času do druhého. A bolo mi povedané že ten potenciometer má hodnoty do 1023 tak som myslel že takto by to malo byť správne.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 982
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Dopomoc s projektom

Príspevok od používateľa budvar10 » 04 Mar 2018, 15:01

Nie je mi celkom jasné z toho popisu, čo chceš docieliť. Skús tam dať na začiatok len x, aby si sa vedel odpichnúť, delay 0 - 1023 ms.
0

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 04 Mar 2018, 15:07

Potrebujem zmerať čas pomocou milis medzi tým synchro impulzom a impulzom ktorý sa pohybuje pomocou potenciometra. Lenže chcem aby sa pohyboval iba od 6.67*10^-5 s po 6*10^-4 s.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 04 Mar 2018, 15:16

čítal si ten môj popis čo som ti poslal? milis má rozlišovaciu schopnosť jednej ms aj to s biedou, lebo počítanie milisekundy nie je úplne presné a postupne sa robí korekcia. Ako s tým chceš merať tak krátke časy ako píšeš?

Mal by si sa najprv naučiť ako pracujú čítače, ako sa merajú takéto krátke časy pomocou logických obvodov. To čo ti nalinkoval Zipaj v inom vlákne. Potom by si mal naučiť programovať v C (napr poznať rozdiel medzi int a float)
Dalej ako pracuje MCU, aké má možnosti s použitím čítačov a potom môžeš začať rozmýšlať nad tým ako tie čítače v MCU využiť na meranie rýchlosti.

Ale zatiaľ by som doporučoval naučiť sa blikať aspoň LEDkami. Lebo toto čo tu chceš je ako keď jednoročné batoľa chce zabehnúť maratón.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4415
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Dopomoc s projektom

Príspevok od používateľa romiadam » 04 Mar 2018, 15:31

Weider123,
Odhryzol si si veľmi veľké sústo A teraz sa ním dusiš. Začni omrvinkami ako ti peterple pise....
Ale zatiaľ by som doporučoval naučiť sa blikať aspoň LEDkami.
a tak som sa rozhodol že sa radšej spýtam skúsenejších
peterple je skuseny, tak ho pocuvni.


Alebo si pockaj, kým ti to tu niekto naprogramuje A dá ti to hotove.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 04 Mar 2018, 15:46

Jem mi to jasné bez akejkoľvek znalosti arduina mám zrazu spraviť takýto projekt. Nebránim sa tomu vypracovaniu za nejaký finančný obnos, skôr mám problém niekoho takého zohnať kto by mi to vypracoval. O tej nepresnosti tiež viem ale po sčítaní toho času to mám previesť na diaľku ktorá nemusí byť úplne presná má to byť len približná hodnota. Mal som na výber medzi arduinom a čítačmi a zvolil som si arduino pretože mi bolo povedané že je to jednoduhšie ale asi to tak nieje :(
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 04 Mar 2018, 15:59

Samozrejme že s arduinom je to jednoduchšie lebo hw je v podstate hotový, len:
  1. musiš vedieť programovať
  2. musíš vedieť ako to zmerať samotnými čítačmi
  3. musíš poznať MCU čo je v arduíne a to ako tie jeho prostriedky (čítače) sa dajú použiť na meranie tvojej úlohy
Hej programátor je dnes človek vyvažovaný zlatom. Všetky zariadenia idú dnes po tejto koľaji. Naopak školy idú úplne po inej koľaji. Každý má dnes "informatiku" pomaly od materskej školy, ale vedomosti z informatiky nulové.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
juraj77
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 23 Sep 2012, 22:39
Bydlisko: Nitra
Vek: 44

Re: Dopomoc s projektom

Príspevok od používateľa juraj77 » 04 Mar 2018, 17:02

asi preto že tú informatiku vyučujú telocvikári a slovenčinári.... :)
Ach bože, naše školstvo ....
Mimochodom , objaviť knihu o programovacom jazyku alebo mikropočítačoch v slovenčine je v podstate nemožné,tie posledné sa písali v 90 tych rokoch.Ale česť výnimkám ....
0
" Bez vody si viem predstaviť život, ale bez internetu a počítača nie.."

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4415
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Dopomoc s projektom

Príspevok od používateľa romiadam » 04 Mar 2018, 18:41

Kým ucitelia nebudu dobre plateny, nikdy to nebudu ucit odborníci, ale vždy telocvikari vrámci svojich voľných hodin, takže sa treba sťažovať na ministerstve skolstva.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 19 Mar 2018, 14:29

Pohol som s tým projektom ale stále mi dajako nefunguje ten impulz ktorý sa má posúvať pomocou potenciometra (medzera medzi 2 impulzmi sa má buď zvyšovať alebo znižovať otáčaním potenciometra).
Tu je celý kód :

Kód: Vybrať všetko

#include <LiquidCrystal.h>
int x = 0;  //cele cisla pre bin kod
int y = 0;   //cele cisla pre bin kod

float a=0;  //des. cisla pre zobrazenie
float b=0;  //des. cisla pre zobrazenie
float c=0;
const int led1 = 11;   //priradenie premennych vystupov ledkam
const int led2 = 10;   //priradenie premennych vystupov ledkam 
const int led3 = 9;   //priradenie premennych vystupov ledkam
const int led4 = 8;   //priradenie premennych vystupov ledkam
const int led5 = A0;  //priradenie premennych vystupov ledkam
const int led6 = A1;  //priradenie premennych vystupov ledkam
const int led7 = A2;  //priradenie premennych vystupov ledkam
const int led8 = A3;		//priradenie premennych vystupov ledkam

int lights[] = {led1, led2, led3, led4, led5, led6, led7, led8};
//ledky do jednej premennej

LiquidCrystal lcd(13, 12, 5, 4, 3, 2);  //nastavenie pinov displeja

void setup() {
  lcd.begin(16, 2);   //parametre displeja
  Serial.begin (9600);  
  pinMode(A5, INPUT); //vstup potenciometra
  
  pinMode(7, OUTPUT);  //vystupny pin pohybliveho impulzu ciela 
  pinMode(6, OUTPUT);  //impulz dialky
  
  pinMode(led1, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led2, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led3, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led4, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led5, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led6, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led7, OUTPUT);  //zadefinovanie vystupov lediek
  pinMode(led8, OUTPUT);  //zadefinovanie vystupov lediek
}


void loop() {         //slucka
  int vzdialenost;        //premenna vzdialenosti cele cisla
  float vzdfl;          //premenna vzdialenosti desatinne cisla
  float cas;
  x = analogRead(A5);     //precitanie hodnot potenciometra
  y = map(x,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
  
  a = analogRead(A5);     //precitanie hodnot potenciometra
  b = map(a,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
  
 vzdialenost = y/100;      //prepocet vzdialenosti - cele cisla
 vzdfl = b/100;          //prepocet vzdialenosti - desatinne cisla
 cas = (2*vzdfl)/(300000000);
  Serial.println(cas,8);  
  
PORTD |= (1<<7);
delay(1);
PORTD &= ~(1<<7);      //impulz ciela
delayMicroseconds(cas);         //trvanie prvej 0
PORTD |= (1<<7);     //impulz ciela
delay(1);           //trvanie 1
PORTD &= ~(1<<7);      //impulz ciela
delayMicroseconds(100-cas);       //trvanie druhej 0

PORTD |= (1<<6);      //impulz dialky 
delay(80);            //trvanie 1
PORTD &= ~(1<<6);     //impulz dialky
delay(20);            //trvanie 0
  


  
 if (vzdfl >= 91 || vzdfl <= 9){  //podmienka ak je ciel mimo dosah
   digitalWrite(11,LOW);       //neukazanie binarneho kodu
   digitalWrite(10,LOW);       //neukazanie binarneho kodu
   digitalWrite(9,LOW);       //neukazanie binarneho kodu
   digitalWrite(8,LOW);       //neukazanie binarneho kodu
   digitalWrite(A3,LOW);      //neukazanie binarneho kodu
   digitalWrite(A2,LOW);      //neukazanie binarneho kodu
   digitalWrite(A1,LOW);      //neukazanie binarneho kodu
   digitalWrite(A0,LOW);      //neukazanie binarneho kodu
   Serial.println("Mimo dosah");  //vypisanie do serioveho portu
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Mimo dosah");     //vypisanie na displej
   delay(100);            //oneskorenie zobrazenia displeja
  }
  else {              //podmienka ak je ciel v dosahu
    lcd.setCursor(0,0);
    lcd.print("Vzdialenost = ");  //vypisanie na displej
    Serial.print("Vzdialenost = ");
    Serial.print(vzdfl);      
    Serial.println(" km");   
    lcd.setCursor(1,2);       
    lcd.print(vzdfl);       
   lcd.println(" km       ");       
    delay(100);         
 
 
  
  byte pins[9] = { led1, led2, led3, led4, led5, led6, led7, led8} ; 
for (byte i = 0 ; i < sizeof(pins) ; i++)               
    digitalWrite (pins[i], ( vzdialenost & (1<<i)) != 0 ? HIGH : LOW) ;
 }
 Serial.print("Binarny kod :");   
 Serial.println(vzdialenost, BIN);  
 delay(100);            
}

Skúsil som 2 varianty vytvorenia ale ani jedna mi nefunguje
1. :

Kód: Vybrať všetko

PORTD |= (1<<7);
delay(1);
PORTD &= ~(1<<7);      //impulz ciela
delay(cas);         //trvanie prvej 0
PORTD |= (1<<7);     //impulz ciela
delay(1);           //trvanie 1
PORTD &= ~(1<<7);      //impulz ciela
delay(100-cas);       //trvanie druhej 0
a 2.:

Kód: Vybrať všetko

digitalWrite(7, HIGH);
delay(1);
digitalWrite(7, LOW);      //impulz ciela
delay(cas*1000);         //trvanie prvej 0
digitalWrite(7, HIGH);     //impulz ciela
delay(1);           //trvanie 1
digitalWrite(7, LOW);      //impulz ciela
delay(100-cas*1000);       //trvanie druhej 0

Ďakujem za vaše odpovede
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 19 Mar 2018, 19:59

koľko je 100-cas?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 19 Mar 2018, 22:04

ďakujem za opravu malo tam byť 0.67-cas, moja chyba, ale stále nefunguje požadovaný výsledok

Oprava:

Kód: Vybrať všetko

  
PORTD |= (1<<7);
delay(1);
PORTD &= ~(1<<7);      //impulz ciela
delay(cas);         //trvanie prvej 0
PORTD |= (1<<7);     //impulz ciela
delay(1);           //trvanie 1
PORTD &= ~(1<<7);      //impulz ciela
delay(667-cas);       //trvanie druhej 0
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa peterple » 20 Mar 2018, 00:24

a kolko je 667-cas? Alebo koľko je čas? Nechce sa mi to rátať z tých vzorcov. A čo je požadovaný výsledok? Kolko je x a a keď sa krúti potenciometrom na obe strany? Prečo sa číta x a potom zase a z toho istého vstupu? Ja by som si prečítal len raz, ale
vôbec nerozumiem konceptu. Prečo sa čo robí. Komentáre sú skoro zbytočné, nemajú pre mňa žiadnu informačnú hodnotu. Skôr sú mätúce napríklad:

Kód: Vybrať všetko

 x = analogRead(A5);     //precitanie hodnot potenciometra
  y = map(x,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
Akých hodnôt? Aké prenastavenie max hodnoty?
K čomu je dobré urobiť y=x*10000/1023 na intoch keď sa potom prejde na floaty? Päť minút aby som googlil čo robí map a nakoniec z toho vylezie takáto jednoduchá vec ako vynásob to konštantou 9,775, K čomu je to dobré?
Ťažko radiť, teda mne. Možno to iný chápu o čo tam ide. Ja som už starší človek a večer mi to už nemyslí.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: Dopomoc s projektom

Príspevok od používateľa djwiktor » 20 Mar 2018, 07:32

Nerozumies prevodom jednotiek casu, preto ti to nejde :)

NAJVACSI problem ktory vidim je ze vypocitas cas (cas = (2*vzdfl)/(300000000);)
Premenna cas ti vyjde malaa, napriklad 6,666e-7 pri krajnej polohe potenciometra.
Taketo male cislo ked odcitas od 667, tak bude vysledok stale 667. TO JE CELY PROBLEM.
Predpokladam ze to male cislo je v mikrosekundach. Logicky. Lenze zapis hovori kolko je to v sekundach.

Takze musis urobit najskor konverziu tvojich 667 mikrosekund (od ktorych chces odcitavat cas) na rovnaky exponent a potom od toho odcitat cas alebo skonvertovat ten tvoj cas na mikrosekundy! Lebo tak ako ti to vyjde hore, je to 6,666e-7 sekundy!

Takze napriklad najskor konverzia na 6,67e-7 a potom odcitat napriklad to maximum 6,666e-7 a vyjde ti hypoteticky 0. Az toto mozes dat do DelayMicroseconds.

SNAD sme sa pochopili :)

Dalsia vec, toto je co za haluz?

Kód: Vybrať všetko

int vzdialenost;        //premenna vzdialenosti cele cisla
  float vzdfl;          //premenna vzdialenosti desatinne cisla
  float cas;
  x = analogRead(A5);     //precitanie hodnot potenciometra
  y = map(x,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
  
  a = analogRead(A5);     //precitanie hodnot potenciometra
  b = map(a,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
  
vzdialenost = y/100;      //prepocet vzdialenosti - cele cisla
vzdfl = b/100;          //prepocet vzdialenosti - desatinne cisla
cas = (2*vzdfl)/(300000000);
zbytocne 2x citas a 2x pocitas to iste ( a uberas sa o cas).

vzdialenost aj vzdfl bude mat tu istu hodnotu (neuvazujeme teraz o sume potenciometra) akurat jedno budu cele cisla a druhe floaty.
A pretoze po nacitani budu mat x aj a stale rovnaku hodnotu, ale v CELYCH cislach ( vzdy to bude iba 0 az 1023, po 1 cisle, ziadne desatiny). Je to vysledok z A/D prevodnika, ktory vie iba cele cisla. Teda 1,2,5,400, 1023.. Chapeme sa? Mozes spravit potom uz len extra mapovanie hodnoty do floatu, vid nizsie. Takze ti odpadne jedno citanie analog portu a jedna zbytocna premenna (b).

Bohate ti staci :

Kód: Vybrať všetko

int vzdialenost;        //premenna vzdialenosti cele cisla
  float vzdfl;          //premenna vzdialenosti desatinne cisla
  float cas;
  x = analogRead(A5);     //precitanie hodnot potenciometra
  y = map(x,0,1023,0,10000);   //prenastavanie max hodnoty potenciometra
  a = map(x,0,1023,0,10000);   
   
vzdialenost = y/100;      //prepocet vzdialenosti - cele cisla
vzdfl = a/100;          //prepocet vzdialenosti - desatinne cisla
cas = (2*vzdfl)/(300000000);
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

weider123
Okoloidúci
Okoloidúci
Príspevky: 12
Dátum registrácie: 03 Feb 2018, 22:26

Re: Dopomoc s projektom

Príspevok od používateľa weider123 » 20 Mar 2018, 10:14

Ďakujem za odpovede, hodnoty do int sú tam kvoli zobrazeniu tej hodnoty z potenciometra v binárnom kóde pomocou lediek, a float je tam kvoli hodnotám zobrazovaným na displeji. Má ist o impulzové meranie diaľky. V jednoduchosti - mám točiť potenciometrom ktorým nastavujem diaľku cieľa od diaľkomera ( 0 km do 100km). Premenná čas je vyrátaná pomocou vzorca 2xvzdialenost/rýchlosť svetla. Čiže minimálna hodnota cas je 0 a maximálna 66.7mikrosekund Výstup má byť vzdialenosť v kilometroch zobrazená na displeji , v binárnom kóde a výstup na osciloskop na ktorom by sa dalo sledovať pohybovanie daného impulzu pomocou otacanaia potenciometra. 2x načítanie hodnôt z potenciometra som už upravil. Ešte skúsim tie dané rády zvýšiť a taktiež som si ešte v som si všimol že mi tam vyjde záporný delay tak to skúsim opraviť.
0

Napísať odpoveď