![](http://www.elektronika.lt/_sys/img/dot.gif) |
![](/_sys/img/dot.gif)
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 02 12, 00:39. Visos datos yra GMT + 2 valandos.
|
|
|
![](/_sys/img/box_ico.gif) |
Forumas » Mikrovaldikliai » kiek kartu nuspaustas mygtukas?
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
![](/_sys/img/dot.gif) |
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 24, 20:10 |
|
|
|
parasiau tokiikoda atmegai16
#include <avr/io.h>
int mygtukas;
mygtukas=0;
int main(void)
{
DDRB=0b11111111;
PORTC=0b11111111;
PORTD=255;
while(1)
{
if(PINC&0b00000001)
PORTB=0;
else
PORTB=0b11111111;mygtukas++;
if(mygtukas==5)
PORTD=255;
}
}
penkis kartus nuspaudus turetu uzsidekti PORTD bet dega iskarto tik ijungus maitinima beto neryskiai galkas galit pataisyt koda
cia dar vienas bet neina sukompiliuoti meta klaidas kas negerai?
#include <avr/io.h>
#define mygtukas = PINC0;// mikrovaldiklio iрvadas
#define counteris =0;
DDRB=255;
PORTB=255;
PORTC=0b11111111;
while(){
if(mygtukas==1){ //jei nuspaustas mygtukas vykdoma рi paprogramл
counteris ++; // didinamas skaitliukas 1 su kiekvienu paspaudimu
if(counteris==1){
//atliekama 1 operacija)
PORTB=0b00000001;
if(counteris==2){
PORTB=0b00000011; //atliekama 2 operacija)
if(counteris==3){
PORTB=255; //atliekama 3 operacija)
counteris=0; // nunulinamas skaitliukas, kad galлtш бvykditi vлl pirmа operacijа.
}
}
}
}
} |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
Re: kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 24, 20:41 |
|
|
|
dariusss rašo: |
parasiau tokiikoda atmegai16
#include <avr/io.h>
int mygtukas;
mygtukas=0;
int main(void)
{
DDRB=0b11111111;
PORTC=0b11111111;
PORTD=255;
while(1)
{
if(PINC&0b00000001)
PORTB=0;
else
PORTB=0b11111111;mygtukas++;
if(mygtukas==5)
PORTD=255;
}
}
penkis kartus nuspaudus turetu uzsidekti PORTD bet dega iskarto tik ijungus maitinima beto neryskiai galkas galit pataisyt koda
cia dar vienas bet neina sukompiliuoti meta klaidas kas negerai?
#include <avr/io.h>
#define mygtukas = PINC0;// mikrovaldiklio iрvadas
#define counteris =0;
DDRB=255;
PORTB=255;
PORTC=0b11111111;
while(){
if(mygtukas==1){ //jei nuspaustas mygtukas vykdoma рi paprogramл
counteris ++; // didinamas skaitliukas 1 su kiekvienu paspaudimu
if(counteris==1){
//atliekama 1 operacija)
PORTB=0b00000001;
if(counteris==2){
PORTB=0b00000011; //atliekama 2 operacija)
if(counteris==3){
PORTB=255; //atliekama 3 operacija)
counteris=0; // nunulinamas skaitliukas, kad galлtш бvykditi vлl pirmа operacijа.
}
}
}
}
} |
kokia klaida meta? toliau pasidomek kas yra button debounce. Be to kodel daugini logiskai su &? |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 24, 21:23 |
|
|
|
visu prima reiktu isisavinti kad kontaktai turi pereinamuosius procesus, todel juos reikia eliminuoti programiskai.
jei gauni kad mygtukas nuspaustas - padarai nedidele pauze ir vel tikrini ar vis dar nuspaustas.
jei viskas ok, atlieki veiksmus ir lauki kada bus atleistas arba kazkiek laiko, jei darai automatini nuspaudimo pakartojima. |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 24, 22:02 |
|
|
|
pirmoj programoj tu main ciklo pradžioj nurodai, kad visame D porte yra vienetai (PORTD=255;) tai jie iškart ir dega. pradžioj rašyk portd=0; o tada cikle jau uždeginėk, ir nepamiršk po mygtuko tikrinimo delay funkcijos, kaip minėjo aukščiau.
Antroje programoje įtariu su define bus blogai, lygybės neturėtų būti, ir if ciklų galiniai figūriniai skliaustai } blogai sudėti, nes realiai į antrą ir trečią būseną niekada nepapulsi ir trūksta main ciklo. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 00:23 |
|
|
|
Kodas: |
#include <avr/io.h>
#define F_CPU 1000000UL // čia nustatai koks tavo dažnis jei nieka neikeitei fuse bit tai bus 1MHz
#include <util/delay.h> // įdedame užlaikymo biblioteką
int mygtukas;
mygtukas=0;
int main(void)
{
DDRB=0b11111111; // Čia nustato kad visas B portas kaip išėjimai
PORTC=0b11111111; // Čia nustatai kad visas C portas įėjimas
PORTD=255; // Čia nustatai kad visas D portas įėjimas
PORTB=0b00000000; // Kai jau nustatei kad port B išėjimai tai tada nustatai kad jie visi būtų loginiai 0
while(1)
{
if(!(PINC&0b00000001)){ // pakeičiau su ! ženklu tada tikrina priešingą reikšmę . Šiuo atvėju ar nuspaustas mygtukas jei taip tai...
PORTD=255;
_delay_ms(200); // užlaikom 200ms kad spėtum pirštą patraukt nuo mygtuko
mygtukas++;
PORTD=0; // kai jau baigės funkcija išjungiam visą portą padarom loginį 0
} // baigiam šitą funkciją ir naudok {} šituos skliaustus kad žinotuk kur prasideda ir kur baigias dar plius jų reikia jei daugiau nei vieną junkciją atlieki
if(mygtukas==5)
PORTD=255;
mygtukas=0; // čia dar dadėjau kad nunulintu reikšmę kad galėtum iš naujo spaudinėti iki 5
}
} |
|
|
Paskutinį kartą redagavo Master_Of_King, 2013 11 25, 00:35. Redaguota 1 kartą |
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 00:34 |
|
|
|
Pakeičiau if mygtuko tikrinimo funkciją nes tau kad ir užsidegtu tie visi portai kai suskaičiuotu iki 5 bet nespėtum to pamatyti nes iškart tikrintu ar mygtukas nuspaustas ir jei ne iškart vėl išjungtų portą todėl tikrinam tik ar yra mygtukas nuspaustas o jei ne tai ir nieko nedarom |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 08:32 |
|
|
|
Master_Of_King rašo: |
Pakeičiau if mygtuko tikrinimo funkciją nes tau kad ir užsidegtu tie visi portai kai suskaičiuotu iki 5 bet nespėtum to pamatyti nes iškart tikrintu ar mygtukas nuspaustas ir jei ne iškart vėl išjungtų portą todėl tikrinam tik ar yra mygtukas nuspaustas o jei ne tai ir nieko nedarom |
kai uzsidegs portai, beliks gesintuvo ieskotis. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 22:03 |
|
|
|
pagaliau pavyko aciu visiems kas padejot stai veikiantis kodas kaika reikejo pakeisti
#include <avr/io.h>
#define F_CPU 1000000UL // čia nustatai koks tavo dažnis jei nieka neikeitei fuse bit tai bus 1MHz
#include <util/delay.h> // įdedame užlaikymo biblioteką
int mygtukas;
mygtukas=0;
int main(void)
{ DDRD=255;
DDRB=0b11111111; // Čia nustato kad visas B portas kaip išėjimai
PORTC=0b11111111; // Čia nustatai kad visas C portas įėjimas
PORTD=255; // Čia nustatai kad visas D portas įėjimas
PORTD=0b00000000;
PORTB=0b00000000; // Kai jau nustatei kad port B išėjimai tai tada nustatai kad jie visi būtų loginiai 0
while(1)
{
if(!(PINC&0b00000001)){ // pakeičiau su ! ženklu tada tikrina priešingą reikšmę . Šiuo atvėju ar nuspaustas mygtukas jei taip tai...
PORTB=255;
_delay_ms(300); // užlaikom 200ms kad spėtum pirštą patraukt nuo mygtuko
mygtukas++;
PORTB=0; // kai jau baigės funkcija išjungiam visą portą padarom loginį 0
} // baigiam šitą funkciją ir naudok {} šituos skliaustus kad žinotuk kur prasideda ir kur baigias dar plius jų reikia jei daugiau nei vieną junkciją atlieki
if(mygtukas==5)
PORTD=255;
//mygtukas==0; // čia dar dadėjau kad nunulintu reikšmę kad galėtum iš naujo spaudinėti iki 5
}
} |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 22:26 |
|
|
|
pastebejau dar viena problema,mygtukas reguoja i nuspaudimo laika
pvz:nuspaudus mygtuka ir palaikius kokias 2s uzidega PORTD.
itariu kad mygtukas++; kyla kol laikau nuspausta mygtuka,kaip viso to isvengti? |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 22:45 |
|
|
|
tada gali įdėti while ciklą vietoj užlaikymo tada jis suks pastoviai kol paspaustas
Kodas: |
#include <avr/io.h>
#define F_CPU 1000000UL // čia nustatai koks tavo dažnis jei nieka neikeitei fuse bit tai bus 1MHz
#include <util/delay.h> // įdedame užlaikymo biblioteką
int mygtukas;
mygtukas=0;
int main(void)
{ DDRD=255;
DDRB=0b11111111; // Čia nustato kad visas B portas kaip išėjimai
PORTC=0b11111111; // Čia nustatai kad visas C portas įėjimas
PORTD=255; // Čia nustatai kad visas D portas įėjimas
PORTD=0b00000000;
PORTB=0b00000000; // Kai jau nustatei kad port B išėjimai tai tada nustatai kad jie visi būtų loginiai 0
while(1)
{
if(!(PINC&0b00000001)){ // pakeičiau su ! ženklu tada tikrina priešingą reikšmę . Šiuo atvėju ar nuspaustas mygtukas jei taip tai...
PORTB=255;
while(!(PINC&0b00000001)){} // kol bus paspaustas mygtukas pastoviai suks šitą ciklą. Kas skliaustuose bus šiuo atveju nieko
mygtukas++;
PORTB=0; // kai jau baigės funkcija išjungiam visą portą padarom loginį 0
} // baigiam šitą funkciją ir naudok {} šituos skliaustus kad žinotuk kur prasideda ir kur baigias dar plius jų reikia jei daugiau nei vieną junkciją atlieki
if(mygtukas==5)
PORTD=255;
//mygtukas==0; // čia dar dadėjau kad nunulintu reikšmę kad galėtum iš naujo spaudinėti iki 5
}
}
|
|
|
Paskutinį kartą redagavo Master_Of_King, 2013 11 25, 22:54. Redaguota 1 kartą |
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 22:49 |
|
|
|
if(!(PINC&0b00000001)){ // pakeičiau su ! ženklu tada tikrina priešingą reikšmę . Šiuo atvėju ar nuspaustas mygtukas jei taip tai...
PORTB=255;
_delay_ms(300); // užlaikom 200ms kad spėtum pirštą patraukt nuo mygtuko
while(!(PINC&0b00000001));
mygtukas++;
PORTB=0; // kai jau baigės funkcija išjungiam visą portą padarom loginį 0
} |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 23:10 |
|
|
|
nevisiskai, logiskai yra klaida, nes veiksmas atliekamas ne nuspaudus, o tik atleidus buttona.
bus tau proga pamastyti ir viska sutvarkyti kaip priklauso. |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2013 11 25, 23:41 |
|
|
|
jo pastebejau tai turetu susitvarkyti besimokant nes programuot mokaus nuo
visisko nulio aciu kad padedat |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kiek kartu nuspaustas mygtukas? |
Parašytas: 2014 02 18, 20:24 |
|
|
|
Panasios problemos ...Kaip tai gali buti ?
Kodas: |
struct
{
...........................
unsigned int liestas :1;
...........................
............................
}flag;
...............
.........
.............
void Touch()
{
unsigned int a;
....
if(a < 200 && flag.liestas == 0) //a = ADC reiksme
{
... // cia turetu but uzsukta viena kart
... // kol nebus paleistas
flag.liestas =1;
}
else {flag.liestas = 0;}
}
|
Problema ta, kad prilietus fiksuojamas ne vienas prisilietimas, bet pastoviai sukasi.... |
|
|
|
|
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Google paieška forume |
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Naujos temos forume |
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr2.gif)
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr1.gif) |