Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: taste  (Citit de 3880 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« : Noiembrie 11, 2007, 18:12:27 »

Lucrez la un programel care se joaca cu portul pararel, si anume: la apasarea unei taste imi scoate tensiune pe pinul care vreau eu. programul meu e simplut si arata in genul acesta:

switch (getch())
         {
          case 'w':outportb(0x378,0x01);
                       break;
          case 's':outportb(0x378,0x02);
                       break;
         etc...
         }


problema este urmatoarea. eu vreau sa imi scoata tensiune numai cat timp tin apasata tasta. programul construit in genul celui de mai sus scoate tensiune incontinuu, chiar si dupa ce iau degetul de pe tasta. cum as putea face in asa fel incat sa faca acea instructiune numai cat timp am degetul pe tasta? Daca vreau sa lucrez cu sagetile trebuie folosita functia bioskey()? Va rog daca se poate sa ma ajutati si sa ma lamuriti in privinta problemei mele. Pana acum lucram doar probleme, este oarecum primul program care nu se rezuma la o problema de info. Ms mult.
Memorat
skyel
Nu mai tace
*****

Karma: 29
Deconectat Deconectat

Mesaje: 263



Vezi Profilul
« Răspunde #1 : Noiembrie 11, 2007, 19:55:39 »

Nu am mai lucrat de acum 3 ani cu chestii d-astea. Dar pentru faza cu tastele poti sa incerci functia kbhit() parca (nu mai tin minte exact cum se foloseste dar stiu ca eu o utilizam in mai toate prog de genul asta), iar pentru sageti incearca de 2 ori getch()  Thumb up (a doua oara garantez eu ca iti va returna ceva in codul ascii).
Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #2 : Noiembrie 11, 2007, 20:49:33 »

am tot incercat si cu functia kbhit() dar nu am ajuns la un rezultat multumitor. daca ar putea cineva sa imi dea un exemplu sa ma lamuresc. ms .
Memorat
skyel
Nu mai tace
*****

Karma: 29
Deconectat Deconectat

Mesaje: 263



Vezi Profilul
« Răspunde #3 : Noiembrie 11, 2007, 21:38:26 »

incearca ceva de genu:
Cod:
while(tst!=1000)
 {
 tst=0;
 if (kbhit())
   
    tst=getch(); // aici iei valoare in ascii a tastei noi, si daca folosesti sageti iti va da 0,
                      //  si mai trebuie inca o data tst=getch(), ca sa obtii si valorile sagetilor
       
 switch(tst)
      {
       instructiune1
      }
   instructiune2;
 }
instructiune1= ceea ce vrei tu sa faci
instructiune2= anulezi instructiunea 1, ca la noul ciclu de while sa porneasca totul ca si nou Tongue

P.S.: daca vrei sa mai si iesi din while ar treb sa fie la inceput tst!=27 (esc)
« Ultima modificare: Noiembrie 11, 2007, 21:42:04 de către Ghitulete Razvan » Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #4 : Noiembrie 11, 2007, 22:36:55 »

eu aprind niste leduri cu programu asta. am incercat si varianta zisa de tine insa e la fel. nu ramane aprins doar cat timp tin apasat pe  o tasta ci ramane aprins si dupa ce iau mana de pe tasta(defapt palpaie foarte repede in loc sa se stinga ledul). nu prea am idee cum sa combin functia kbhit astfel incat sa faca ce vreau eu.  Brick wall daca stie cineva. in fond e simpla ideea: cum fac sa imi executa ceva numai cat timp tin apasata o tasta. trebuie sa stie vre-unu care e mai rasarit decat mine Thumb down
Memorat
skyel
Nu mai tace
*****

Karma: 29
Deconectat Deconectat

Mesaje: 263



Vezi Profilul
« Răspunde #5 : Noiembrie 11, 2007, 23:00:31 »

incercasi la instructiune2 cu:
outportb(0x378,0x00)?
Cod:
while(tst!=1000)
 {
 tst=0;
 if (kbhit())
    {
    tst=getch();
    switch(tst)
        {
        instructiune1
       }
    }
 else
    outportb(0x370,0x00);
 }
daca nici asa nu merge, ori faci tu o greseala pe undeva prin implementare, ori schimbi compilatorul.

P.S.: Eu scrisai un prog pe structura de mai sus cu sound in loc de outport si merge perfect.
« Ultima modificare: Noiembrie 11, 2007, 23:25:19 de către Ghitulete Razvan » Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #6 : Noiembrie 12, 2007, 19:41:36 »

nu stiu cum de iti merge tie:| nu ar trebui sa fie o structura repetitiva acolo? deoarece mie imi trebuie sa scoata tensiune cat timp e apasata tasta. ar trtebui cred ca ceva recursiv daca nu folosesc nimic repetitiv. nu stiu ce sa zic...pare simplu dar nu imi iese nicicum. nu as vrea sa schimb compilatorul. folosesc borland c++ 3.1. daca mai are cineva vreo idee il rog sa posteze aici. merci.
Memorat
skyel
Nu mai tace
*****

Karma: 29
Deconectat Deconectat

Mesaje: 263



Vezi Profilul
« Răspunde #7 : Noiembrie 12, 2007, 19:59:31 »

Pai pentru aia e while, iar mie mi-a mers perfect pe borland. Ca in linux nu stiu echivalentul lui conio.h.
Cod:
#include<stdio.h>
#include<conio.h>
#include<dos.h>

int main()
    {
    int tst;
    while (tst!=27)
          {
          tst=0;
          if (kbhit())
             {
             tst=getch();
             switch (tst)
  {
  case 97:
{
sound(440);
break;
}
  case 98:
{
sound(120);
break;
}
  default:
printf("wrong key!");
  }
    }
else
nosound();
}
    return 0;
    }
Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #8 : Noiembrie 13, 2007, 19:53:16 »

la sunete se pare ca merge. dar daca folosesc outportb imi ard intermitent ledurile si cu intensitate foarte mica, deci nu le pot folosi.
Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #9 : Noiembrie 14, 2007, 22:19:53 »

acuma deviez putin de la subiect:P cum as putea sa deschid un din C un program? exista functii pentru asta? eu am nevoie la selectarea unei optiuni sa mi se deschida un alt program .exe si sa ruleze programul ala pana dau eu ESC. sper ca ati inteles ce vreau sa zic. merci.
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #10 : Noiembrie 14, 2007, 22:27:16 »

In stdlib exista functia system(); ... in linux sigur merge, nu stiu si in windows, dar fiind in stdlib cred ca exista. Programul .exe de-l rulezi trebuie sa se opreasca el la ESC... daca vrei sa opresti programul apelat din programul apelant atunci cand apesi esc, atunci cred ca ai nevoie de threaduri si asta stiu sa poti face in windows, iar in linux nu stapanesc bine functiile, desi exista sigur pe net despre asa ceva !

Bafta!
Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #11 : Noiembrie 14, 2007, 22:58:50 »

se pare ca nu merge in windows. exista ceva care sa faca asta si in windows?
Memorat
Dastas
Vorbaret
****

Karma: 11
Deconectat Deconectat

Mesaje: 170



Vezi Profilul
« Răspunde #12 : Noiembrie 14, 2007, 23:22:33 »

Vezi functia shellexecute

http://www.decompile.com/cpp/faq/run_other_programs.htm
http://www.codeproject.com/system/newbiespawn.asp
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #13 : Noiembrie 15, 2007, 12:34:08 »

Daca programezi pentru DOS (which you shouldn't!) poti sa folosesti intreruperi BIOS sau direct inportb().

Documentul asta pare sa ofere o explicatie decenta:
http://guideme.itgo.com/atozofc/ch22.pdf



Heh... the good old days  Surf, dude!
Memorat
lamez0r
Strain


Karma: -4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #14 : Noiembrie 15, 2007, 18:50:37 »

programez pentru windows si as vrea sa folosesc Borland C++ 3.1. Daca aveti vreo solutie la problema mea in Borland C++ 3.1 spuneti-mi pls. Merci mult Thumb up
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines