funkcia tlačidla-currentSensor++

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 19 Máj 2018, 09:50

Zdravim chlapi, potreboval by som poradiť ohladom kódu, nejak sa mi nedarí. potrebujem použiť na pinoch arduina D4 a D5 tlačidlá ktoré po stačení prepnú funkciu bud to hore/D4/ alebo dolu/D5/. Momentálne funkcie pracujú random. Vedel by mi s tým niekto pomôcť? srdečná vďaka...tu je original

Kód: Vybrať všetko

// Will return:
// 0 - Nothing
// 1 - Key Up pressed
// 2 - Key Down pressed
int getKeyStatusRandom() {
  int key1 = random(0, 2);
  int key2 = random(0, 2);
  if (key1 == 1 && key2 == 0) return 1;
  if (key1 == 0 && key2 == 1) return 2;
  if (key1 == 0 && key2 == 0) return 0;
  if (key1 == 1 && key2 == 1) 
    if (random(0, 2) == 1) return 1;
    else return 2;


  }
}

// 0 - Nothing
// 1 - Up
// 2 - Down
void refreshParams(int type) {
  if (type == 1) {
    if (currentSensor < nSensors - 1) currentSensor++;
    else {
      currentSensor = 0;
      if (currentGroup < (currentModule->ngroups) - 1) currentGroup++;
      else {
        if (currentModule->addr == ADR_Dashboard) currentModule = modules[1];
        else currentModule = modules[0];
        currentGroup = 0;
        kwp.disconnect();
      }
    }
  }
  else if (type == 2) {
    if (currentSensor > 0) currentSensor--;
    else {
      currentSensor = nSensors - 1;
      if (currentGroup > 0) currentGroup--;
      else {
        if (currentModule->addr == ADR_Dashboard) currentModule = modules[1];
        else currentModule = modules[0];
        currentGroup = currentModule->ngroups - 1;
        kwp.disconnect();
      }
    }
  }
}
0
Naposledy upravil/-a godeejay v 21 Máj 2018, 15:18, upravené celkom 1 krát.

Cofi
Nový člen
Nový člen
Príspevky: 74
Dátum registrácie: 25 Jan 2010, 00:00
Vek: 43

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa Cofi » 20 Máj 2018, 12:21

nemalo by to byt takto?! :

if (key1 == 1 && key2 == 0) type = 1;
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: funkcia tlačidla-currentSensor++

Príspevok od používateľa peterple » 20 Máj 2018, 20:41

a čo zakmitávanie tlačítok? takto ľahko sa to nedá urobiť. Ak vieš anglicky tak hľadaj arduino debounce. V slovenčine ani češtine som nič poriadneho nenašiel. Iba také naivno amatérske riešenia.
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
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa misocko » 20 Máj 2018, 22:18

zacal by som tym ze by som zmenil to random na digitalread
preco si zmenil aj return na type ? co ta k tomuto kroku viedlo?
+zakmit tlacitok, pullup....
0

Používateľov profilový obrázok
AEdison
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1183
Dátum registrácie: 13 Júl 2009, 00:00
Bydlisko: Drienov
Vek: 28
Kontaktovať používateľa:

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa AEdison » 21 Máj 2018, 01:38

peterple napísal:a čo zakmitávanie tlačítok?
To sa dá z veľkej časti vyriešiť 100n kondíkom k tlačítku. Takto som ošetroval enkodéry ale na tlačidlá to ma rovnaký efekt.
0

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 21 Máj 2018, 12:59

misocko napísal:zacal by som tym ze by som zmenil to random na digitalread
preco si zmenil aj return na type ? co ta k tomuto kroku viedlo?
+zakmit tlacitok, pullup....
s arduinom som v začiatkoch, každým krokom sa učím :) zákmit zatial vyriešim tým 100n kondenzátorom. Vedel by si mi napísať tvoj príklad kódu ako by si to navrhol ty tú úpravu?

Kód: Vybrať všetko

int getKeyStatusRandom() {
  int key1 = (digitalRead(pinButtonUp) == HIGH);
  int key2 = (digitalRead(pinButtonDown) == HIGH); 
  if (key1 == 1 && key2 == 0) type 1; 
  if (key1 == 0 && key2 == 1) type 2;
  if (key1 == 0 && key2 == 0) return 0;
  if (key1 == 1 && key2 == 1) {
    if (random(0, 2) == 1) return 1;
    else return 2;

   
  }
}
píše mi že nemám deklarované "type" :O
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa misocko » 21 Máj 2018, 14:07

