π
<-

Aide Ti nspire CX CAS & Programmation

:32tins: :32tinsktpb: :32tinsktpn: :32tinscas: :32tinstpkc: :32tinstpktpb: :32tinstp: :32tinscastp: :32tinscmc: :32tinscx: :32tinscxcas:

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Loulou 54 » 09 Aug 2012, 15:20

Ah j'ai toujours pas mis à jour mon logiciel ! xD Par contre ne mets pas à jour ta calto si tu veux garder Ndless, mais je pense que tu le sais. ;)

Et une autre chose, si l'ordre des fonctions n'a pas d'importance comment le programme sait qu'il doit commencer par tel chose et finir par une autre?


Justement, la programmation en Lua sur Nspire est événementielle. Il faut que tu te fasses à cette logique assez particulière qui est totalement différente du Basic ou du C et de la plupart des langages..

En effet, tu as remarqué que programmer en Lua a un gros avantage : c'est totalement intégré à l'API Nspire, tu peux gérer plusieurs fenêtres en même temps, ouvrir le scratchpad alors que ton script est en fonctionnement !
Cela est rendu possible par cette logique événementielle.

Les événements, events, sont toutes les fonctions on.xxxxx que tu peux retrouver ici :
http://wiki.inspired-lua.org/Category:Events

Elles sont appelées lorsque l'événement auquel elles répondent se produit.
Par exemple, la fonction on.arrowKey() est appelée si une touche fléchée est appuyée, on.create est appelée lors de la création du script, ... (oh f**k, je viens de voir qu'elle est obsolète dans l'OS 3.2 !! Fait chier, je l'ai utilisée dans tous mes programmes Lua !! :( )

Et l'une des plus importante est le on.paint(gc) qui te permet de dessiner à l'écran. Elle est appelé lorsque l'écran doit être rafraîchi, en particulier, tu peux le demander via la commande platform.window:invalidate()

Aussi, pour comprendre comment sont gérés les événements, jette un œil à ce diagramme :
http://wiki.inspired-lua.org/Life_Cycle

Enfin, ça m’amène justement au problème d'une fonction Pause (qui n'en est pas un) : il n'y a pas d'équivalent.

En effet, une fonction Pause bloquerait l'exécution du programme et donc ce côté "multi-tâche" dont je te parlais avant ne serait pas possible.

Mais en fait, ton programme se met tout seul en pause lorsqu'aucun événement est appelé, tout simplement ! :)

En tout cas, pour toutes les fonctions importantes du Lua sur Nspire, c'est ici qu'il faut regarder :
http://wiki.inspired-lua.org/Main_Page

C'est le wiki, la documentation de Inspired Lua. ;)

Et si tu cherches des fonctions plus spécifiques au Lua lui même, (les fonctions de la catégorie math ou string ou table, ...) alors réfère toi au manuel du langage Lua :
http://www.lua.org/manual/5.1/manual.html

Voilà, je pense t'avoir tout dit ce qu'il y a d'important à comprendre pour pouvoir commencer ! :)
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Levak » 09 Aug 2012, 15:25

Et une autre chose, si l'ordre des fonctions n'a pas d'importance comment le programme sait qu'il doit commencer par tel chose et finir par une autre?


