Bonjour,
L'inscription sur ce forum et les premiers messages sont modérés par un Administrateur.
Ce n'est pas très convivial mais malheureusement nécessaire suite au spam intensif de nos amis russes.
Cordialement,
Dominique

Erreur name 'ok' isn't defined

Le langage MicroPython, l'API machine (I2C, SPI, UART, Pin, etc)
Forum rules
Vous aimez MicroPython? Nous aussi! Ces forums sont destinés aux amoureux de Python sur MicroContrôleur.
Le support se fait sur base volontaire et uniquement pour des produits officiels (pas de copie SVP).
Le forum de MicroPython.org sera une excellente référence documentaire (en anglais).

Merci de suivre les recommandations suivantes.
Pensez à:
  • Titre claire: permettant d'identifier le produit et le problème
  • Contenu complet: schema, message d'erreur, etc (tout ce qui permet d'aider à distance).
  • Fichier joint: Max 300 Ko
  • Courtoisie et précision
Post Reply
Gustave
Posts: 12
Joined: Wed 7 May 2025 09:10
Location: Aisne
Contact:

Erreur name 'ok' isn't defined

Post by Gustave »

Bonjour,
J’utilise les écrans HMI (human machine interface) NEXTION parce qu’ils sont très pratique, on dessine son interface avec les outils disponibles et on programme ensuite, ils sont utilisables avec une liaison série RX TX simple. Image
J’ai donc fait une bibliothèque de fonctions(nex.py) et je l’ai placé dans la racine de mon module.
Tout fonctionne , mais je n’arrive pas à placer la fonction d’interrogation nex_return dans la bibliothèque. Dès que je la transfert du programme principal dans la bibliothèque j’ai un retour :

Traceback (most recent call last):
File "<stdin>", line 27, in <module>
NameError: name 'ok' isn't defined

Code: Select all

def nex_return():  
  while True:
    #Retrieve commands from Touchpanel
    global ok, rxdata,tabreturn
    if nex_comm.any():
     rxdata=nex_comm.read()
     tabreturn=list(rxdata)
     #print ('tab:',tabreturn)
     ok=True
     break
    else :
     ok=False
     break
   
j'aimerai aussi mettre un return das cette fonction.
je m'arrache les 3 poils qui me reste sur le crane.
merci de votre aide
:?: :roll:
Attachments
2025-06-30_150110.png
2025-06-30_150110.png (4.12 KiB) Viewed 4689 times
Gustave ;)
________________________________
le plaisir d'apprendre et de partager.
Gustave
Posts: 12
Joined: Wed 7 May 2025 09:10
Location: Aisne
Contact:

Re: Erreur name 'ok' isn't defined

Post by Gustave »

Pas de nouvelles ici, j'ai perdu mes derniers cheveux. Mais j'ai trouvé la solution sur internet dans le forum raspberry.
j'ai supprimer ma variable "ok" qui n'était pas utile.
les écrans Nextion renvoient une réponse très formaté : un numéro de type de réponse, un numéro d'outil concerné et/ou une réponse et trois fois Hff le caractères(255).
donc il suffisait d'attendre que le port série renvoie la réponse que je rentre dans une liste tabreturn[]
et que je retourne cette liste en fin de réception.

Code: Select all

tabreturn=[] * 20

def nex_return():  
  while True:
    #Retrieve commands from Touchpanel
    global rxdata    
    if nex_comm.any():
     rxdata=nex_comm.read()
     #print (rxdata)
     tabreturn=list(rxdata)     
     if tabreturn:    
      return tabreturn
     break
    else:
     break
Si vous voulez le code complet envoyez moi un mp
Gustave ;)
________________________________
le plaisir d'apprendre et de partager.
User avatar
Dominique
Administrateur du site
Posts: 337
Joined: Sun 17 May 2020 22:43

Re: Erreur name 'ok' isn't defined

Post by Dominique »

Bonjour Gustave,

Je suis désolé, je ne suis pas passé sur le forum depuis un moment.
J'ai vu que tu avais trouvé une solution a ton problème entre temps. Merci d'avoir partagé ta solution avec nous.

Pour le partage de code, tu peux publier sur GitHub et placer le lien sur le Forum.
Dominique, MC Hobby.
User avatar
Dominique
Administrateur du site
Posts: 337
Joined: Sun 17 May 2020 22:43

Re: Erreur name 'ok' isn't defined

Post by Dominique »

Bonjour Gustave,

Voici quelques informations concernant ton code d'exemple.

La déclaration tabreturn=[] * 20

20 fois une liste vide donne toujours une liste vide. Tu peux donc écrire

Code: Select all

tabreturn=[]
Timeout sur port série

Sais-tu que lors de la création de l'objet UART tu as la possibilité de définir un time_out entre la réception de 2 caractères successif et un timeout pour la réception d'un séparateur de ligne. C'est très pratique pour permettre a read() de ne pas renvoyer trop vite le contrôle à ton code et attendre un poil plus longtemps après un prochain caractère.

Tel que ton code est construit, si le Nexion met un peu trop de temps pour l'envoi d'un caractère (disons a cause du traitement d'une interruption), le read() pourrait très bien rendre la main à ton script avant que la réponse complète soit reçue.

Boucle while inutile

La boucle while n'est pas utile parce que si nex_comm.any() est True alors is y a un break plus loin et s'il est False il y a un break quand même.

La fonction retourne un contenu qui est en fait le même que rxdata mais organisé an list. Peut-être serait-il plus opportun de retourner True quand il y a eu du contenu ou False quand il n'y en a pas eu.

Peut-être serait-il plus opportun d'écrire le code comme suit:

Code: Select all

def nex_return():  
  """ Wait to receive a response. Return True is any response received otherwise False. Response is stored into the global rxdata """
  #Retrieve commands from Touchpanel
  global rxdata, nex_comm
  if nex_comm.any() > 0:
     rxdata=nex_comm.read()
     return True
  return False
Avec comme exemple d'utilisation

Code: Select all

#declaration of global rxdata
rxdata = None
nex_comm = ... declare the UART ...

... some code ...
if nex_return():
  tabreturn = list(rxdata)
  # do work on my tabreturn list.
... some code ...
Dominique, MC Hobby.
Gustave
Posts: 12
Joined: Wed 7 May 2025 09:10
Location: Aisne
Contact:

Re: Erreur name 'ok' isn't defined

Post by Gustave »

Merci Dominique,
Je reviens de "vacances" ( période amusante où on doit surveiller et occuper des petits-enfants imprévisibles :mrgreen: :lol: )
Je vais modifié les programmes en fonctions de tes remarques. pour l'instant je ne me sens pas encore assez solide en µpython pour publier sur Github.
G.
Gustave ;)
________________________________
le plaisir d'apprendre et de partager.
Post Reply