ved Ti pisem ze do toho type nerypaj, to nechaj tak ako je to v prvom code ktory si sem postol (je tam return a nie type)
keby neslo tak len upravuj riadok 6 a 7 tohto kodu (init key1 a init key2)

Kód: Vybrať všetko

// Will return:
// 0 - Nothing
// 1 - Key Up pressed
// 2 - Key Down pressed
int getKeyStatusRandom() {
int key1 = digitalRead(PushUp);
int key2 = digitalRead(PushDown);
  if (key1 == 1 && key2 == 0) return 1;
  if (key1 == 0 && key2 == 1) return 2;
  if (key1 == 0 && key2 == 0) return 0;
  if (key1 == 1 && key2 == 1) 
    if (random(0, 2) == 1) return 1;
    else return 2;


  }
}

// 0 - Nothing
// 1 - Up
// 2 - Down
void refreshParams(int type) {
  if (type == 1) {
    if (currentSensor < nSensors - 1) currentSensor++;
    else {
      currentSensor = 0;
      if (currentGroup < (currentModule->ngroups) - 1) currentGroup++;
      else {
        if (currentModule->addr == ADR_Dashboard) currentModule = modules[1];
        else currentModule = modules[0];
        currentGroup = 0;
        kwp.disconnect();
      }
    }
  }
  else if (type == 2) {
    if (currentSensor > 0) currentSensor--;
    else {
      currentSensor = nSensors - 1;
      if (currentGroup > 0) currentGroup--;
      else {
        if (currentModule->addr == ADR_Dashboard) currentModule = modules[1];
        else currentModule = modules[0];
        currentGroup = currentModule->ngroups - 1;
        kwp.disconnect();
      }
    }
  }
}
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2563
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa maskrtnik01 » 21 Máj 2018, 14:17

godeejay napísal: píše mi že nemám deklarované "type" :O
Nehnevajte sa, ale keď sa tomuto čudujete, naštudujte si základy syntaxe jazyka C.
Súdiac podľa kódov v tejto téme, nemáte v tom jasno.
0

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 21 Máj 2018, 15:26

Ďakujem za duchaplnú odpoveď, maskrtnik01 a Vy by ste mi s tym vedeli pomôcť? hoc aj za finančnú odmenu ak Vám pošlem celý kód?
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2563
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa maskrtnik01 » 21 Máj 2018, 15:52

Bohužial momentálne nemám čas ani na vlastné projekty.
Tiež, necítim sa byť takým odborníkom, aby som od niekoho pýtal peniaze.
Prejdite si nejaký tutoriál na jazyk C(nemusí to byť z embedded oblasti), potom budete vedieť prečo v tom kóde máte syntaktické chyby.
Ak Vám niečo nebude stále jasné, pýtajte sa, na to je diskusné fórum.
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: funkcia tlačidla-currentSensor++

Príspevok od používateľa peterple » 22 Máj 2018, 00:29

godeejay napísal:zákmit zatial vyriešim tým 100n kondenzátorom.
To je jeden z tých amatérskych, nie moc vhodných spôsobov. Odpor na zamedzeniu skratovaniu kondenzátora tlačítkom tam máš?
to že v tom hodne plávaš je poriadne vidno.
Napríklad čo si chcel urobiť týmto?

Kód: Vybrať všetko

  int key1 = (digitalRead(pinButtonUp) == HIGH);
godeejay napísal:píše mi že nemám deklarované "type"
a máš? type má byť premenná? ak áno tak ju musíš deklarovať aby sa vedelo čo je zač, a potom do nej musíš priradiť hodnotu. tj mal by si presne vedieť čo robí ten kus kódu hore. A analogicky postupovať pri premennej s názvom type.

Kód: Vybrať všetko

return 1;
je iná káva. To slovo je jedno z niekoľkých ktoré sú v jazyku C vyhradené a niečo robí. Opäť treba presne vedieť čo.
Ty chceš jazdiť s autom, ale nevieš rozdiel medzi plynom, brzdou, spojkou. Náhodne šliapeš na čo ti noha padne no a potom to aj tak funguje. Niekedy to zachráni prekladač keď tomu nerozumie. Inokedy tomu rozumie a niečo sa spustí ale to niečo je úplne iné ako si to ty predstavuješ.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

