Bonjour,
je suis débutante dans la programmation Arduino; Mon projet consiste à récupérer des données depuis un ruban perforée qui commande une ancienne machine,ensuite les enregistrer dans un fichier sur ordinateur afin de commander directement la machine avec le pc avec ces fichier et enlever le ruban perforée tout en ralisant en réalisant une IHM
Dans un premier temps Avec ARDUINO UNO j'ai élaboré un petit programme qui lit les données gravées sur le ruban perforée. Le problème c'est que j'arrive pas à stocker ces données sur mon pc dans un fichier texte en faisant quelque recherche j'ai trouvé qu'avec Processing il es possible de le faire. S'il vous plait si vous savez comment le faire je vosu serait reconnaissante.
N.B: dans de ruban il y a 600 opérations et dans chaque opérations il y a 192 bits.et il faut que toutes les données passent directement et s 'enregistrent dans un fichier texte sans looper aucun bit.
Merci du temps que vous allez me consacrez.
Voila le code avec lequel j'ai acquis les données
int i,j; int time_spkt=11; boolean datas[8][24]; void setup() { for(i=2;i<10;i++) { pinMode(i,INPUT);} Serial.begin(115200); } void loop() { while(digitalRead(10)==1); while(digitalRead(10)==0); for (j=0;j<24;j++) { for (i=0;i<8;i++) { datas[i][j]=digitalRead(i+2); } delay(time_spkt); } for(j=0;j<24;j++) { for (i=0;i<8;i++) { Serial.print( datas[i][j]); } Serial.print("\n"); } Serial.print("\n ******************************************************************"); Serial.print("\n"); delay(5000); }
Hors ligne
Désolé mais il y a un truc que je comprends pas
Tu dis que dans ton ruban il y a 600 opérations avec 192 bits par opérations donc tu dois stocker 600*192 bits
Or je vois que pour acquérir ces informations tu déclares un tableau de type boolean jusque là pourquoi pas...
mais la taille du tableau est de 8*24 ????
Comment tu fais entrer les 600*192 bits dans un tableau 8*24 de type boolean ?
Dernière modification par top (2014-04-24 11:52:32)
Hors ligne
Bonsoir,
Avant de passer à la partie Processing et la réception des données, il serait bon d'affiner la collecte des éléments.
Si tu pouvais joindre une image de ta bande perforée afin que nous puissions t'aider au mieux.
Je te propose ceci :
uint8_t data[24];
C'est un tableau d'entier non-signés qui sont stockés sur 8bits.
D'autre part, il vaut mieux utiliser Serial.write :
http://arduino.cc/en/Serial/Write
En plus il permet d'envoyer un tableau en entier.
Pour remplir les octets, il est préférable d'utiliser l'affectation de bit.
for (int j = 0; j < 24; j++) { for (int i = 0; i < 8; i++) { if (digitalRead(i+2)) { bitSet(data[j], i); } else { bitClear(data[j], i); } } }
Voilà quelques pistes de réflexion en attendant un exemple de la bande perforée.
Hors ligne
top a écrit:
Désolé mais il y a un truc que je comprends pas
Tu dis que dans ton ruban il y a 600 opérations avec 192 bits par opérations donc tu dois stocker 600*192 bits
Or je vois que pour acquérir ces informations tu déclares un tableau de type boolean jusque là pourquoi pas...
mais la taille du tableau est de 8*24 ????
Comment tu fais entrer les 600*192 bits dans un tableau 8*24 de type boolean ?
je déclare un tableau de [24] [8] par ce que dans la machin est commandé par une pédale, à chaque fois on pédale il y a une rangée de 24 colonnes qui passent est dans chaque colonne il y a 8 lignes de datas ( trous perforés).Donc à chaque fois il y a une impulsion de la pédale qui survient et le signal spkt (strobe générer par des petits trous dans la bande) passent d'un 1 à 0 (front descendant) il faut que ma carte Arduino lisent les données passées dans le lecteur de bande.
Hors ligne
Ok je me doutais que que çà marchait comme çà mais ce que j'aimerais comprendre c'est qu'elle variable
utilises-tu pour stocker l'ensemble des données ? Il va bien falloir communiquer ces données à Processing ?
J'ai l'impression que ton programme se contente d'afficher ces données et que de plus à chaque loop, les données
précédentes sont perdues !
Dernière modification par top (2014-04-25 18:00:00)
Hors ligne
Mushussu a écrit:
Bonsoir,
Avant de passer à la partie Processing et la réception des données, il serait bon d'affiner la collecte des éléments.
Si tu pouvais joindre une image de ta bande perforée afin que nous puissions t'aider au mieux.
Voici une image de ma bande il y a 8 canaux de données et les petits trous sont le signal SPKT (strobe) qui génére les impulsions de synchronisation.
J'ai pu lire les données sur le moniteur série voici une image:
Maintenant je veux qu'une fois je pédale les données passent directement dans le fichier texte et s'enregistrent dans l'ordre par ce que après j'aurais besoin d'eux pour commander la machineen utilisant un programme qui transmettra 24 rangée de 8 datas à chassue impulsion de la pédale
Hors ligne
top a écrit:
Ok je me doutais que que çà marchait comme çà mais ce que j'aimerais comprendre c'est qu'elle variable
utilises-tu pour stocker l'ensemble des données ? Il va bien falloir communiquer ces données à Processing ?
J'ai l'impression que ton programme se contente d'afficher ces données et que de plus à chaque loop, les données
précédentes sont perdues !
J'ai utilisé pour le moment aucune variable par ce que dans le programme ci-dessus je voulais juste lire les données à chaque impulsion de la pédale sortant du lecteur bande et s'assurer qu'elles étaient les même sur la bande c'est tout
Hors ligne
Merci pour la photo, c'est beaucoup plus clair. Je ferais un truc comme cela :
A priori, tu mettais la lecture du SPKT sur le pin 10. Je te propose d'utiliser une interruption, mais il faut que ce soit le pin 2.
http://arduino.cc/en/Reference/AttachInterrupt
Cette interruption se déclenche quand le pin 2 passe de 0 à 1. On lit ensuite les différents bits. Quand on le tableau est rempli, on l'envoie.
Il est nécessaire de décaler la lecture des bits sur les pin 3 à 10.
Peux-tu vérifier que cela fonctionne avant de passer à la suite ?
- Synchronisation avec Processing (handshaking)
http://arduino.cc/en/Tutorial/SerialCallResponse
- Lecture des données et écriture d'un fichier
http://processing.org/reference/saveBytes_.html
Hors ligne
Mushussu a écrit:
A priori, tu mettais la lecture du SPKT sur le pin 10. Je te propose d'utiliser une interruption, mais il faut que ce soit le pin 2.
http://arduino.cc/en/Reference/AttachInterrupt
Cette interruption se déclenche quand le pin 2 passe de 0 à 1. On lit ensuite les différents bits. Quand on le tableau est rempli, on l'envoie.
Il est nécessaire de décaler la lecture des bits sur les pin 3 à 10.
Peux-tu vérifier que cela fonctionne avant de passer à la suite ?
J'ai voulu tester ce programme ci-dessus mais la machine est tombé en panne , une fois en marche je le testerai et afficher les résultats
Hors ligne
Pages: 1