Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
librairie USB
13-12-2014, 05:54 PM,
#11
RE: librairie USB
ok ok d'accord je viens de comprendre ce qui me manquais.
bon par contre je but sur un sujet de base de la programmation C. D'abitude je programme mes pic avec le copilateur basic mikrobasic pro, et du coup j'ai beaucoup de mal à m'adapté au C.
Mon probleme est que je ne connais trés mal le C et que je galere.
du coup question bete, est ce que le complateur utilise toutes les libraires de base du C?
comme par exemple les librairie de convertion de type de variable.
en gros je transfert des entier dur 1 bits et jusqu'a présents je n'ai reussi qu'a faire passer des caracteres.....
Reply
13-12-2014, 10:39 PM,
#12
RE: librairie USB
(13-12-2014, 05:54 PM)cacoucatatonique Wrote: ok ok d'accord je viens de comprendre ce qui me manquais.
bon par contre je but sur un sujet de base de la programmation C. D'abitude je programme mes pic avec le copilateur basic mikrobasic pro,  et du coup j'ai beaucoup de mal à m'adapté au C.
Mon probleme est que je ne connais trés mal le C et que je galere.
du coup question bete, est ce que le complateur utilise toutes les libraires de base du C?
comme par exemple les librairie de convertion de type de variable.
en gros je transfert des entier dur 1 bits et jusqu'a présents je n'ai reussi qu'a faire passer des caracteres.....

Pouvez-vous nous donner complètement vos exemples de transfert d'entiers et de caractères sinon vous parlez "dans le vide" ? Ainsi nous pourrons mieux voir ce qui se passe. Utilisez la procédure "attachment" pour communiquer vos fichiers.
Par ailleurs quel interface utilisez-vous côté PC ? Cet interface a son importance en particulier du point de vue codage et décodage des éléments transitant sur le bus USB.
André
Reply
15-12-2014, 10:17 AM,
#13
RE: librairie USB
(13-12-2014, 10:39 PM)gtcbreizh Wrote:
(13-12-2014, 05:54 PM)cacoucatatonique Wrote: ok ok d'accord je viens de comprendre ce qui me manquais.
bon par contre je but sur un sujet de base de la programmation C. D'abitude je programme mes pic avec le copilateur basic mikrobasic pro,  et du coup j'ai beaucoup de mal à m'adapté au C.
Mon probleme est que je ne connais trés mal le C et que je galere.
du coup question bete, est ce que le complateur utilise toutes les libraires de base du C?
comme par exemple les librairie de convertion de type de variable.
en gros je transfert des entier dur 1 bits et jusqu'a présents je n'ai reussi qu'a faire passer des caracteres.....

Pouvez-vous nous donner complètement vos exemples de transfert d'entiers et de caractères sinon vous parlez "dans le vide" ? Ainsi nous pourrons mieux voir ce qui se passe. Utilisez la procédure "attachment" pour communiquer vos fichiers.
Par ailleurs quel interface utilisez-vous côté PC ? Cet interface a son importance en particulier du point de vue codage et décodage des éléments transitant sur le bus USB.
André


bonjour,
oui tu as raison je vais te poster mon projet complet en l'état actuel (qui n'est pas enorme).
Je me suis intéréssé au python pour réaliser facilement des interface de dialogues avec mes cartes electroniques à µC à base de PIC.
Mon premier projet qui disposera d'une interface complete sera un ensemble de laser game.
Je me suis orienté vers un pinguino pour ca facilité de programmation, parceque un certain nombre de pic compatible n'on pas besoin de quartz, alimenté en 3.3V dispose d'un port USB tous intégré ect....
La partie gestion de donnée pendant le jeux sera simple, le rayon laser sera le voie de communication RS232 pour transmettre d'identifient du flingueur au flingué lol.
Le port usb va me servir à envoyer au pc l'ensemble des info pour editer un petit tableau afin d'indiquer les scores.

Donc dans un premier temps il y aura un pop up de paramétrage des joueurs dont voila le code python:

Code:
# -*- coding: cp1252 -*-
def start_it():
    global Nb_joueur_v
    global ID_joueur_v
    global SN_joueur_v

    Nb_joueur_v = int(Nb_joueur.get())
    ID_joueur_v = int(ID_joueur.get())
    SN_joueur_v = str(SN_joueur.get())
    
    print(Nb_joueur_v)
    print(ID_joueur_v)
    print(SN_joueur_v)


    wb = load_workbook('Table joueur.xlsx')
    ws = wb.active
    ws['A2'] = Nb_joueur_v
    
    if ID_joueur_v==1:
        ws['B2'] = SN_joueur_v
        ws['A3'] = SN_joueur_v
    if ID_joueur_v==2:
        ws['C2'] = SN_joueur_v
        ws['A4'] = SN_joueur_v
    if ID_joueur_v==3:
        ws['D2'] = SN_joueur_v
        ws['A5'] = SN_joueur_v
    if ID_joueur_v==4:
        ws['E2'] = SN_joueur_v
        ws['A6'] = SN_joueur_v
    if ID_joueur_v==5:
        ws['F2'] = SN_joueur_v
        ws['A7'] = SN_joueur_v
    if ID_joueur_v==6:
        ws['G2'] = SN_joueur_v
        ws['A8'] = SN_joueur_v
    if ID_joueur_v==7:
        ws['H2'] = SN_joueur_v
        ws['A9'] = SN_joueur_v
    if ID_joueur_v==8:
        ws['I2'] = SN_joueur_v
        ws['A10'] = SN_joueur_v

    #ws(1, ID_joueur_v+1) = Nb_joueur_v
    #a=ID_joueur_v+1
    #a= ws.cell(row = 1, column = 2)
    #print (a)
    #ws.cell(1,2) = SN_joueur_v
    wb.save("Table joueur.xlsx")

from xlrd import open_workbook,cellname
from xlwt import *
import xlsxwriter
import os
from Tkinter import *
from operator import add
from openpyxl import Workbook,load_workbook

fen1 = Tk()
toto = "Nb joueur"
txt1 = Label(fen1, text =toto)
txt1.grid(row =1, column =1)

Nb_joueur = Entry(fen1)
Nb_joueur.grid(row =1, column =2)

toto = "Numéro du joueur"
txt2 = Label(fen1, text =toto)
txt2.grid(row =2, column =1)

ID_joueur = Entry(fen1)
ID_joueur.grid(row =2, column =2)

toto = "Surnom du joueur"
txt3 = Label(fen1, text =toto)
txt3.grid(row =3, column =1)

SN_joueur = Entry(fen1)
SN_joueur.grid(row =3, column =2)


BP_ok = Button(fen1, text='OK', width =8, command=start_it)
BP_ok.pack()

BP_ok.grid(row =4, column =2)

fen1.mainloop()

Ce code edite un pop up dans lequel on renseigne le nombre de joueur , l'ID du joueur et le surnom.
Le tous stocké dans un BDD et envoyé dans le PIC pour paramétrer son code via USB.
et pour la suite bein je me suis arrété là car je n'avance pas comme je voudrai parceque je bute sur certains points en pythons que je vois avec des potes informaticiens et la comm USB pyhon/pinguino.

Le fait de pouvoir parameter a la volé chaque joueur afin que le matos soit totalement flexible.
pour le moment sur la com USB je suis encore au stade j'envoie un entier au µC je l'incremente et je le renvoie pour l'afficher sur le pop up sur le PC.
Reply
15-12-2014, 04:00 PM,
#14
RE: librairie USB
J'ai fait tourner ton programme python. Je crois comprendre qu'il sert à créer un fichier excel contenant une matrice sans doute de scores (??) entre joueurs, l'identification des scores se faisant à l'aide d'une ligne et d'une colonne contenant les surnoms des joueurs.

Ce que je ne vois pas c'est le rôle précis des PICS dans le jeu et les procédures de réception et transmission de données entre un PIC et le PC coordinateur. Je suppose que chaque joueur dispose d'un PIC ?
A+
Reply
15-12-2014, 04:40 PM,
#15
RE: librairie USB
(15-12-2014, 04:00 PM)gtcbreizh Wrote: J'ai fait tourner ton programme python. Je crois comprendre qu'il sert à créer un fichier excel contenant une matrice sans doute de scores (??) entre joueurs, l'identification des scores se faisant à l'aide d'une ligne et d'une colonne contenant les surnoms des joueurs.

Ce que je ne vois pas c'est le rôle précis des PICS dans le jeu et les procédures de réception et transmission de données entre un PIC et le PC coordinateur. Je suppose que chaque joueur dispose d'un PIC ?
A+

oui chaque joueur aura un pistolet laser avec un gilet composé de capteur une batterie et un pic qui va gérer l'ensemble de l'electronique. Cha que joueur sera autonome et totalement adaptable.
Person je vis tous faire avec des PIC pinguino ou pas mais si une personne veux par exemple fabriquer du materiel avec des atmel arduino ou pas il pourr car les transmissions son classiques.