kamilko
Stály člen
Stály člen
Príspevky: 269
Dátum registrácie: 21 Okt 2017, 14:07
Bydlisko: kosice

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa kamilko » 22 Máj 2018, 08:22

Ten kondenzator je jediny sposob ako zabezpecit procesor aby nezblbol. Ked sa dobabre navrch dosky a vstupov, Treba volit rozumne hodnoty C a nieje problem.
Problem by mohol nastat pri enkodery.
0

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 23 Máj 2018, 21:05

peterple vďaka aj za tvoje hrejivé slová, ano, máš pravdu, mám v tom hokej. preštudoval som príručku "pruvodce svetem arduina" 2x a snažím sa pochopiť. žial, ja som z neba učený nespadol. kedže už ozaj neviem ako dalej, moja ponuka platí aj pre teba aj za finančnú odmenu. krajné mám kúsok samozrejme ak vôbec to, čo chcem je vôbec zrealizovatelné...
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6201
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa pocitujlasku » 23 Máj 2018, 22:17

kamilko napísal:Ten kondenzator je jediny sposob ako zabezpecit procesor aby nezblbol.
V IT svete neeistuje jediny sposob. vzdy existuje viac moznosti, ako dany problem riesit. Napr. otestujes na log. 0 - ak je, tak to skusis o dajme tomu 100ms. ak je stale log. 0, tak vies, ze je stlacene.
Pripadne na vstup hodis schmittov obvod, alebo MKO, alebo kopec dalsich moznosti.
Tu to napr. riesia priamo v arduine: https://arduino.cz/arduino-zaklady-funkce-debounce/
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

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: funkcia tlačidla-currentSensor++

Príspevok od používateľa peterple » 23 Máj 2018, 22:51

Lenže prúvodce světem arduina asi predpokladá že vieš C. Podobne na tom je aj Zawinov serial o programovaní ATMELov v C tu na svetelektro. Takže to chce začať štúdiom práve jazyka C. Doba keď som učil za finančnú odmenu aj napr programovanie jednočipov už pominula. Úspešnosť bola prach biedna. Takže sa na to už nedám.
Samozrejme že čítanie tlačítok jednočipom je realizovatelné. Prezradím ti tajomstvo. V každej PC klávesnici je jednočip. V tých prvých PC od IBM tam bol 8bitový 8042 čo je niečo ranku 8048. Smiešne málo pamäte programu, smiešne málo RAM. A predsa to bezproblémov obsluhovalo 101 kláves a komunikovalo s mainboardom cez SPI. Takže obslúžiť dve tlačidlá je brnkačka. Len to chce vedieť C, a potom pár grífov z elektroniky.

Je pravda že nikto učený z neba nespadol. Lenže od toho vymysleli školy a knihy aby sa ten kto chce naučil čo potrebuje. So školami to ide dole vodou. Ale knihy to je presný opak. Keď som ja začínal s 8048 tak som o tom mal 4 stránky v strede amatérskeho rádia (zelené). Dnes sú knihy upgradeované na verziu 3.0. Verzia 2.0 je web. Verzia 3.0 je youtube. A namiesto škôl ktoré idú dole vodou tu máme diskusné fóra. Problém je že sa na nich nediskutuje ale pripomínajú skôr stránky jaspravim. Niekto ma problém napíše do fóra a čaká že mu to niekto urobí. Ako vidíš na tomto fóre to nefunguje. Tu vieme poradiť s konkrétnym problémom. Čo funguje asi tak že človek napíše čo konkrétne chce aby to robilo, ako si myslí že by sa to dalo čo všetko vyskúšal a potom by sa mu malo dosť rady prečo to nejde a a čo treba zmeniť.

Ohľadom odstraňovania zákmitov
V živote som na to nepoužil kondenzátor. A to som prvé tlačítka pripájal na TTL a nie k procesorom. V prípade procesorov je elegantné sw riešenie. Opäť si pozrite znútra tú PC klávesnicu či tam nájdete mraky kondenzátorov (ako by ste ich pri matici zapojili?).
Druhá vec - nie je mi jasné ako Schmittov klopný obvod odstráni zákmity. Zase jedno tajomstvo. Každý jeden vstupný pin na arduine je prehnaný cez Schmitta.
MKO je dosť overkill riešenie lebo treba veľa hw sprostostí a navyše sa aj tak bude doba kyvu meniť (s časom, teplotou ..).
Ono to s tým kondenzátorom nie je až také zlé riešenie, ale človek musí mať skúsenosti z elektrotechniky aby nenechal opalovať kontakty tlačitka. Lebo potom to už nebude mat 10^8 zopnutí. Ale sw riešenie je z môjho pohľadu najlepšie.
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
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa misocko » 23 Máj 2018, 23:11

