π
<-

News 2025
August (4)
June (5)
May (9)
April (12)
March (5)

News 2024
August (6)
July (4)
June (8)
May (6)
April (11)
March (6)

News 2023
August (6)
July (6)
June (10)
May (12)
April (14)
March (11)

News 2022
October (11)
August (4)
July (4)
June (3)
May (8)
April (5)
March (6)

News 2021
August (4)
July (12)
June (6)
May (7)
April (6)
March (4)
January (10)

News 2020
August (6)
July (14)
June (11)
May (8)
April (19)
March (4)

News 2019
August (2)
July (3)
June (4)
May (8)
April (3)
March (5)

News 2018
August (7)
June (11)
May (5)
April (13)
March (12)

News 2017
August (5)
July (6)
June (3)
May (3)
April (20)
March (11)
January (10)

News 2016
August (5)
July (5)
June (4)
May (3)
April (6)
March (2)

News 2015
August (6)
July (6)
June (5)
May (4)
April (12)
March (8)

News 2014
August (6)
July (7)
June (3)
May (1)
April (2)
March (6)

News 2013
August (6)
July (14)
June (1)
May (5)
April (1)
March (1)

News 2012
August (3)
July (3)
June (3)
April (2)
March (3)

News 2011

Module Arduino pour charger scripts sur fx-92+ Spé Collège

New postby critor » 11 Jan 2022, 12:15

13440
Sortie pour la rentrée 2018, la formidable fx-92+ Spéciale Collège a su gagner le cœur des collégiens et de leurs enseignants.

De façon toujours exclusive à ce jour, il s'agit en effet d'un modèle programmable dans un langage de tracé relatif comparable au Scratch ou encore au Logo.

Nombre de collégiens et collégiennes rivalisent d'ingéniosité et de talent pour y tracer de superbes chefs-d'œuvre. Rappelons d'ailleurs à ce sujet que le concours de dessins de Noël 2021 par Casio est prolongé jusqu'au 31 janvier, avec de superbes lots à gagner dont 2 consoles de jeux Nintendo Switch.

Mais tout aussi géniale soit-elle, revers de la médaille la fx-92+ Spéciale Collège souffre également de 3 gros inconvénients dans ce contexte :
  • D'une part, les 1,7 Ko de mémoire disponibles sont partagés entre les différentes applications.
    C'est-à-dire que si tu saisis un script dans l'application Algorithmique puis changes d'application, ton script sera immédiatement perdu et devra être intégralement resaisi pour être utilisé.
    Si c'est un script dont tu peux avoir fréquemment besoin cela deviendra vite lourd pour toi.
    11394
  • De plus, l'application Algorithmique ne gère qu'un seul et unique script à la fois.
    Si il y a plusieurs scripts dont tu peux avoir fréquemment besoin, citons par exemple pour atteindre plus rapidement le pluriel notre traceur de graphiques, alors tu devrais sans arrêt effacer le script courant et resaisir le nouveau script nécessaire.
  • D'autre part, la fx-92+ Spéciale Collège n'a pas non plus de mémoire persistente.
    C'est-à-dire que l'intégralité des données dont le script courant que tu as éventuellement saisi seront perdues à la prochaine extinction de la calculatrice.
    Et ne crois pas qu'il suffise de ne pas éteindre la calculatrice, car celle-ci le fera toute seule après un certain délai d'inutilisation, réglé par défaut à 10 minutes et modifiable à 60 minutes.
L'émulateur disponible pour ordinateur a un comportement similaire ; toutes les données sont perdues à sa fermeture.

Il ne s'agit pas de bugs, ce sont des choix effectués sciemment par le constructeur, souhaitant éviter que la calculatrice puisse servir à introduire des données personnelles interdites aux examens en France, et donc éviter à avoir à ajouter un mode examen ainsi qu'une diode associée qui augmenteraient les coûts et donc le prix.

Précisons que nous ne sommes pas d'accord. Objectons en effet que :
  • L'application Algorithmique ne permet pas de saisie libre. En effet elle ne prend pas la forme d'un éditeur de texte, mais un éditeur de blocs. Les éléments à insérer dans le script sont à choisir dans un menu ; on ne peut pas saisir ce que l'on veut.
  • D'autre part, nous ne disposons même pas d'un clavier alphabétique sur ce modèle. Nous n'avons accès qu'à 9 lettres de l'alphabet : A, B, C, D, E, F, M, X et Y. Bon courage pour réussir à saisir quelque chose d'exploitable avec ça...

9803La fx-92+ Spéciale Collège ne conserve donc pas les données, mais par contre, elle permet de les exporter. Il te suffit de taper
SECONDE
OPTN
pour un obtenir un QR Code reprenant l'ensemble des données de l'application courante.

Le QR Code contient en pratique l'adresse d'une visionneuse en ligne sur le site de Casio, avec les données mémoire fournies via un paramètre dans une écriture hexadécimale.

Faut-il encore pouvoir décoder le paramètre hexadécimal en question, et justement dans le contexte de l'application Algorithmique nous avons déjà documenté l'ensemble des jetons pouvant le composer.

Par contre si la calculatrice permettait ainsi officiellement de conserver une copie de ses données, inversement aucune possibilité officielle de les importer puisque la calculatrice ne disposait d'aucun port de communication. :'(

Cela ne changeait donc à la nécessité de resaisir régulièrement ses scripts, ce qui pourra se révéler très fastidieux selon la longueur des scripts en question.

Dans le contexte du défi de tracé dans le cadre de notre concours de rentrée 2019 en partenariat avec Casio et Planète Casio, nous avions conçu de quoi charger rapidement un script dans l'émulateur de Casio sans avoir à cliquer toutes les touches une par une, et un des participants avait également conçu un outil similaire en Python. Les outils en question :
  • prenaient en paramètre la chaîne hexadécimale décrivant le script
  • la découpaient en jetons
  • pour chaque jeton cliquaient automatiquement dans la fenête de l'émulateur les touches de menu permettant d'insérer l'instruction associée
Des scripts de près de 900 octets pouvaient ainsi être saisis en seulement quelques secondes ! :bj:

Mais voilà, cela ne fonctionnait qu'avec l'émulateur de la calculatrice sur ordinateur.

Sur la véritable calculatrice, toujours aucune possibilité de charger un script autrement qu'en le saisissant intégralement à la main touche après touche.

Et bien nous y sommes enfin aujourd'hui, adityachugh02 nous conçoit un module de chargement de script fonctionnant cette fois-ci directement avec ta calculatrice fx-92+ Spéciale Collège ! :bj:

Le module est conçu autour d'une carte Arduino et nécessite quelques modifications pas bien complexes à ta calculatrice.

Il reprend exactement le même principe que nous venons de te décrire, à savoir qu'il va déclencher électriquement chaque touche nécessaire à la saisie automatique du script que tu souhaites charger.

Pour cela adityachugh02 a dû commencer par analyser et documenter la matrice clavier de la calculatrice.

Les claviers matriciels de nos claculatrices sont arrangées électroniquement en rangées et colonnes, qui ne respectent pas toujours exactement la répartition physique visible des touches. C'est l'activation simultanée des contacts électriques correspondant à une rangée et une colonne qui permettent d'identifier la touche pressée.

Suite au résultat ci-dessous de son travail, pour pouvoir activer automatiquement des touches il suffit alors de souder des fils sur les contacts comme illustré ci-contre :
Voici le résultat de son travail sur fx-92+ Spéciale Collège :


Le module peut être chargé avec jusqu'à 5 scripts différents, et 5 boutons permettent alors de choisir le script à charger sur la calculatrice.

Tu peux donc avoir sous la main jusqu'à un maximum de 5 scripts préférés.

Comme tu pourras le noter, la saisie de 10aines de lignes de script est alors extrêmement rapide : :bj:


On peut par contre regretter que le module ne reconnaisse d'origine aucune des 2 formes officielles d'écriture du langage de programmation de Casio :
Si tu souhaites partager des scripts pouvant directement être mis dans la mémoire de ce module, il va te falloir les transcrire dans une forme différente documentée sur la page du projet. C'est bien dommage et cela risque de nuire grandement à la popularité du projet.

Rappelons également que comme pour tout module externe, l'usage de cet appareil est strictement interdit pendant les épreuves d'examens en France. Toutefois, absolument rien ne t'interdit de l'utiliser pour charger ton script préféré dans l'heure précédant le début de l'épreuve. ;)


Les plans pour te fabriquer ou faire fabriquer le module sont disponibles sur la page du projet. Dans tous les cas, toutes nos félicitations pour cette superbe réalisation tant attendue dont nous avions longtemps rêvé ! :bj:

Source : https://github.com/adityachugh02/casio-external-memory/ via https://www.planet-casio.com/Fr/forums/ ... -fx92.html

Concours de l'Avent 2021 "l'énigme des 3 portes" : jour 28

New postby critor » 28 Dec 2021, 14:00

Concours TI-Planet de l'Avent 2021
L'énigme des 3 portes : jour n°28
(index des publications)


Viens rassembler les indices et bouts de code Python chaque jour de l'Avent ; sois parmi les premiers à passer l'une des portes pour gagner de superbes cadeaux de Noël ! :favorite:

15057Dernier indice Texas Instruments ce 29 décembre. Rendez-vous à partir de 14 heures.
Code: Select all
from math import ceil

platform = ''
try: from sys import platform
except: pass

def nop(*argv): pass
show, wait = nop, nop
neg_fill_rect = False
has_color = True

try: # NumWorks, NumWorks + KhiCAS, TI-Nspire CX + KhiCAS
  import kandinsky
  fill_rect = kandinsky.fill_rect
  screen_w, screen_h = 320, 222
  neg_fill_rect = platform!='nspire' and platform!='numworks'
except:
  try: # TI
    import ti_draw
    try: # TI-Nspire CX II
      ti_draw.use_buffer()
      show = ti_draw.paint_buffer
    except: # TI-83PCE/84+CE Python
      wait = ti_draw.show_draw
    screen_w, screen_h = ti_draw.get_screen_dim()
    try: # check TI-83PCE/84+CE ti_draw 1.0 fill_rect bug
      ti_draw.fill_rect(0,0,1,1)
      def fill_rect(x, y, w, h, c):
        ti_draw.set_color(c[0], c[1], c[2])
        ti_draw.fill_rect(x, y, w, h)
    except: # workaround
      def fill_rect(x, y, w, h, c):
        ti_draw.set_color(c[0], c[1], c[2])
        ti_draw.fill_rect(x - 1, y - 1, w + 2, h + 2)
  except:
    try: # Casio Graph 90/35+E II, fx-9750/9860GIII, fx-CG50
      import casioplot
      casioplot.set_pixel(0, 0, (0, 0, 255))
      col = casioplot.get_pixel(0, 0)
      has_color = col[0] != col[2]
      screen_w, screen_h = has_color and (384, 192) or (128, 64)
      show = casioplot.show_screen
      def fill_rect(x, y, w, h, c):
        for dy in range(h):
          for dx in range(w):
            casioplot.set_pixel(x + dx, y + dy, c)
    except:
      try: # HP Prime
        import hpprime
        screen_w, screen_h = hpprime.grobw(0), hpprime.grobh(0)
        hpprime.dimgrob(1, screen_w, screen_h, 0)
        def col3_2_rgb(c, bits=(8,8,8), bgr=1):
          return c[2*bgr]//2**(8 - bits[0]) + c[1]//2**(8 - bits[1])*2**bits[0] + c[2*(not(bgr))]//2**(8-bits[2])*2**(bits[0] + bits[1])
        def fill_rect(x, y, w, h, c):
          hpprime.fillrect(1, x, y, w, h, col3_2_rgb(c), col3_2_rgb(c))
        def show():
          hpprime.strblit(0, 0, 0, screen_w, screen_h, 1)
        def wait():
          while hpprime.keyboard(): pass
          while not(hpprime.keyboard()): pass
      except:
        pass
