30

c vraique ce que fait rowread n'est pas evident au debut
regarde dans ta boites t'as les dernieres sources...

31

merci, je regarde ça dès que j'ai un peu de temps smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

32

Pfff... J'en ai marre mad

Ça a l'air d'être géré n'importe comment les _rowread !!!
Il suffit que je change les touches (droite et gauche au lieu de clear et home) et ça me colle un bug, mais un différent !

Avec HOME, le test de touche if(touche_appuyée && var==1) était vrai même quand var était différente de 1. Maintenant avec droite et gauche, ça marche, va comprendre.

Par contre le test if(touche1_relachée && touche2_relachée && var==1) est toujours vrai, même quand les touches sont enfoncées...
La je comprends plus, je viens de perdre encore une heure la dessus ça me gonfle ! À chaque fois que je modifie un petit truc ça enleve un bug et ça en rajoute un, mais totalement sans rapport avec la modification que j'ai faite...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

33

C'est vrai que c'est un peu compliqué, _rowread, moi non plus, je n'ai pas très bien compris comment ça marche (mis à part qu'il faut faire if(_rowread(0x3F)&0x1) pour tester si [ESC] est enfoncée).

34

oué ça ok, mais la ou ça merde (et pas qu'un peu !!!) c'est pour tester quand une touche n'est PAS enfoncée.

J'ai essayé le if(!_rowread(0x5F)&0x1), ça marche pas
J'ai essayé le if(_rowread(0x5F)^0x1), ça marche pas non plus
J'ai essayé le if(_rowread(0x5F)&0x1) {} else {...} ça marche toujours pas

J'en ai maaaaaaaaaare sadsadsad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

35

C'est pourtant très simple !

Je vous copie la documentation du compilateur Azur :

unsigned char _rowread (short Masque) 
_rowread permet de lire le clavier "à bas niveau", ce qui correspond à lire le câblage de celui-ci.
En effet, le clavier n'est rien de plus qu'une matrice de fils, organisés en lignes et en colonnes, les intersections de fils correspondant chacune à une touche.
Avec cette fonction, il vous faut préciser une ligne à "analyser", et elle vous renverra les valeurs des touches sur la ligne correspondante.

Paramètres

short Masque
 valeur codée sur deux octets, de type entier, qui correspond au masque d'une ligne, permettant de déterminer la ligne que vous souhaitez "lire". 

Retour

unsigned char
 valeur entière non signée, codée sur 1 octet. 

Matrice clavier sur TI-89 :

         |                             COLONNES
  +------+-----------------------------------------------------------------------
  | BITS |  7        6        5        4        3        2        1        0
--+------+-----------------------------------------------------------------------
L |   0  | alpha    Diamond  Shift    2nd      Right    Down     Left     Up
I |   1  | F5       CLEAR    ^        /        *        -        +        ENTER
G |   2  | F4       BckSpc   T        ,        9        6        3        (-)
N |   3  | F3       CATLG    Z        )        8        5        2        .
E |   4  | F2       MODE     Y        (        7        4        1        0
S |   5  | F1       HOME     X        =        |        EE       STO      APPS
  |   6  |                                                                ESC
Matrice clavier sur TI-92+ :

         |                             COLONNES
  +------+-----------------------------------------------------------------------
  | BITS |  7        6        5        4        3        2        1        0
--+------+-----------------------------------------------------------------------
  |   0  | Down     Right    Up       Left     Hand     Shift    Diamond  2nd
  |   1  | 3        2        1        F8       W        S        Z
L |   2  | 6        5        4        F3       E        D        X
I |   3  | 9        8        7        F7       R        F        C        STO
G |   4  | ,        )        (        F2       T        G        V        Space
N |   5  | TAN      COS      SIN      F6       Y        H        B        /
E |   6  | P        ENTER2   LN       F1       U        J        N        ^
S |   7  | *        APPS     CLEAR    F5       I        K        M        =
  |   8  |          ESC      MODE     +        O        L        Theta    BckSpc
  |   9  | (-)      .        0        F4       Q        A        ENTER1   -
ENTER2 est la touche "ENTER" localisée près du curseur multidirectionnel.
ENTER1 correspond aux deux autres.
 

Pour détecter si une touche est ou non pressé, procédez de la manière suivante :
1) repérer la ligne sur laquelle la touche est située, en partant du bas, puis placer un '0' dans la suite de bits (tous à un) correspondante. Par exemple, sur TI-89, pour lire la touche [9], il vous faudra utiliser comme masque ceci : 0b1111011
2) repérer la colonne sur laquelle la touche est située, en partant de la gauche, puis placer un '1' dans la suite de bits (tous à zéro) correspondante. Pour continuer avec notre exemple, la colonne sur laquelle la touche [9] est situé aura pour valeur (masque) ceci : 0b00001000
3) lire la touche. Pour cela, il faut utiliser la fonction _rowread de la façon suivante :

_rowread(masque_ligne) & masque_colonne
Ainsi, en conservant notre exemple, il faudra utiliser :

_rowread(0b1111011) & 0b00001000
4) la valeur retournée par la fonction _rowread sera différente de 0 si la touche était pressée au moment où la lecture est effectuée. Cette fonction sera donc quasiment toujours utilisée dans des boucles conditionnelles.

 

Remarque :
La désactivation des interruptions automatiques n°1 et n°5 est particulièrement recommandée pour cette fonction. Pour information, ces désactivations permettent de gagner jusqu'à 50% de vitesse dans l'exécution de certains programmes !
Celà dit, préférez le détournement à la désactivation, si votre programme affiche en niveaux de gris. Détournez toujours ces interruptions automatiques avant l'activation des niveaux de gris.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

36

OK, pour ça, j'ia compris, enfin dans les progs où j'ai utilisé _rowread, je procédais comme ça pour savoir quel code correspondait à chaque touche.
Mais ce que j'aimerais savoir, c'est plus précisément comment agit la fonction _rowread.

37

Elle écrit et lit sur les ports associés à la matrice du clavier.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

38

Oui d'accord mais bon ça c'est la même chose que la doc de TIGCC, ça m'aide pas vraiment... Je sais comment on utilise _rowread pour tester si une touche est appuyée, mais je n'arrive pas à tester si une touche n'est PAS appuyée (voir post #33)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

39

Le but est de forcer l'utilisateur à alterner 2 touches (rapidement, comme dans Sydney 2000 pour ceux qui connaissent). La variable int_key vaut initialement 1.
Voilà les deux principaux essais que j'ai fait et leurs résultats :

if(_rowread(0x7E)&0x2 && int_key==1) {int_new+=4; int_key=2;}
else if(!_rowread(0x7E)&0x2 && int_key==2) int_key=3;
if(_rowread(0x7E)&0x8 && int_key==3) {int_new+=4; int_key=4;}
else if(!_rowread(0x7E)&0x8 && int_key==4) int_key=1;

> L'appui sur la 1ere touche (gauche) est compté, mais après on est bloqué. Aucune des deux touches ne marche ensuite.


if(_rowread(0x7E)&0x2 && int_key==1) {int_new+=4; int_key=2;}
if(_rowread(0x7E)^0x2 && int_key==2) int_key=3;
if(_rowread(0x7E)&0x8 && int_key==3) {int_new+=4; int_key=4;}
if(_rowread(0x7E)^0x8 && int_key==4) int_key=1;

> La touche gauche fonctionne correctement, mais pas l'autre (droite). En appuyant plusieurs fois uniquement sur droite, ça marche, pas besoin d'appuyer sur HOME une fois sur 2.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

40

Ben quand elle n'est pas appuyée, _rowread(masque_ligne) & masque_colonne renvoit 0, tandis que quand elle est appuyée elle renvoie masque_colonne !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

41

Bah alors théoriquement le !_rowread devrait marcher, or ce n'est pas le cas sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

42

Bon ça y est j'ai (enfin) comprit... Il ne faut pas écrire :

if(!_rowread(0x7E)&0x2 && var==1)

Mais :

if(!(_rowread(0x7E)&0x2) && var==1)


Pfouuuuu sick
J'en ai chié, rien que pour ça sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

43

ouarf Bob, j'aurais du voir ce topic plus tôt, j'avais la réponse à ton prob dès le début pour les parenthèses après le "!" winkwink
j'avais moi aussi fait cette erreur, mais squale m'avait vite dit de mettre des parenthèses, sinon c'est sur qu'on peut chercher un moment. winkgrin
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

44

j'avais la réponse à ton prob dès le début
> Mon cul ouais ! T'est passé sur le forum plusieurs fois depuis que j'ai posté ce truc... Et Squale n'a pas pu me répondre non plus, pourtant il a essayé (cf. début du topic)

Alors Pim-le-petit-génie la prochaine fois t'essaiera d'aller plus vite bang grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

45

Bob> moué... bobn, je m'écrase sad mais au début, j'avais pas pigé le pb exact je crois...


Thibaut> le texte que tu as posté me dit quelque chose grin
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

46

moué... bobn, je m'écrase sad mais au début, j'avais pas pigé le pb exact je crois...