vo velkom sa tu robehlo debounce pricom kod je uplne nefunkcny
godeejay, chces sa naucit programovat arduino na tomto kode , alebo chces za uplatu naprogramovat arduino ? - to len pre lepsie nasmerovanie temy, aby sa tu neriesili blbosti , hlavne ked tomu rozumies este menej ako ja! , a to ja tomu nerozumiem vobec :)
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6201
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa pocitujlasku » 24 Máj 2018, 08:38

Schmittov obvod ti vie dost vyrazne pomoct v pripade, ak tie zakmity su tak rychle, ze nedosiahnu rozhodovaciu uroven SKO. Skus si pogooglit, dost casto sa v moznostiach odstranenia zakmitu spomina. Neviem o tom, ze by atmega mala na vstupe SKO, mozno niektore nove verzie, predsa len arduino uz dlho nie je len o atmega, ale uz sa to portovalo na viac platforiem.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 24 Máj 2018, 17:57

no kedže potrebujem v prvom rade spojazdnit tie dve tlačidlá som za úplatu a ochotného človeka. popri tom sa budem zdokonalovať v štúdiu jazyka C... ono takto, tlačidlá som už mal spojazdnené, len mi program nerobil to čo mám v palici ako predstavu... vedeli prepínať funkcie ale nie tak ako by som chcel. a neviem (podla kódu) či by to vôbec vedeli... asi sa na to celé vykašlem a budem kludnejšie spávať :D
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: funkcia tlačidla-currentSensor++

Príspevok od používateľa peterple » 24 Máj 2018, 22:00

pocitujlasku napísal:Schmittov obvod ti vie dost vyrazne pomoct v pripade, ak tie zakmity su tak rychle, ze nedosiahnu rozhodovaciu uroven SKO. Skus si pogooglit, dost casto sa v moznostiach odstranenia zakmitu spomina. Neviem o tom, ze by atmega mala na vstupe SKO, mozno niektore nove verzie, predsa len arduino uz dlho nie je len o atmega, ale uz sa to portovalo na viac platforiem.
Ja teda neviem ako mi SKO pomôže. Skúsil som googliť ale všade som našiel Schmitta len ako tvarovač za tým RC filtrom. Môžeš dať link kde sa samotný SKO používa na debouncing?

ja som požíval RS klopný obvod na TTL a potom sw na procesoroch. Tuto to výborne popísal Pán Inžinier.
http://www.ganssle.com/debouncing-pt2.htm
tuto zase nejaké priebehy aby sme boli v obraze o čo ide
http://www.ganssle.com/debouncing.htm

Čo sa týka SKO na vstupoch atmegy, je jasné že o tom nevieš. Však som písal že je to tajomstvo.
http://ww1.microchip.com/downloads/en/D ... df#page=98

Ešte je tam aj synchronizer s interným CLK a prizemnenie keď to drichme aby to neplávalo podľa luftu. Ale pššt. Všetko tajné informácie pre 99,9% arduinistov. Klasický arduinista manažér tú schému v živote nevidel a neuvidí. A keby náhodou tak by jej samozrejme nerozumel. Moc divných krabičiek - žiadna library.
Prílohy
megaInput.png
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

godeejay
Okoloidúci
Okoloidúci
Príspevky: 38
Dátum registrácie: 01 Feb 2011, 00:00
Bydlisko: Krakovany-PN
Vek: 38

Re: funkcia tlačidla-currentSensor++

Príspevok od používateľa godeejay » 26 Máj 2018, 14:45

ďakujem všetkým za váš čas a hlavne téme, ktorej ste sa držali.... už to mám spravené tak ako mi bolo treba.

Obzvlášť ďakujem užívatelovi misocko, ktorý ma správne nasmeroval bez zbytočných invektív. :agree:

Keď budem u babky v HC zeberem ti pívo :D

Všetkým pekný deň.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok