int temps = 0; //Variable utilisée pour définir le temps de sortie de la tige.
temps est un entier donc limité à la fourchette -32768 à 32767
Pour aller au-delà il faudrait utiliser un long au lieu d'un int.
int temps = 0; //Variable utilisée pour définir le temps de sortie de la tige.
temps est un entier donc limité à la fourchette -32768 à 32767
Pour aller au-delà il faudrait utiliser un long au lieu d'un int.
Ce que vous appelez temps n'est en fait que le comptage du nombre d'itération des boucles while.
Ce système n'est pas très fiable si le moteur cale ou s'il ralenti (point dur par exemple) vous ne retrouverez pas la position.
Sorties de leur contexte, ces valeurs ne nous aides pas vraiment à comprendre votre problème.
Il faudrait ajouter en commentaire si c'est toujours le même code barre que vous lisez ou non.
Donnez le code utilisé pour lire vos codes barre.
Qu'appelle t'on base de données ?
Un scanner de codes barre se configure, à l'aide de codes barres figurant dans la documentation.
Cela a t-il été fait ?
Oui nous avons déjà configuré notre scanner de code barre
Il serait bien de répondre aux questions, pas simplement la dernière ![]()
La base de donnée correspondrait aux différentes variables string définies par nous. Les informations contenues dans ces variables seraient les codes hexa correspondants aux différents codes barres. Ainsi cela permettrai de comparer la variable "codeLu" de la douchette avec celles de la base de donnée et donc appliquer le programme moteur correspondant.
Pourquoi passer par des string si au final les codes sont en hexadécimal? C'est une complication supplémentaire.
Donc, il s'agit d'un tableau en mémoire, pas d'une base de données.
En général un lecteur de codes barres envoie des caractère ASCII, terminés par un retour chariot ('\r'). Il suffit de concaténer les caractères reçus dans une chaîne de caractères, et lorsque l'on a lu '\r', ajouter '\0' à la chaîne et comparer à chaque élément du tableau, et faire le traitement associé.
J'aimerais voir le sketch qui vous permet de lire les codes barres et un exemple de ce qu'il affiche.
Comme dit plus haut, votre variable "temps" est en fait une variable de nombre de pas, donc physiquement une cote de sortie de votre axe. Effectivement vous avez besoin d'un "long integer" pour cette cote. Votre séquence à deux vitesses (50 ou 10 us entre deux pas) est un moyen d'éviter le décrochage de votre moteur, une accélération à deux paliers. Si vous ne faites pas ça, on peut lire sur votre commentaire que "le moteur patine" : en fait, il "décroche", ce qui est assez différent d'un patinage mécanique. Vous auriez meilleur compte à utiliser une bibliothèque de commande de moteurs pas à pas qui vous permettra de spécifier vos mouvements avec une course à accomplir, une vitesse max et une accélération. Certaines sont mêmes un peu plus sophistiquées puisque vous pouvez définir un jerk maximum. Typiquement votre problème est le b-a-ba de la robotique ou de la machine spéciale. Vous pouvez y arriver avec un programme simpliste de débutant, comme le vôtre, mais si vous voulez progresser un peu il va falloir lire des tutos sur les machines à état, les bibliothèques de commande de moteurs pas à pas, tenter de programmer votre truc de manière propre et venir demander de l'aide lorsque vous en serez à l'interaction entre une machine à état et une bibliothèque de gestion de moteurs pas à pas.
Effectivement nous n'y avions pas pensé merci.
Oui voilà, excusez nous mais nous débutons en programmation et j'ai employé un terme générique. En faisant nos recherches, nous avons trouvé ce TP qui s'approche de ce que nous voulons. Dans notre cas, les leds seraientremplacées par les programmes moteurs correspondants. [TP] Baignade interdite ! • Le blog d'Eskimon
Voici le sketch. Il s'agit de l'exemple USBHID_DESK de la bibliotheque USB host shield library 2.0
#include <usbhid.h>
#include <hiduniversal.h>
#include <hidescriptorparser.h>
#include <usbhub.h>
#include "pgmstrings.h"
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
class HIDUniversal2 : public HIDUniversal
{
public:
HIDUniversal2(USB *usb) : HIDUniversal(usb) {};
protected:
uint8_t OnInitSuccessful();
};
uint8_t HIDUniversal2::OnInitSuccessful()
{
uint8_t rcode;
HexDumper<USBReadParser, uint16_t, uint16_t> Hex;
ReportDescParser Rpt;
if ((rcode = GetReportDescr(0, &Hex)))
goto FailGetReportDescr1;
if ((rcode = GetReportDescr(0, &Rpt)))
goto FailGetReportDescr2;
return 0;
FailGetReportDescr1:
USBTRACE("GetReportDescr1:");
goto Fail;
FailGetReportDescr2:
USBTRACE("GetReportDescr2:");
goto Fail;
Fail:
Serial.println(rcode, HEX);
Release();
return rcode;
}
USB Usb;
//USBHub Hub(&Usb);
HIDUniversal2 Hid(&Usb);
UniversalReportParser Uni;
void setup()
{
Serial.begin( 9600 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay( 200 );
if (!Hid.SetReportParser(0, &Uni))
ErrorMessage<uint8_t>(PSTR("SetReportParser"), 1 );
}
void loop()
{
Usb.Task();
}
Merci de votre aide pour solutionner ce problème. Pour le moment nous allons rester sur notre petit programme car il ne nous reste que 4 semaines sur nos 10 semaines de stage. Mais nous allons néanmoins étudier d'autres solutions comme vous l'avez suggéré. Nous venons de configurer la bibliothèque Quickstep de Vileroi http://dansetrad.fr/Orgue_de_barbarie/QuickStep/Methodes.html et nous l'utiliserons si nous en avons le temps. Pour l'instant nous allons concentrer nos efforts sur la douchette afin de relier les 2 programmes.
Je ne vois pas comment ce sketch pourrait être capable de lire des codes barres.
Il se contente d'afficher une information disant de quel périphérique il s'agit (keypad, ce qui est vrai. Un lecteur de codes barres est un clavier).
Effectivement mais lorsque l'on scan un code barre, il nous renvoie les valeurs que vous trouverez dans la capture d'écran plus haut. Et c'est le seul programme de la bibliothèque qui nous renvoie quelque chose, les autres laissant la douchette en état de "veille" ne scannant rien.