RS232 sur PcDuino

Bonjour à tous,
Me revoilà avec un problème concernant PcDuino et l’Uart RS232…
J’utilise ce code mais celui ci me fait tourner le processeur à 100%… Quelqu’un n’aurait il pas un bout de code pour éviter de le monopoliser. J’ai déjà utilisé un Timer pour cadencer la boucle mais cela ne suffit pas, ayant une boucle dans le programme, je pense que le problème est la… pouvez vous m’aider??? Merci d’avance

#!/usr/bin/python
# -*- coding: utf-8 -*-

# code Python obtenu avec l'IDE Pyduino - www.mon-club-elec.fr 

from pyduino_pcduino import * # importe les fonctions Arduino pour Python

# entete declarative
noLoop=True # bloque loop auto - utilisation timer ici 

DEL=2   # declare la broche a utiliser



#--- setup --- 
def setup():



	#-- gestion port série
	Uart.begin(9600) # debit
	print("Initialisation Port Série : /dev/ttyS1 @ 9600 = OK ")
	delay(5) # laisse temps initialisation serie 


	pinMode(DEL,OUTPUT) # met la broche en sortie
	digitalWrite(DEL,LOW) # eteint les broches
	Serial.println("La broche " +str(DEL)+ " est en sortie !")
	
	

	loop() # premier appel loop

# -- fin setup -- 

# -- loop -- 
def loop():
	
	
		
	while not Uart.available(): # attend caracteres entrant = attend reponse
		pass # ne fait rien
	delay(10)  # laisse le temps aux caracteres d'arriver...

	while Uart.available(): # pour lire tout ce qui entre
		chaine=Uart.waitingAll() # lit chaine en reception jusqu'a plus rien...
	if not Uart.available(): delay(10)   # attend caracteres entrant si plus rien

	print "chaine recue = "+ chaine
	
	
	
	if str(chaine)=="0x13" :
			digitalWrite(DEL,HIGH) # allume la LED
	elif str(chaine)=="0x12" :
			digitalWrite(DEL,LOW) # eteint la LED si negatif
	
	
	
	timer(100, loop) # appelle fonction loop apres intervalle en ms

        # resultats sur pcduino avec htop : 
        # en mode loop auto permanent : usage CPU = 100%
        # 100 ms ~10 appels par seconde = 5% usage CPU 
        # 10 ms ~ 100 appels par seconde = 20% usage CPU 
        # 5 ms ~ 200 appels par seconde = 30% usage CPU => bon compromis
        # 1 ms ~ 1000 appels par seconde = 60% usage CPU
        # 0.5ms ~ 2000 appels par seconde = 75% usage CPU
        # 0.1ms ~ 10 000 appels par seconde = 95% usage CPU

# -- fin loop --

Bonjour,

Tu dis que ça ne suffit pas, mais à la fin de ton programme il y a des commentaires qui montrent que plus le timer est long, moins le CPU est chargé. Ces commentaires ne sont pas bons ?

A part ça, à quelle cadence la chaine s'affiche-t-elle ? Ca colle avec ton timer ?

Bonjour et merci de ta réponse....
Les commentaires en bas, sont ceux pour lesquels mes autres codes fonctionnent. d'habitude, cela marche comme indiqué en bas. par contre, la avec la boucle, cela ne fonctionne pas et le CPU est à 100%...
J'ai une chaine qui arrive lorsque je donne un ordre vocal à mon mini pc. Cela peut être au maximum 1 ordre toutes les minutes et par moment aucun ordre pendant des heures.
La com vient d'un mini pc qui tourne exclusivement pour la reconnaissance vocale et je transmet des ordre au pcduino via un port USB.
Dans l'attente de ton retour, je te remercie d'avance
@+

Ceci ne serait-il pas superflu ?

	while not Uart.available(): # attend caracteres entrant = attend reponse
		pass # ne fait rien

Si je ne mets pas cela, j’obtiens des erreurs

Traceback (most recent call last):
  File "/media/stockageAFA/PCDUINO_RS232/PCDUINO_RS232_AFA_V_1_0_5.py", line 89, in <module>
    setup() # appelle la fonction setup
  File "/media/stockageAFA/PCDUINO_RS232/PCDUINO_RS232_AFA_V_1_0_5.py", line 39, in setup
    loop() # premier appel loop
  File "/media/stockageAFA/PCDUINO_RS232/PCDUINO_RS232_AFA_V_1_0_5.py", line 56, in loop
    print "chaine recue = "+ chaine
UnboundLocalError: local variable 'chaine' referenced before assignment

Il faut initialiser la chaine en début de loop.

comment ????
Je débute sur pyduino...

arnaudf09:
comment ???
Je débute sur pyduino…

C’est du Python standard, pas lié à la plateforme:

chaine = ""

Merci beaucoup,
cela fonctionne correctement, l'usage du CPU depend bien de mon Timer maintenant
@+

Re,
Peux tu me dire comment on declare un tableau sous pyduino, j'ai essayé differentes méthodes sans succes.
Merci d'avance

Qu'est-ce que tu as essayé par exemple ?

Str [8]={0, 2, 4, 6, 8, 7, 5, \0};

Mais a chaque fois j'ai des erreurs de syntaxe...

Ca ne risque pas de fonctionner, tu es en train d’écrire du C.

Une petite lecture avant de t’endormir:
http://apprendre-python.com/page-apprendre-listes-list-tableaux-tableaux-liste-array-python-cours-debutant