if not neg_fill_rect:
  _fill_rect = fill_rect
  def fill_rect(x, y, w, h, c):
    if w < 0:
      x += w
      w = -w
    if h < 0:
      y += h
      h = -h
    _fill_rect(x, y, w, h, c)

def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1, itransp=-1):
  if not has_color:
    pal = list(pal)
    g_min, g_max = 255, 0
    for k in range(len(pal)):
      c = pal[k]
      g = 0.299*c[0] + 0.587*c[1] + 0.114*c[2]
      g_min = min(g_min, g)
      g_max = max(g_max, g)
      pal[k] = g
    for k in range(len(pal)):
      pal[k] = pal[k]<(g_min + g_max) / 2 and (0,0,0) or (255,255,255)
  i, x = 0, 0
  x0, y0 = int(x0), int(y0)
  nvals = len(pal)
  nbits = 0
  nvals -= 1
  while(nvals):
    nvals >>= 1
    nbits += 1
  maskval = (1 << nbits) - 1
  maskcnt = (0xFF >> nbits >> 1) << nbits
  while i<len(rle):
    v = rle[i]
    mv = v & maskval
    c = (v & maskcnt) >> nbits
    if (v & 0b10000000 or nbits == 8):
      i += 1
      c |= rle[i] << (7 - nbits + (nbits == 8))
    c = (c + 1)
    while c:
      cw = min(c, w - x)
      if mv != itransp:
        fill_rect(x0 + x*zoomx, y0, cw*zoomx, zoomy, pal[mv])
      c -= cw
      x = (x + cw) % w
      y0 += x == 0 and zoomy
    i += 1

palettes = (
  (
    (247,176,36),(247,207,73),(231,89,0),(247,131,8),
  ),
)
images = (
  (
    b"\b\x05\n?\n\x05\x18\x05\n7\n\x05\x20\x05\n/\n\x05(\x05\n'\n\x050\x05\n\x1f\n\x058\x05\n\x17\n\x05@\x05\n\x0f\n\x05H\x05\n\a\n\x05P\x05\x16\x05X\x05\x0e\x05`\x05\x06\x05d\a\x06\a`\a\x02\x04\x02\aX\a\x02\x0c\x02\aP\a\x02\x04\a\x04\x02\aH\a\x02\x04"
    b"\x0f\x04\x02\a@\a\x02\x04\x17\x04\x02\a8\a\x02\x04\x1f\x04\x02\a0\a\x02\x04'\x04\x02\a(\a\x02\x04/\x04\x02\a\x20\a\x02\x047\x04\x02\a\x18\a\x02\x04?\x04\x02\a\x10\a\x02\x04G\x04\x02\a\b\a\x02\x04O\x04\x02\a\x00\a\x02\x04W\x04\x02\x0b\x02\x04_\x04"
    b"\x02\x03\x02\x04g\x04\x0eg\n\x01\n_\n\t\nW\n\x05\x00\x05\nO\n\x05\b\x05\nG\n\x05\x04"
  ),
)
for y in range(ceil(screen_h / 32)):
  for x in range(ceil(screen_w / 32)):
    draw_image(images[0], x*32, y*32, 32, palettes[0])
show()

palettes = (
  (
    (7,97,182),(55,139,223),(99,176,247),(141,216,247),
  ),
)
images = (
  (
    b"\x80\x01!\x14!\x18\x1e\x19\x1e\x19\x06\x17\x1a\x1f\x1a\x1f\x1a\x1f\x1a\x17\x06\x19\x1e\x19\x1e\x18!\x14!\x80\x01"
  ),
)
for x in range(ceil(screen_w / 16)):
  draw_image(images[0], x*16, screen_h-16, 16, palettes[0])
show()

palettes = (
  (
    (239,89,107),(247,207,81),(0,0,0),(182,26,36),(239,97,0),(0,0,0),
  ),
)
images = (
  (
    b"\xc0\x011\xc0\x01\x02)\xc0\x01\x03\x02!\xc0\x01\x0b\x02!\xc0\x01\x0b!\xc8\x011\xc0\x011\xb8\x01!\x021\x90\x01\x11\n\x03)\x02\x88\x01\t\n\x13!\x02\x03\x88\x01\n#\x19\x02\x0b\x88\x01+\x00\x19\x0b\x90\x01\x1b\x10!\x98\x01\x0b\x20!\xd0\x01\x02!\xc8\x01"
    b"\x03\n\x11\xc8\x01\x13\n\t\xc0\x01#\n\xe8\x01\x0b\xb8\x02\tX\x13p\t@+h\x19\x18Kh\x19[Pi#\x18C\x02Y\x02\x0b0K\x02I\x02\x03@S\x029\x02\x03(\xfb\x009\x03\x20\x1b\b3\x18I\x18\x13pI\b\x1b\x18\x03H!\n!\x1b\x18\x0bH\x11\n\x0b\n\x11\x13\x20\x03\x04@\t\n+\n"
    b"\t\x03\x20\x0b\x04@\nK\n(\x0b\x04@c(\x13\x04\x018[0\x0b\x0c\x01(c0\x13\x0c\t\x83\x010\x1b\x0c\ts@\x13\x141;H\x1b\x14)\x02+P\x1b\x1c!\x02\x1b`#\x1c\x19\x02\x0bp#\x1c\x05\x19\x80\x01+\x14\r!p+\x1c\r!h+\x1c\x15\x02!X+$\x15\x03\n\x11P+$\x1d\x13\n\t83,"
    b"\x1d#\n(;,%\x00+\x10K,-\x10\xfb\x00,5\x8b\x01,=\xfb\x004Ek<M[DUCT]#dm\xfc\x00\xfd\x00\x01d\x8d\x01\tL\x9d\x01\x04\t,\xb5\x01\x0c\t\x14\xc5\x01"
  ),
)
for x in range(ceil(screen_w / 64)):
  draw_image(images[0], x*64, 0, 32, palettes[0], 1, 1, 5)
  draw_image(images[0], (x+1)*64, 0, 32, palettes[0], -1, 1, 5)
show()

def draw_rect_z(x, y, w, h, c, z=1):
  for dy in (0, h - 1):
    fill_rect(x, y + dy*z, w*z, z, c)
  for dx in (0, w - 1):
    fill_rect(x + dx*z, y, z, h*z, c)

def qr_mark(x, y, s, c, z=1):
  draw_rect_z(x, y, s, s, c, z)
  fill_rect(x + 2*z, y + 2*z, (s - 4)*z, (s - 4)*z, c)

palettes = (
  (
    (0,0,0),(247,172,107),(133,71,73),(157,114,18),(207,147,55),(247,247,247),
  ),
  (
    (0,0,0),(36,35,36),(198,0,18),(247,26,55),(157,0,0),(231,97,81),(239,147,90),(247,183,133),(55,114,167),(247,247,247),(72,155,207),(36,71,133),(166,80,0),(239,199,45),(223,131,45),
  ),
  (
    (0,0,0),(0,0,0),(255,183,45),(255,255,247),(255,216,141),
  ),
  (
    (0,0,0),(0,0,0),(27,58,157),(157,172,215),(247,251,247),
  ),
  (
    (0,0,0),(223,41,45),
  ),
)
images = (
  (
    b"\x80\x01a\x02\b\x01[\x02\b\x01\x03\x19\x0b\x19\x03\x02\b\x01\x03\x01\x0b\x01\x0b\x01\x0b\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03"
    b"\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x19\x0b\x19\x03\x02\b\x01[\x02\b\x05Y\x02\b\x01\\\x02\b\x01\r\x03\x14\x01$\x02\b\x01\r\x02\x0c\x01\x0c\x01\x14\x02\b\x01\x03\n\x04\x01\x0c\x01\x1c\x02\b"
    b"\x01\x13\x04\x0b\x04#\x02\bj\b\x01[\x02\b\x01\x03\x19\x0b\x19\x03\x02\b\x01\x03\x01\x0b\x01\x0b\x01\x0b\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01"
    b"\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x01\x0c\x01\x0b\x01\x0c\x01\x03\x02\b\x01\x03\x19\x0b\x19\x03\x02\b\x01[\x02\bj\x80\x01"
  ),
  (
    b"\xe0\n1\x90\x01\x11\x02#\x01\xf0\x00\x01\x04\"\x13\x01`\x01\x04\"Q0\x01$\x81\x01\x20\x01\x14\x11E\x11\x20A\x05\x16\x01\x06\x110\x01\x16\x11\x05\x16\x01\x06!\x20\x01\x16!\x056\x17\x01\x10\x01\x05\x06\x05\x01\x05\x06\x01\x15&\x01\x20\x01%\x061\x15!"
    b"\x20\x11\x15\x16A0\x11\b\x01E\x01@\x01\x04\x02\x01\bAP\x01\x12\x03!\x04\x03\x11\x00\x01\x10\x01\x04\x02\x03\x01&\x01\x04\x03\x11\x06\x01\x00\x01\x04\x02\x01\x05\x06\x17\x06\x01\x04\x02\x01\x05\x01\x00\x01\x14\x01\x15&A\x10\x11\x14\x01%\x01\t\x1a\t"
    b"\x01\x20!\x0b!\x19\x1a\t\x01\x20\x01+\x18\n\b*\b\x010\x01\x0b\x18\n\b\x0b8\x11\x10\x01\x0c\x01\x0b\x18\x0b\x01\x1b\b\x01\r\x0e\x01\x00\x01\x0c\x01+\x01\x00\x01\x0b\x01\r\x0e\x0c\x01\x00\x01\x0c\x0e!\x20\x01\x1e\x0c\x01\x20\x01\x0c\x1e\x0c\x01\x10"
    b"\x01\x1c\x01@A\x20\x11\x20"
  ),
  (
    b"\x80\x01i\x00\x01j\tj\t\x12\x03\x04\x1a\x04\x03\x12\t\x12\x0b\x04\x12\x04\x03\x12\t\x12\x13\x12\x04\x03\x12\t\x12\x03\x04\x0b\n\x04\x03\x12\t\x12\x03\x0c\x03\x04\x02\x04\x03\x12\t\x12\x03\x04\x02\x04\x03\x0c\x03\x12\t\x12\x03\x04\n\x0b\x04\x03\x12"
    b"\t\x12\x03\x04\x12\x13\x12\t\x12\x03\x04\x12\x04\x0b\x12\t\x12\x03\x04\x1a\x04\x03\x12\tj\tj\x01"
  ),
  (
    b"\x80\x01i\x00\x01j\t\n\x0b,\x0b\n\t\x02\x03T\x02\t\x02\\\x03\t\x03\x14\x03\"\x14\x03\t\x03\x14J\t\x03\x14J\t\x03\x14J\t\x03\x14*\x14\x03\t\x02\x14+\x14\x03\t\x02\x03T\x03\t\n\x03D\x03\x02\t\x1a3\x12\tj\x01"
  ),
  (
    b"\x06\a\x16\a\x02\x03\x0e\a\x16\t\x00\x01\x00\x05\b\t\x00\x01\x00\x05\b\a\x00\x03\x02\x03\x00\r\x02\x03\x00\a\x00\r\x00\x01\x00\t\x02\x0b\x00\x01\x00\t\x02\x0b\x00\x01\x00\t\x04\x03\x00\x03\x06\x05\x0e\x01\x04\x03\x12\t\x16\a\x16\x05\x1a\x05\x06"
  ),
)
for j in range(-1, 2, 2):
  for i in range(1, 3):
    x = screen_w//2 - j*(screen_w * i // 6)
    if i+j != 3:
      qr_mark(x - 7, screen_h - 15, 7, [(k + 2) % 3 == i + j and 255 or 0 for k in range(3)], 2)
      show()
      draw_image(images[2 + i + j], x - 8, screen_h - 64, 16, palettes[2 + i + j], itransp=0)
      show()
    draw_image(images[i+j == 3], x - 8, screen_h - 48, 16, palettes[i+j == 3], itransp= i+j!=3 and -1)
    show()