Le Lua intégré à la TI-Nspire est évènementiel. C'est le concept le plus important à comprendre et celui qu'il faut considérer avant toutes choses (par exemple, avant même d'écrire la première ligne).

Ce que ça veut dire ? Principalement que justement, c'est la Nspire qui appelle certaines fonctions à un moment donné et dans un ordre prédéfini par la boucle évènementielle de l'OS. Autrement dit, tu n'as pas le choix dans l'ordre des fonctions appelées.
Si tu poses cette question c'est que tu n'as pas vu http://www.inspired-lua.org/2011/05/con ... s/?lang=fr ou alors est passé trop vite dessus.

eykxas wrote:le gc:drawString est équivalent à la commande "output" en basic. maintenant je cherche d'autre équivalence.
J'aimerai connaitre l'équivalent de "Pause" (ou alors créer la fonction qui ferai pareil)

gc:drawString est en effet une sorte d'équivalent de output, mais souviens toi, tu es en face d'un langage de programmation évènementiel. tu ne pourras pas utiliser les fonctions de dessin ailleurs que dans la fonction on.paint() car cette fonction on.paint() est appelée par la Nspire avec l'argument gc qui signifie GraphicContext, autrement dit, l'objet qui te permet de dessiner. Tu ne dispose pas de cet objet ailleurs, il faut donc le passer en argument aux fonctions auxiliaires que tu exécutes depuis le on.paint.






Si le tuto ne te dis toujours rien ou que le concept t'échappe, je peux essayer de changer les mots, les expressions :

La Nspire appelle des fonctions, si elle existent, dans un ordre précis que tu ne peux pas modifier.
L'ordre est simple : on.construction() lors de l'ouverture, on.resize() lorsque la fenêtre est resizée, on.enterKey() lorsque tu appuies sur Enter, et enfin, par exemple, on.paint() lorsque l'écran doit être redessiné. Ces fonctions sont appelés des events.

Tu dois définir ces fonctions (pas toutes forcément hein) si tu veux espérer faire quelque chose.

Tu ne dois en aucun cas bloquer le flux exécutif (ie. pas de Pause, ni de boucle pour espérer qu'une variable extérieure change en cours de route, si tu fais ça, c'est la Nspire au complet que tu figes)

Tu dois dire quand l'écran doit être raffraichi avec platform.window:invalidate(), par exemple dans l'appel de on.enterKey().
Note : faire un platform.window:invalidate() dans le on.paint() est inutile, il est overridé à la fin de la fonction on.paint() par la Nspire
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Loulou 54 » 09 Aug 2012, 15:28

Ah bah zut on a fait quasiment le même discours Levak ! :bj:
Mes programmes => ici !
User avatar
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 1.6%
 
Posts: 1985
Images: 8
Joined: 02 Aug 2009, 00:00
Location: 54, près de Metz
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingé Logiciel chez Amazon

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Levak » 09 Aug 2012, 15:29

Loulou54 wrote:Par exemple, la fonction on.arrowKey() est appelée si une touche fléchée est appuyée, on.create est appelée lors de la création du script, ... (oh f**k, je viens de voir qu'elle est obsolète dans l'OS 3.2 !! Fait chier, je l'ai utilisée dans tous mes programmes Lua !! )

Ah ah, tu n'as pas été le seul à gueuler. Mets un platform.apiLevel = "1.0" et ça sera bon.
Sinon, si tu veux les fonctions de la 3.2, ya des hacks assez bizarres pour avoir les bonnes valeurs de platform.window:width()/height(), il faut mettre ta fonction de paint dans "onpaint" par exemple et faire ça :
Code: Select all
function onpaint(gc)
   --le vrai paint()
end
function on.paint(gc)
   --init de variables dépendant de platform.window:width()/height()
   on.paint = onpaint
end
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Aide Ti nspire CX CAS & Programmation

Unread postby eykxas » 09 Aug 2012, 15:37

Très bien, donc si j'ai bien compris. Dans mon script lua, je définis tout les outils (fonctions) nécessaire à mon programme, quelque soit l'ordre puisque c'est la nspire qui défini elle même cet ordre.

En revanche on peut forcer l'utilisation de fonction (par exemple platform.windows:invalidate() ) mais ça doit rester dans le cadre de "Event loop" si je suis le cycle de vie.


J'espère avoir compris. Mais du coup il faut que je repense totalement mon programme et je ne sais pas comment l'adapter à de l’évènementiel.
User avatar
eykxas
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 16%
 
Posts: 12
Joined: 09 Aug 2012, 00:09
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: BTS SIO

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Levak » 09 Aug 2012, 15:44

eykxas wrote:Très bien, donc si j'ai bien compris. Dans mon script lua, je définis tout les outils (fonctions) nécessaire à mon programme, quelque soit l'ordre puisque c'est la nspire qui défini elle même cet ordre.


Si ce que tu appelles "outils" sont toutes les fonctions, ou events, du type on.xxxxxx alors oui, tu as tout compris.
Sinon, si tu as pensé "trop long", rassures toi, tu peux très bien appeler tes propres fonctions depuis les fonctions du type on.xxxxx (tu peux même appeler toi même les fonctions du type on.xxxxxx).

Un exemple :

Code: Select all

function on.resize(w, h)
   ww = w
   hh = h
end

function on.paint(gc)
   dessinerUnCarre(gc)
end

function dessinerUnCarre(gc)
    local cx = ww/2
    local cy = hh/2
    gc:fillRect(cx-50, cy-50, 100, 100)
end

Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Aide Ti nspire CX CAS & Programmation

Unread postby eykxas » 09 Aug 2012, 16:03

Je pense avoir compris le truc.

Par exemple je désire créer un menu et un sous-menu, à chaque fois l'utilisateur appuiera sur une touche correspondant à l'entrée de menu / sous-menu.

Donc je créer des fonctions, par exemple :
Code: Select all
function menu1(gc)
....
end 


Code: Select all
function menu2(gc)
....
end


et ainsi de suite.

Dans mon on.paint(gc) j'aurais :
Code: Select all
function on.paint(gc)
    menu1(gc)
    menu2(gc)
...
end


mais comment faire pour afficher le menu 1 puis lors de l'appui sur une touche passer au menu 2 ? sans interférer avec le reste. Est-ce que ce serai comme des étiquettes ? la calculatrice affiche le menu en question seulement lorsque la touche est appuyé ? (si il y a une condition)
User avatar
eykxas
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 16%
 
Posts: 12
Joined: 09 Aug 2012, 00:09
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: BTS SIO

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Levak » 09 Aug 2012, 16:14

Tu as bien compris le concept et en a trouvé le problème principal que l'on rencontre lorsque qu'on passe d'un langage impératif à un langage évènementiel.

Les solutions, il en existe beaucoup. La meilleure est celle d'utiliser les classes d'objet.
C'est peut être un peu trop poussé pour le moment alors voici la solution simple :

Code: Select all
menu = 1

function on.enterKey()
   if menu == 1 then
      menu = 2
   elseif menu == 2 then
      menu = 1
      print("menu2") -- note que ceci n'affiche quelque chose que dans la console du SDK
   end
   platform.window:invalidate()
end

function on.paint(gc)
   if menu == 1 then
      menu1(gc)
   elseif menu == 2 then
      menu2(gc)
   end
end


Ce que tu cherches à faire est exactement le principe du Screen Manager http://www.inspired-lua.org/2012/02/how ... r/?lang=fr
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: Aide Ti nspire CX CAS & Programmation

Unread postby eykxas » 09 Aug 2012, 16:28

J'avais regarder le Screen Manager, mais je ne suis pas arrivé à faire un code fonctionnel. Mais peut être qu'avec ton exemple j'y arriverai.

Et la dernière chose qu'il me faudrait c'est l'affichage d'un splash screen pendant un temps donné. je sais que je dois utiliser la fonction on.timer() mais je n'ai pas saisi le principe de cette dernière.

(j'ai déjà regarder le tuto avec le Hello World utilisant on.timer() )
User avatar
eykxas
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 16%
 
Posts: 12
Joined: 09 Aug 2012, 00:09
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: BTS SIO

Re: Aide Ti nspire CX CAS & Programmation

Unread postby Levak » 09 Aug 2012, 16:41

eykxas wrote:J'avais regarder le Screen Manager, mais je ne suis pas arrivé à faire un code fonctionnel. Mais peut être qu'avec ton exemple j'y arriverai.

Le Screen Manager utilise une notion assez complexe lorsqu'on la rencontre la première fois : une pile (pas une batterie hein, une pile d'assiettes). Ensuite, il utilise les classes d'objet, donc je doute que ça te soit très clair pour toi pour le moment.

Ce qui me trouble par contre, c'est que tu as l'air d'avoir compris ici après plusieurs mises au points, mais dit constamment "j'ai déjà vu ce tutoriel".
As-tu ressayé depuis que tu as acquis plus de connaissances sur le sujet ? =)

Et la dernière chose qu'il me faudrait c'est l'affichage d'un splash screen pendant un temps donné. je sais que je dois utiliser la fonction on.timer() mais je n'ai pas saisi le principe de cette dernière.

(j'ai déjà regarder le tuto avec le Hello World utilisant on.timer() )


Code: Select all
t = 200
current_screen = 1
timer.start(0.01)   -- lancement du timer
function on.timer()  -- cette fonction est appelée toutes les 0.01 secondes
   if t < 0 then
      current_screen = 2
      timer.stop()
   else
      t = t-1
   end
   platform.window:invalidate()
end

function on.paint(gc)
gc:drawString(t, 0, 0, "top") -- pour debugger et voir ce qu'il se passe.
   if current_screen == 1 then
      --- le spash
   elseif current_screen == 2 then
      -- le contenu
   end
end

function on.enterKey()
   if current_screen == 1 then
     current_screen = 2
   elseif current_screen == 2 then
      -- autre chose ...
   end
   platform.window:invalidate()
end
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

PreviousNext

Return to Problèmes divers / Aide débutants

Who is online

Users browsing this forum: ClaudeBot [spider] and 12 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1049 utilisateurs:
>1010 invités
>33 membres
>6 robots
Record simultané (sur 6 mois):
7582 utilisateurs (le 25/06/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)