Je ne te repproche rien du tout smile
J'avais probablement pas bien expliqué, et puis au moins tu as essayé, donc merci pour ça smile
Je critique juste Pim qui arrive une fois que tous les problèmes sont résolus et qui annonce fièrement "Ahah facile je connaissait la réponse mais je ne l'ai pas donnée parceque..." roll

Bref...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

47

je n'ai pas dit que tu me reprochai quelque chose.
et je n'ai pnullement mal pris tes paroles, sinon, ma réaction n'eut pas été celle-ci smile
de rien, pour le peu que j'ai pu faire smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

48

Si je peux te donner un conseil ça serait une bonne idée de mettre une petite note la dessus dans ton tuto, qq chose dans le genre :

Attention : Pour savoir si une touche est relachée, il faut utiliser if(!(_rowread(0x00)&0x00)) au lieu de if(!_rowread(0x00)&0x00)

(enfin si ce n'est pas déjà fait... la version que j'avais date un peu...)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

49

en effet, ce n'est pas une mauvaise idée.
et ce n'est pas fait non plus sad
qd, dans ma relecture, j'en arriverai à cette section, je le mettrai (en espérant que j'y pense encore)

(je devrai y penser : je l'ai mis dans le fichier todo)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

50

squale92
a écrit : Thibaut> le texte que tu as posté me dit quelque chose grin


Hé hé wink Bon quand est-ce que je m'y remet à mon compilo ? grin

Bob 64 : quand même, c'est évident qu'il faille mettre des parenthèses !!? Comment veux-tu que le compilateur devine ce que tu souhaites complémenter ! triso
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

51

Thibaut> tu t'y remet qd tu veux smile
et puis, d'ici quelques semaines, c les vacances... je trouverai bien un peu de temps pr me pencher sur la doc
(j'ai pas mal de boulot av les vacs... mais pdt, ça devrtairt allersmile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

52

Bob 64 a écrit :
Attention : Pour savoir si une touche est relachée, il faut utiliser if(!(_rowread(0x00)&0x00)) au lieu de if(!_rowread(0x00)&0x00)


Les 2 sont faux!
Si on fait un &0x00, on ne teste plus rien!

C'est if (!_rowread(0)) tout simplement qu'il faut mettre!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

53

arf... va falloir corriger ça dans mon fichier todo smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

54

Kevin > J'ai mit n'importe quoi, ce qui est important c les parentèses pas le rowread grin

Thibaut > Quand même, c'est évident qu'il faille mettre des parenthèses
Bah non... Pour moi _rowread(0x7E)&0x2 c'est un seul bloc, donc en mettant un ! devant ça met la négation pour tout ce bloc... Enfin bon à force de l'utiliser tu as surement l'habitude, mais moi c'est bien la dernière chose à laquelle j'ai pensé !
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

55

Halàlà ces newbies qui prennent les compilateurs pour des magiciens magic

squale92 : il faudrait que tu parles de la priorité des opérateurs dans ton tutoriel, ça éviterait ce genre de questions wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

56

heu Bob >> roll, je comprenais peut-être mal ton problème, mais sache qu'en lisant ton bout de code, j'allais tout de suite te conseiller de mettre des parenthèses avant le "!" ... rollroll après on aurait vu si ça changeait qq chose, mais en tt cas en regardant ce bout de code, j'ai pensé à mettre ça, peut-être que ton problème n'était pas celui là, mais déjà ces parenthèses auraient changée qq chose ... mais j'ai ensuite vu que tu les avais mis, et c'est tout.
T'est passé sur le forum plusieurs fois depuis que j'ai posté ce truc...


je ne vais pas voir tous les topics désolé à chaque fois qu'ils se créent ... sadwink

si je n'ai pas donné la réponse avant, c'est seulement parce que je suis venu sur ce topic pour la 1ère fois lors de mon 1er post, après si tu crois que je fais le malin, c'est ton problème ...
De plus mon post n'était ni moqueur, ni ironique (dsl si tu l'as pris comme ça), alors désolé de t'avoir mis dans ces états dans ce cas ... sad
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

57

je suis desole mais ^ marche, tu n'as pas du regarder mon, source

58

Halàlà ces newbies qui prennent les compilateurs pour des magiciens
rollrollroll
Et en plus oui, ça me semblerait normal que le compilateur comprenne ça grin

Bon l'opérateur "&" est prioritaire sur "!" ? J'aurais au moins apprit ça...

De plus mon post n'était ni moqueur, ni ironique
> Le mien si grin
Faut pas le prendre comme ça, je déconne... De toute façon c pas bien grave vu que j'ai trouvé la solution tout seul qq temps après smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

59

grin
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

60

Thibaut > bang grin
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^