Ce code python va servir d'une part à éditer une BDD local (alors mon exemple est en excel mais je suis en train de voir sur les conseils d'un pote du boulot avec SQLITE) et d'une autre part à préparer le jeu coté pistolet afin d'enregistrer l'identité du joueeur via USB (non réaliser à ce jour, enfin je le ferai le jour ou j'arriverai à maitriser l'USB coté python et coté pinguino). Le rayon laser sera sur la sortie RS232 pour transmetre l'ID du joueur afin de l'identifier pendant la partie.

A la fin de la partie, a tour de role, les pistolets seront connecté en USB pour transferer les données via USV vers une fonction PYTHON (non edité à ce jour) puis stocké dans une BDD pour etre afficher à l'ecran à la demande pour connaitre le classement.
Reply
15-12-2014, 06:18 PM,
#16
RE: librairie USB
J'entrevois le jeu mais je serai incapable d'expliquer tous les éléments et mécanismes à une personne, intéressée par le sujet, qui m'interrogerait.
Concernant les échanges (par USB) PC+Python avec le pic (ou l'atmega ?) les 2 exemples pde et python sont un base adaptable à tes besoins. Si tu buttes sur cette partie d'échanges tu peux toujours nous interroger.
Pour le reste c'est ton affaire. Bon courage.
André
Reply
15-12-2014, 11:42 PM,
#17
RE: librairie USB
(15-12-2014, 06:18 PM)gtcbreizh Wrote: J'entrevois le jeu mais je serai incapable d'expliquer tous les éléments et mécanismes à une personne, intéressée par le sujet, qui m'interrogerait.
Concernant les échanges (par USB) PC+Python avec le pic (ou l'atmega ?) les 2 exemples pde et python sont un base adaptable à tes besoins. Si tu buttes sur cette partie d'échanges tu peux toujours nous interroger.
Pour le reste c'est ton affaire. Bon courage.
André

bien evidement je vous ai donné des explications déja bien détaillé car vous n'etes pas des débutants en electroniques.
Si je doits expliquer le systemes à des personnes qui ne comprennet rien à l'electronique je resteraialors plus simple du style:
chaque joueur à un pistolet et un gilet muni d'une baterie et de détecteurs.
avant de commencer la partie je programme les pistolets par un numero de participant qui sera accompagné d'un surnom sur un programme informatique.
Quand un jour vise et tire le rayon laser est composé du numero du joueur Si un joueur est touché, la carte electronique sera informé de l'identité du tireur et ajoutera 1 pts dans une case memoire.
A la fin de la partie et chacun a son tour on connecte un cable usb afin d'envoyer les resultats à l'ordinateurs et déterminer le gagnant.

vila une descrition pour personne curieuse non electronicien.

je te confirme que l'origine de ce post est bien due à une incomprehention de ma part sur la communication USB entre l'µC et le code python.
J'ai eu des informations qui m'oriente vers une voie qui semble dégagé, il faut que je face des tests et si je rencontre un obstacle je reviendrai vous voir pour vous demander conseil.
Mais avant il va falloir que je surmonte la programmation C......
Reply
16-12-2014, 02:22 PM,
#18
RE: librairie USB
bonjour,
alors je viens de faire un test de com ca fonctionne mais j'ai voulu le modifier pour mes besoins et la j'ai un probleme.
En piece joint, j'ai mis me code pinguino et voila le code python:
Code:
#!/usr/bin/env python
# The initial program is from Yeison Cardona to test usb exchange with Pinguino V2.12
# Here it is modified to test usb exchange with Pinguino V4 - author A. Gentric

import usb
import time

VENDOR = 0x04D8
PRODUCT = 0xFEAA

TIMEOUT = 10000
INTERFACE = 0
ENDPOINT_OUT = 0x01

# if bootloader v4.x
CONFIGURATION = 0x01
ENDPOINT_IN = 0x81

# if bootloader v2.x
#CONFIGURATION = 0x03
#ENDPOINT_IN = 0x82

def read(dh, length, timeout = 0):
  return dh.bulkRead(ENDPOINT_IN, length, timeout)

def write(dh, buffer, timeout = 0):
  return dh.bulkWrite(0x01, buffer, timeout)

busses = usb.busses()

# Search pinguino between all the usb devices
for bus in busses:
  devices = bus.devices
  for dev in devices:
    if dev.idVendor==VENDOR and dev.idProduct==PRODUCT:
      pinguino = dev

# Get a device handler for the usb device
dh = pinguino.open()
dh.setConfiguration(CONFIGURATION)
dh.claimInterface(INTERFACE)

buf="1"

while 1 :
    
    # send data to pinguino
    response=False
    while response==False :
      try :
        dh.bulkWrite(ENDPOINT_OUT, buf, TIMEOUT)
        response=True
      except usb.USBError as err:
        pass
    print "Sent :", buf

    # check if pinguino return the message we've just sent
    message = ""
    lu = None
    while lu==None :
      try :
        lu=dh.bulkRead (ENDPOINT_IN, 64, TIMEOUT)
      except usb.USBError as err:
        pass
    for i in lu:
      message += chr(i)
    print "Received :", message

le code python fait passer le caracter "1".
sans rien modifier tel quel et meme le code pinguino, le caractere va bien dans le pinguino et reviens bien dans python.
Dans le code pyton j'ai voulu faire un test de faire passer le 1 sans le déclaré comme caractere, et bang erreur :
Code:
>>> ================================ RESTART ================================
>>>

Traceback (most recent call last):
  File "C:\pinguino-ide\v11\examples\04.Communication\USB\Bulk\USB_bulk_write_to_pinguino.py", line 51, in <module>
    dh.bulkWrite(ENDPOINT_OUT, buf, TIMEOUT)
  File "C:\Python27\lib\site-packages\usb\legacy.py", line 148, in bulkWrite
    return self.dev.write(endpoint, buffer, self.__claimed_interface, timeout)
  File "C:\Python27\lib\site-packages\usb\core.py", line 632, in write
    _interop.as_array(data),
  File "C:\Python27\lib\site-packages\usb\_interop.py", line 135, in as_array
    a.fromstring(data)
TypeError: must be string or read-only buffer, not int
>>>

donc moi en moitier bete en englais mais je comprend que seul un string peut passer par l'USB.
Du coup je me suis mis à rechercher une fonction de convertion dans le pinguino mais je ne trouve rien.

Je suis tombé sur un truc bizare qui dit de faire :
Code:
u8 receivedbyte;
char buffer[64];
int toto;
toto=receivedbyte;

et quand je fait ca rien de remonte dans le code python.
et du coup bein je suis dans les choux.
avez vous une idée?
mon second test que je cherche à effectuer est d'envoyer une valeur vers le pinguino, de l'incrementer et de le renvoyer au python, deja au mions une fois.......
merci d'avance


Attached Files
.pde   USB_bulk_test lecture ecriture.pde (Size: 1.4 KB / Downloads: 1)
Reply
16-12-2014, 05:16 PM,
#19
RE: librairie USB
Pour le 1er pb, envoi d'une valeur numerique par USB de Python à Pinguino :

val=23 # je prends un nombre supérieur à 9, dans le cas contraire c'est plus simple
buf=str(val)
... # voir l'exemple USB_write_to_pinguino.py
dh.bulkWrite(ENDPOINT_OUT, buf, TIMEOUT)

pinguino va donc recevoir une chaîne de 2 caractères :

int cont;
int rang, i;
if(BULK.available())
receivedbyte = BULK.read(buffer);
buffer[receivedbyte] = 0; // crée un chaîne contenant un nombre de caractères = receivedbyte

if (receivedbyte > 0)
{ // on fait l'hypothèse que des nombres sont envoyés
conver = 0;
rang=1;
// conversion d'un nombre représenté alphabétiquement en valeur numérique
for( i=receivedbyte; i > 0; i--)
{
conver += (buf[i-1]-0x30)*rang; // (buf[i-1]-0x30) convertit un caractère alphabétique 0 à 9 en valeur hexa 0 à 9
rang *=10;
}
// maintenant conver peut être traité mathématiquement et le résultat stocké avant transmission

}

Je te poste plus tard ce qu'il faut faire dans l'autre sens : envoi de conver de Pinguino à Python.
Je regarde la 2è question. Patience !
Reply
16-12-2014, 06:48 PM, (This post was last modified: 16-12-2014, 08:28 PM by gtcbreizh.)
#20
RE: librairie USB
Je te joins la solution pinguino. J'ai fait l'hypothese que le compteur serait < 100. Il est facile d'aller plus loin avec ce que j'ai fait.
En résumé on reçoit un nombre en format 'string'. On le décode en valeur numérique et on ajoute le traitement souhaité, par ex. ajout de 1.
Puis on renvoie le résultat en recodant en 'string'.
J'ai testé le python envoie 23, il récupère 24.

Danc ce que tu avais fait : ne pas confondre receivedbyte (longueur de la chaîne reçue, stockée dans inbuffer) et le contenu de inbuffer.
Je suis d'accord le nom est mal choisi !
D'autre part l'IDE n'aime les noms de fichier contenant des espaces. J'ai eu des pbs avec ton fichier d'où le nouveau nom.

NB : Je prépare une version avec un sous-programme de conversion string vers entier et un second faisant l'inverse. Ce sera plus clair ainsi.
A+


Attached Files
.pde   USB_bulk_test_lect_ecrit.pde (Size: 2.17 KB / Downloads: 4)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)