palettes = (
  (
    (0,0,0),(0,0,0),(190,232,247),(190,97,0),(231,139,18),(157,199,239),(247,247,247),(247,176,64),(149,54,0),(133,172,207),
  ),
)
images = (
  (
    b"Q\x061\x05\xc1\x02\x19\x01\t\x01\x16\x11\x02\x05\x01\t\x01\x19\x01\t\x01\x89\x01\x01\t\x11\x15\x01\x05\x01\x16\x11\x02\x05\x01\x05\x01\x15\x01\x05\x01\x85\x01\x01\x05\x11\x12!\x16\x11\x02\x05!\x12\x01\x05\xa1\x01\x05\x11\x12\x01\b\x01B\x05\x01\b\x01\x12"
    b"\x01\x05\x01\x88\x01\x01\x05\x11\x16\x01\x18Q\x18\x01\x16\x01\x05\x01\x88\x01\x01\x05\x11\x12\x01\b\x03h\x04\x01\x12\x01\x05\x01\x88\x01\x01\x05\x11\x16\x01\bc\x14\x01\x16\x01\x05\x01h\x03\b\x01\x05\x11\x16\x01\bS$\x01\x16\x01\x05\x01X\x13\b\x01\x05\x11"
    b"\x12\x01\bC$\x03\x01\x12\x01\x05\x01H#\b\x01\x05\x11\x16\x01\b3$\x13\x01\x16\x01\x05\x018#\x18\x01\x05\x11\x12\x01\x98\x01\x01\x12\x01\x05\x01\x88\x01\x01\x05\x11\x12\xb1\x01\x12\x01\x05\xa1\x01\x05\x11\x12\x01\x19\x05b\x01\x12\x01\x05\x01e\x19\x01\x05"
    b"\x11\x12\x01\x19\x05b\x01\x12\x01\x05\x01e\x19\x01\x05\x81\x04"
  ),
  (
    b"P\xb1\x02\x90\x01\x11\x12\x11\xf4\x00\x01\x12\x11%\x11`\x01\x16\x11\x04\xf7\x00\x01\x16\x01\x15!\x15\x01@\x01\x16\x01\x04\x87\x01\x01\x16\x01\x05\x11(\x11\x05\x010\x01\x16\x01\x04\x87\x01\x01\x16\x01\x05\x01H\x01\x05\x01\x20\x01\x16\x01\x03\x84\x01\x01"
    b"\x16\x01\x05\x01h\x01\x05\x01\x10\x01\x16\x01\x03\x84\x01\x01\x16\x01\x05\x01h\x01\x05\x01\x10\x01\x16\x01\x03\x84\x01\x01\x16\x01\x05\x01h\x01\x05\x01\x00\x01\x12\x01\b\x83\x01\x01\x12\x01\x05\x01h\x03\b\x01\x05\x11\x16\x01\b\x83\x01\x01\x16\x01\x05"
    b"\x01X\x13\b\x01\x05\x11\x16\x01\b\x83\x01\x01\x16\x01\x05\x01H#\b\x01\x05\x11\x12\x01\b\x83\x01\x01\x12\x01\x05\x018#\x18\x01\x05\x11\x16\x01\b\x03Q\b\x03\x01\x16\x01\x05\x01(#(\x01\x05\x11\x12\x01\b\x01&\x12\x05\x01\b\x01\x12\x01\x05\x01\x18#8\x01\x05"
    b"\x11\x12\x01\b\x01\x16\x11\x02\x05\x01\b\x01\x12\x01\x05\x01\b#(\x03\b\x01\x05\x11\x15\x01\b\x01\x061\x05\x01\b\x01\x15\x01\x05\x01\x88\x01\x01\x05\x01"
  ),
  (
    b"P\xc1\x02\x80\x01\x11\x12\x01\x03\x84\x01\x01\x12\x11%\x11P\x01\x16\x01\x14\x87\x01\x01\x16\x01\x15!\x15\x01@\x01\x16\x01\x04\x97\x01\x01\x16\x01\x05\x01(\x01\x05\x010\x01\x16\x01\x04\x97\x01\x01\x16\x01\x05\x01H\x01\x05\x01\x20\x01\x16\x01\x03\x94\x01"
    b"\x01\x16\x01\x05\x01H\x01\x05\x01\x20\x01\x12\x01\x03\x94\x01\x01\x12\x01\x05\x01H\x01\x05\x01\x20\xa1\x02\x05\x01X\x01\x05\x01\x20\x01\x89\x02\x11X\x01\x05\x010\x01\t\xe1\x01\t\x11H\x01\x05\x01@\x01\t\xe1\x01\t\x118\x01\x05\x01P\x01\t\xe1\x01\t\x11("
    b"\x01\x05\x01P\x91\x02\t\x11\x18\x01\x05\x01@\x01&\x12\x05\xc1\x01\t\x11\b\x01\x05\x01@\x01\x16\x11\x02\x05\xd1\x01\t!\x05\x01@\x01\x061\x05\xe1\x01\t\x11\x05\x01"
  ),
)
for i in range(2):
  draw_image(images[-i], screen_w//2-16, screen_h-32-16*i, 32, palettes[0], itransp=0)
show()

def qr_size(v):
  return 17 + 4*v

qr_ver = 3
qr_margin = 4
qr_size_code = qr_size(qr_ver)
qr_size_code_margin = qr_size_code + 2*qr_margin + 4
qr_zoom = max(1, min(screen_w // qr_size_code_margin, (screen_h - 128) // qr_size_code_margin))
qr_size_code_margin -= 4
qr_width = qr_size_code_margin * qr_zoom
x_qr = (screen_w - qr_width) // 2
y_qr = (screen_h - qr_width) // 2
for k in range(1, 3):
  draw_rect_z(x_qr - k*qr_zoom, y_qr - k*qr_zoom, qr_size_code_margin + 2*k, qr_size_code_margin + 2*k, k > 1 and (0, 0, 0) or (255, 255, 255), qr_zoom)
qr_margin *= qr_zoom
fill_rect(x_qr, y_qr, qr_width, qr_width, (0,64,64))

def qr_alignments(v):
  s = qr_size(v)
  positions = []
  n = v // 7 + 2
  first = 4
  positions.append(first)
  last = s - 5 - first
  step = last - ((first + last*(n - 2) + (n - 1)//2) // (n - 1) & -2)
  second = last - (n - 2) * step
  positions.extend(range(second, last + 1, step))
  return positions

def qr_frame(v, x, y, c, z=1):
  s = qr_size(v)
  l = (0, s - 7)
  for dy in l:
    for dx in l:
      if not dx or not dy:
        qr_mark(x + dx*z, y + dy*z, 7, c, z)
  for i in range(8, s-8, 2):
    fill_rect(x + i*z, y + 6*z, z, z, c)
    fill_rect(x + 6*z, y + i*z, z, z, c)
  l = qr_alignments(v)
  for dy in l:
    for dx in l:
      if not (dy < 8 and (dx < 8  or dx > s - 10) or dx < 8 and dy > s - 10):
        qr_mark(x + (dx - 0)*z, y + (dy - 0)*z, 5, c, z)

qr_frame(qr_ver, x_qr + qr_margin, y_qr + qr_margin, (255,255,255), qr_zoom)

palettes = (
  (
    (0,0,0),(255,255,255),
  ),
  (
    (0,0,0),(255,255,255),
  ),
  (
    (0,0,0),(0,0,255),
  ),
)
images = (
  (
    b"\x1e\x01\x02\x03,\x05\x02\x012\x014\x014\x01\x00\x056\x01n\x030\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x20\a\x00\a\x04\x01\x1a\a\x02\x03\x02\x01\"\x01\x00\x01\x00\x05\x02\x01\x00\x01\x00\x01\x1c\x01\x00\x03\x0c\x03\x1e\x05\x02\x0b\x04\x01\x1c"
    b"\x01\n\x01\x00\x05&\x03\x00\x03\x00\x01\x02\x01$\x01\x00\x01\x02\x01\x00\x03\"\x01\x02\x0b\x00\x01\x00\x01\x1c\x03\x00\x01\x00\x01\x02\x03\x00\x01\"\x01\x00\x05\n\x01\x1c\x01\x00\x01\x00\x03\n\x05\x1c\x03\x0e\a\x1c\x01\x02\x03\b\x03$\x05\x0c\x032"
    b"\x05\x1c\x01\x00\x03\x00\x01\x06\x03\x20\x01\x00\a\x00\x0b\x1e\x03\x00\x01\x00\x01\x04\x03\x00\x01\x1e\x03\x00\x01\x02\x01\x00\a\x02"
  ),
  (
    b"\x16\x01\x00\x01*\x01\x04\x038\x01*\x01\x06\x01f\x01\n\x01n\x01\x1a\t\x02\x03\b\x01$\x01\x02\x01:\x01^\x01\x0c\x01(\x01<\x01\x00\x01\b\x01\"\x01\x0c\x01:\x01\x00\x01\x18\x01\x02\x01\x00\x01\x04\x01\x02\x01\x1e\x01\x14\x01\x1e\x016\x01\n\x018\x01"
    b"\x02\x01\x00\x01,\x03\x02\x016\x01.\x01\x06\x03*\x01\x06\x01,\x016\x016\x01\x00\x01\""
  ),
  (
    b"J\x018\x01\x00\x01\x02\x01*\x03\x04\x030\x03.\x01\x00\x01\x06\x01f\x012\x03\x00\x03\x00\x01\x18\x01\x0e\x03\x00\x03&\x01\x04\x01\x04\x01$\x01\x06\x01\x00\x03\"\x01\x02\x01\x02\x01\x04\x01,\x03\x04\x03\x1c\x01\x02\x01\x06\x01\x00\x01\x04\x01$\x01"
    b"\x06\x01\x04\x010\x03,\x01.\x05\x04\x01(\x05\x04\x01\x00\x01&\x01\x00\x03\n\x012\x01\x04\x010\x01\x00\x01\x02\x01(\x03\x02\x05*\x01\x02\x010\x01\x02\x01\x00\x01,\a\x00\x01,\x058\x01\x1e"
  ),
)

for k in range(len(images)):
  draw_image(images[k], x_qr + qr_margin, y_qr + qr_margin, qr_size_code, palettes[k], zoomx=qr_zoom, zoomy=qr_zoom, itransp=0)
show()
wait()

Lien : lots et ressources

Unboxing week 2021 : calculatrice-jeu SL-880 Digit Invaders

New postby critor » 28 Dec 2021, 00:02

5559Casio fut fondé le 1er juin 1957 à Tokyo. En plus de 64 ans d'existence, l'entreprise a conçu et commercialisé des produits électroniques grand public dans nombre de branches différentes :
  • jeux vidéo électroniques, comme le Watercoaster CG-61 de 1983 que nous t'avons déjà présenté
  • pianos / claviers électroniques
  • calculatrices électroniques
  • vidéoprojecteurs
  • montres
  • assistants personnels / PDA
  • appareils photo numériques / APN

5334Nous avons parfois eu droit à des intersections entre différentes branches, comme le ML-81 de 1980 que nous t'avons également déjà présenté, à l'intersection de 3 branches :
  • calculatrices
  • pianos / claviers électroniques
  • montres électroniques
En effet le ML-81 est une calculatrice musicale disposant en prime d'une horloge.

C'est loin d'être le seul exemple de ce genre.

En 1978 était sorti le mythique jeu Space Invaders, d'abord sur table d'arcade puis sur borne d'arcade.

Et bien justement en 1980 Casio sort le MG-880, lui aussi à l'intersection de 3 branches :
  • calculatrices électroniques
  • pianos / claviers électroniques
  • jeux vidéo électroniques
En effet le MG-880 est une calculatrice musicale qui a la particularité d'intégrer un jeu et pas n'importe quel jeu, Digi Invaders, une adaptation libre de Space Invaders.

Un formidable succès auprès des adolescents des années 1980 dans le monde entier ; si si regarde bien ci-contre dans le coin inférieur droit de la photo. ;)

Tu vas vite comprendre le principe. Dans Digi Invaders les vaisseaux des envahisseurs arrivent par la droite de l'écran. Les vaisseaux peuvent être de 11 formes différentes :
  • les 10 chiffres de 0 à 9
  • et le vaisseau mère noté n

Tu te situes à gauche de l'écran et dois empêcher les envahisseurs de débarquer, leurs vaisseaux avançant vers la gauche de l'écran sur 6 cellules. Tu disposes de 3 vies et en perds une à chaque débarquement.

Pour détruire les vaisseaux extraterrestres, tu dois :
  • parmi les 11 choix disponibles, sélectionner le type de vaisseau à viser avec la touche
    .
  • et ensuite, tirer avec la touche
    +

Petite démo du mode musical ainsi que du mode jeu de la MG-880 :

1505515056En 2017 grande nouvelle pour tous les nostalgiques, Casio annonce et sort un remake destiné au marché japonais, le SL-880.

Le SL-880 est une calculatrice intégrant le jeu Digi Invaders.


1505415053Comme son prédécesseur, le SL-880 vient avec un étui imitation cuir dans lequel tu disposes d'une pochette pour glisser le manuel, bien évidemment en Japonais.

Par contre, contrairement au MG-880 original, le SL-880 n'est pas musical, n'émettant au mieux que des bips pendant le jeu. Il ne s'agit pas non plus d'une calculatrice scientifique. En effet les priorités opératoires ne sont pas respectées :
$mathjax$1+2×3=9$mathjax$
.

1505115050Le SL-880 calcule et affiche sur 10 chiffres significatifs, une belle amélioration par rapport au MG-880 originel qui était limité à 8 chiffres.
e
Son écran aux cellules bien plus grandes est une autre superbe amélioration. Nous avons donc 10 cellules numériques à 7 segments, chacune accompagnée du séparateur décimal ainsi que du séparateur de milliers.

150461504815047Toutefois, notons que le jeu Digi Invaders continue à se jouer sur seulement 8 cellules comme l'original, la progression des vaisseaux de la droite vers la gauche ayant donc toujours lieu sur seulement 6 cellules.

1504415045Le SL-880 dispose d'une alimentation hybride : pile bouton CR2016 de 3 Volts et cellule solaire, cette dernière permettant de prolonger très significativement la durée de vie de la pile.

1504215043Inspectons maintenant enfin le matériel de ce remake. Nous notons que la face avant du boîtier dispose d'un emplacement inutilisé pour une pile bouton type LR44. Peut-être s'agit-il d'un boîtier générique commun à différents modèles de Casio.

La carte électronique porte ici la référence CY-318, et le timbre à date 1846 semble indiquer une production la 46ème semaine de 2018.

Elle s'articule autour d'un unique circuit intégré en haut à gauche, possédant au moins 84 broches. Le boîtier noir en bas à droite étant pour sa part le buzzer, n'émettant ici que quelques bips.

Ici encore il pourrait bien s'agir d'une carte générique commune à différents modèles Casio. En effet on note pas mal de composants électroniques prévus mais manquants, particulièrement dans le coin du buzzer :
  • 2 transistors : Q1 et Q2
  • 5 résistances : R1 à R5
  • 2 condensateurs : C5 et C9

Serait-ce ce qui manque pour permettre une calculatrice musicale comme l'originale ?... Peut-être pour un futur modèle ?... ;)


Crédits images : salle d'arcade avec MG-880

Casque sans fil Asus + calculatrice Casio à gagner

New postby critor » 22 Dec 2021, 18:49

Jusqu'au 31 décembre avec Casio France gagne une superbe calculatrice Casio accompagnée d'un casque sans fil Asus ! :D

Pour cela, il te suffit de répondre correctement à l'énigme suivante :
Combien le Père Noël a-t-il de rennes ? Indice, il y en a autant que le nombre de triangles sur la figure ci-contre.

Tirage au sort le 31 décembre à 10h.

Source : https://twitter.com/CasioFrance/status/ ... 7665166338

MagicLight, puzzle game lumineux pour Casio Graph 90+E

New postby critor » 08 Dec 2021, 13:13

8264La Casio Graph 90+E est une formidable machine de milieu de gamme. Elle est munie d'un superbe écran couleur de 396×224 pixels, d'un processeur 32 bits Renesas SH4 cadencé à pas moins de 117.96 MHz (et overclockable de plus de façon parfaitement stable à 270,77 MHz comme si cela ne suffisait pas ;) ), d'une mémoire Flash de 32 Mio (dont 16 Mio de stockage), et de pas moins de 8 Mio de mémoire SDRAM. Autant de puissance et capacités dans une si petite chose ! :bj:

Outre les qualités intrinsèques à son logiciel de Mathématiques intégré, ce matériel exceptionnel est un véritable délice pour les utilisateurs franchissant le pas et se mettant à la création d'applications en langage C. La Casio Graph 90+E est de loin la meilleure calculatrice actuelle pour le développement en langage C. En effet on y bénéficie à la fois d'un très bon matériel, mais également d'un support officiel des applications créées.

En effet rappelons que chez la concurrence, l'exécution de code machine non officiel est farouchement combattue. On peut citer très récemment le verrouillage des calculatrices NumWorks pour cette rentrée 2021, ou encore la suppression du support des programmes dits assembleur sur TI-83 Premium CE et TI-84 Plus CE pour la rentrée 2020. Certes des contournements peuvent exister ; on peut citer le trio arTIfiCE / Cesium / AsmHook pour TI-83 Premium CE et TI-84 Plus CE, ou encore Ndless pour les TI-Nspire. Mais voilà ce n'est pas intégré, et la nécessité de procéder à leur installation plus ou moins complexe limite déjà très grandement le nombre d'utilisateurs concernés par la diffusion de tes créations. De plus ces éléments sont régulièrement rendus inutilisables à chaque mise à jour du logiciel de la calculatrice, ce qui décourage d'autant plus les utilisateurs, et parfois même les développeurs comme on peut le voir ces derniers temps avec Ndless qui n'est plus mis à jour. :'(

Ici donc sur Casio Graph 90+E, contrairement à l'ensemble de la concurrence rien à installer de spécial pour que ces applications fonctionnent, elles sont directement installables et immédiatement utilisables, un énorme avantage pour une diffusion optimale de tes créations ! Et contrairement à la concurrence, tes créations ne deviennent pas inutilisables à chaque sortie d'une mise à jour du logiciel de la calculatrice, un véritable plaisir ! :favorite:

On peut citer de façon absolument pas exhaustive :
  • CGDoom, un portage des jeux Doom, Ultimate Doom et Doom II
  • OpenJazz Jackrabbit, un portage du jeu Jazz Jackrabbit
  • NESizm, un émulateur de console de jeu Nintendo NES avec accessoires et même le son
  • Prizoop, un émulateur de consoles de jeu Nintendo Game Boy et Game Boy Color, ici encore avec le son
143901189111892122558314

Profitons-en pour féliciter SlyVTT qui a brillamment terminé 2nd à l'épreuve SynchroDonjon de notre concours de rentrée 2021. :bj:

Il a justement remporté une superbe Casio Graph 90+E ! :D

Et SlyVTT nous fait l'immense plaisir de mettre immédiatement à profit sa nouvelle Graph 90+E pour nous concocter une superbe récompense, l'application Magic Light, compilée à partir de code source en langage C.

Magic Light est un puzzle game et pour le coup une création originale, à ce jour une exclusivité sur Graph 90+E tirant de plus pleinement profit de son écran couleur comme nous allons le voir ensemble. Après un menu d'accueil stylé et animé, entrons donc dans le vif du sujet.

14947Tu te dois ici d'arpenter les différentes salles d'un donjon (tiens donc, certains étaient déçus de ne pas pouvoir véritablement pénétrer dans les donjons du défi d'Alrys ;)), 4 salles à ce jour numérotées en tant que niveaux 0 à 3 :


Mais les portes sont fermées et ne peuvent s'ouvrir que si tu résous le puzzle de lumière que te posera chaque salle. Autour de chaque salle sont donc disposés des portes ainsi que des capteurs réagissant à certaines couleurs. Chaque porte est connectée à un certain nombre de capteurs, de 1 à 3, et ne s'ouvre que si ils sont tous éclairés simultanément par les bonnes couleurs.

Pour cela tu disposes dans chaque salle de plusieurs éléments déplaçables avec les touches fléchées du clavier, après les avoir sélectionnés avec les touches
F1
à
F6
correspondant au menu de bas d'écran :
  • le personnage à faire sortir de la salle
  • une boule de cristal émettant une lumière blanche, initialement au centre
  • des blocs filtrant la lumière et ne laissant passer que certaines couleurs : les blocs rouge, vert, bleu et noir
Pour savoir quels capteurs sont associés à une porte, il te faut les éclairer. Un indicateur s'allumera alors au-dessus des portes concernées.

Ce qui est particulièrement remarquable, c'est la très haute qualité du moteur physique codé pour le jeu. On le voit déjà à la forme correcte des faisceaux lumineux, mais pas seulement :
  • selon les niveaux, des blocs fixes peuvent également être présents et bloquer le passage de la lumière
  • et les blocs filtrant la lumière peuvent être combinés pour former de nouvelles couleurs par synthèse additive
Un véritable bijou d'horlogerie qui ne t'en permet que des défis logiques encore plus riches et excitants ! :bj:

SlyVTT donc, toutes nos félicitations admiratives et un énorme merci pour cette délicieuse pépite, on devrait te faire gagner des calculatrices plus souvent, nous tous avons très hâte de voir la suite, surtout que tu nous promets plein de superbes nouveautés à venir : :favorite:
  • score basé sur le nombre de déplacements
  • coffres au trésor avec bonus de point/carte du donjon/aide diverses
  • un bloc blanc à "peindre" avec un colorant à collecter au fil de l'aventure (sorte de joker)
  • des monstres
  • un boss
Et n'oublie pas un portage pour TI-Nspire, stp. ;)

Téléchargement : archives_voir.php?id=2831121

-
Search
-
Social TI-Planet
-
Featured topics
Ndless for CX 4.5.5 / CX II 6.2.0
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 !
12345
-
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.
2073 utilisateurs:
>2050 invités
>16 membres
>7 robots
Record simultané (sur 6 mois):
43991 utilisateurs (le 10/09/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)