Arduino
Arduino
Bonjour à tous,
Je débute, 45 ans, et je vous écris pour avoir une aide sur ardin.
Programmer la carte, je sais faire. Pure basic je ne connais pas.
Pourriez vous me donner un exemple en trois lignes, juste pour envoyer un caractère du pc à la carte, et recevoir de la carte au pc.
Si le langage me convient, j'achèterais une licence.
Je dis trois lignes, je ne veux pas un programme avec plusieur fonction, juste envoyer et recevoir simplement pour comprendre.
Merci beaucoup.
Je débute, 45 ans, et je vous écris pour avoir une aide sur ardin.
Programmer la carte, je sais faire. Pure basic je ne connais pas.
Pourriez vous me donner un exemple en trois lignes, juste pour envoyer un caractère du pc à la carte, et recevoir de la carte au pc.
Si le langage me convient, j'achèterais une licence.
Je dis trois lignes, je ne veux pas un programme avec plusieur fonction, juste envoyer et recevoir simplement pour comprendre.
Merci beaucoup.
- JohnJohnsonSHERMAN
- Messages : 648
- Inscription : dim. 13/déc./2015 11:05
- Localisation : Allez, cherche...
- Contact :
Re: Arduino
Vite fait, tu peux utiliser la librairie Serial Port qui permet le contrôle des ports RS232 avec PB. Comme l'Arduino est virtuellement mappé sur un port COM virtuel (il me semble), il est possible de communiquer avec depuis un programme Purebasic, d'ailleurs divers codes ont déja été postés sur le forum
Voici un tuto trés intéressant :
Arduino & Purebasic, par G-Rom
Là sur le moment je n'ai pas de code à te donner, mais le tuto de G-Rom en propose d'assez simples à comprendre. Je suppose que tu connais les bases du langage? (Au pire ca s'apprend vite )
Un peu plus bas dans le tuto, il y a un code qui recoit toute info envoyée par l'Arduino
Ben dis donc tu viens de me redonner l'envie d'acheter une Arduino, maintenant que je m'y suis un peu replongé Vu que ca fait environ 2-3 ans que j'y pense, serait p'têtre temps que je passe a la case achat
PS : Tu peux dans un premier temps utiliser la version démo de Purebasic qui sera amplement suffisante pour de petits programmes interagissant avec l'arduino, et une fois que t'as bien tout en main et que t'est content, acheter la license pour faire de plus gros projets...
En tant qu'irréductible utilisateur de la démo je vais encore me faire huer du reste de la communauté
Voici un tuto trés intéressant :
Arduino & Purebasic, par G-Rom
Là sur le moment je n'ai pas de code à te donner, mais le tuto de G-Rom en propose d'assez simples à comprendre. Je suppose que tu connais les bases du langage? (Au pire ca s'apprend vite )
Un peu plus bas dans le tuto, il y a un code qui recoit toute info envoyée par l'Arduino
Ben dis donc tu viens de me redonner l'envie d'acheter une Arduino, maintenant que je m'y suis un peu replongé Vu que ca fait environ 2-3 ans que j'y pense, serait p'têtre temps que je passe a la case achat
PS : Tu peux dans un premier temps utiliser la version démo de Purebasic qui sera amplement suffisante pour de petits programmes interagissant avec l'arduino, et une fois que t'as bien tout en main et que t'est content, acheter la license pour faire de plus gros projets...
En tant qu'irréductible utilisateur de la démo je vais encore me faire huer du reste de la communauté
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
Votre expert national en bogage et segfaults.
CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
- Windows 10 x64 - PB 5.61 x64
- Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Re: Arduino
Salut,
Merci pour le tuto, je l'avais déjà vu. Un peut complique pour l'instant. Mon idéal serait de faire une fonction pour envoyer un caractere sur l'arduino pour récupérer un résultat. La carte est déjà programmée. J'envois "L", elle me renvoie un nombre.
Merci déjà pour avoir répondu. En basic256, tu as :
Openserial (1, "COM1", 9600) ´´´ tu ouvres le port.
Write (1,"L"). ´´´ tu envoies sur le port
Ou
Tu lis sur le port. Read (1,a$)
Gilles
Merci pour le tuto, je l'avais déjà vu. Un peut complique pour l'instant. Mon idéal serait de faire une fonction pour envoyer un caractere sur l'arduino pour récupérer un résultat. La carte est déjà programmée. J'envois "L", elle me renvoie un nombre.
Merci déjà pour avoir répondu. En basic256, tu as :
Openserial (1, "COM1", 9600) ´´´ tu ouvres le port.
Write (1,"L"). ´´´ tu envoies sur le port
Ou
Tu lis sur le port. Read (1,a$)
Gilles
Re: Arduino
Bonjour gigi75,
Bienvenue sur le forum.
J'utilise PureBasic pour contrôler un Arduino. C'est assez simple et voici un exemple (beaucoup de ligne car pas mal de commentaires) :
J'ai vu que la lecture pouvait être plus simple que ce que j'ai fait
Evidemment, j'ai tout intégré dans des fonctions et également créé une DLL (en PureBasic) pour utiliser mes dispositifs avec d'autres langages (python, ImageJ, VBA Excel, ...).
J'espère que cela peut t'aider.
PS : la version payante de PureBasic n'est pas très coûteuse et l'acheter peut aider ceux qui l'a développe (dont je ne suis pas).
Bienvenue sur le forum.
J'utilise PureBasic pour contrôler un Arduino. C'est assez simple et voici un exemple (beaucoup de ligne car pas mal de commentaires) :
Code : Tout sélectionner
;-----------------------------------------------------------------------:
; --- Choix du "bon" vieux mode console du temps du MS-DOS --- :
;-----------------------------------------------------------------------:
OpenConsole()
;-------------------------------------------:
; Adresse du port série (11 dans mon cas) :
;-------------------------------------------:
NPort.s = "COM11"
;-----------------------:
; Ouverture du port :
;-----------------------:
PortId.i = OpenSerialPort(#PB_Any, NPort, 9600, #PB_SerialPort_NoParity , 8, 1, #PB_SerialPort_XonXoffHandshake, 4, 4)
;---------------------------------:
; Texte à envoyer à l'Arduino :
;---------------------------------:
Cmd.s = "0:25:0:0:0"
;--------------------------------------------:
; Terminaison de la chaîne de caractères :
;--------------------------------------------:
EOL = 13
;-------------------------:
; Ecriture surle port :
;-------------------------:
WriteSerialPortString(PortId, Cmd", #PB_Ascii) ; Envoi sur port série.
WriteSerialPortData(PortId, @EOL, 1)
;------------------------------------------:
; Dimensionnement buffer de réception :
;------------------------------------------:
b_size = 100 ; Taille du buffer.
*Byte = AllocateMemory(b_size) ; Pointeur pour retour.
Bytes = AvailableSerialPortInput(NPort) ; Initialisation
While(Bytes = 0) ; Boucle jusqu'à retour réponse.
Delay(100)
Bytes = AvailableSerialPortInput(NPort)
Wend
Result = ReadSerialPortData(NPort, *Byte, Bytes) ; Lecture réponse.
Rep.s = PeekS(*Byte, Result, #PB_Ascii) ; Transfert mémoire vers Rep
a$=Input() ; Pause avant fermeture du programme.
CloseSerialPort(PortId) ; Fermeture du port.
Evidemment, j'ai tout intégré dans des fonctions et également créé une DLL (en PureBasic) pour utiliser mes dispositifs avec d'autres langages (python, ImageJ, VBA Excel, ...).
J'espère que cela peut t'aider.
PS : la version payante de PureBasic n'est pas très coûteuse et l'acheter peut aider ceux qui l'a développe (dont je ne suis pas).
Re: Arduino
Bonjour à vous,
Pour envoyer un caractère à la carte, j'ai bien compris, et cela fonctionne bien.
En trois lignes.
Mais pour recevoir un nombre ou une chaine de caractères de la carte, là je nage, et je coule. En trois lignes, n'est pas possible? Si je lis bien l'exemple, je passe les données en mémoire pour allez les afficher.
Je couleeeeee, là
Gilles
Pour envoyer un caractère à la carte, j'ai bien compris, et cela fonctionne bien.
Code : Tout sélectionner
ardu.i=OpenSerialPort (#PB_Any,"COM3", 9600, #PB_SerialPort_NoParity,8,1, #PB_SerialPort_NoHandshake,0,0)
OpenConsole()
WriteSerialPortString (ardu.i, "V", #PB_Ascii)
Mais pour recevoir un nombre ou une chaine de caractères de la carte, là je nage, et je coule. En trois lignes, n'est pas possible? Si je lis bien l'exemple, je passe les données en mémoire pour allez les afficher.
Je couleeeeee, là
Gilles
Re: Arduino
Re bonjour,
Lorsque j'écris votre exemple, le programme me dit : Que le port com n'est pas réinitialisé.
Gilles
Lorsque j'écris votre exemple, le programme me dit : Que le port com n'est pas réinitialisé.
Code : Tout sélectionner
Bytes = AvailableSerialPortInput (NPort)
Re: Arduino
Re bonjour,
Lorsque j'écris votre exemple, le programme me dit : Que le port com n'est pas réinitialisé.
Gilles
Lorsque j'écris votre exemple, le programme me dit : Que le port com n'est pas réinitialisé.
Code : Tout sélectionner
Bytes = AvailableSerialPortInput (NPort)
Re: Arduino
Un petit code que j'avais fait (dérivé d'un code d'Infratec)gigi75 a écrit : Mais pour recevoir un nombre ou une chaine de caractères de la carte, là je nage, et je coule. En trois lignes, n'est pas possible? Si je lis bien l'exemple, je passe les données en mémoire pour allez les afficher.
Code : Tout sélectionner
; Read datas from Arduino who send random number 10-99
; Based on the infratec proposed solution on topic: RS-232 receive data
; http://www.purebasic.fr/english/viewtopic.php?f=13&t=64875&hilit=ReadSerialPortData
Enumeration
#Win
#Incoming
#hPort
#Sec
EndEnumeration
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
Port$ = "/dev/ttyACM0"
CompilerElseIf #PB_Compiler_OS = #PB_OS_Windows
Port$ = "COM4"
CompilerEndIf
OpenWindow(#Win, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#Incoming, 10, 10, 480, 280)
AddWindowTimer(#Win, #Sec, 100)
If OpenSerialPort(#hPort, Port$, 9600,
#PB_SerialPort_NoParity, 8, 1,
#PB_SerialPort_NoHandshake, 1024, 1024)
Debug "OK Port " + Port$ + " Open"
Debug "Waiting for incoming data..."
Else
Debug ~"Serial Port not initialized.\r\nProgram Ends."
End
EndIf
Delay(2000)
Procedure Read_Arduino()
While AvailableSerialPortInput(#hPort)
If ReadSerialPortData(#hPort, @Buffer, 1)
Debug Buffer
AddGadgetItem(#Incoming, -1, Str(Buffer))
EndIf
Wend
EndProcedure
Repeat
Select WaitWindowEvent()
Case #PB_Event_Timer
Read_Arduino()
Case #PB_Event_CloseWindow
CloseSerialPort(#hPort)
End
EndSelect
ForEver
End
Re: Arduino
Tu ne ferais pas de la thermo?
Re: Arduino
Voila le rapport :
[17 :45 :49] [COMPILER] Ligne 9: Mauvais type de parametre: nombre attendu a la place d'une chaine de caracteres.
[17 :46 :14] Attente du démarrage du programme...
[17 :46 :14] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :46 :14] Exécutable démarré.
[17 :46 :22] [ERREUR] essais.pb (Ligne: 14)
[17 :46 :22] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :46 :29] Exécution du programme terminée.
[17 :47 :38] Attente du démarrage du programme...
[17 :47 :38] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :47 :38] Exécutable démarré.
[17 :47 :43] [ERREUR] essais.pb (Ligne: 15)
[17 :47 :43] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :47 :46] Exécution du programme terminée.
[17 :47 :54] Attente du démarrage du programme...
[17 :47 :54] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :47 :54] Exécutable démarré.
[17 :48 :09] [ERREUR] essais.pb (Ligne: 15)
[17 :48 :09] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :48 :12] Exécution du programme terminée.
[17 :48 :51] Attente du démarrage du programme...
[17 :48 :51] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :48 :51] Exécutable démarré.
[17 :49 :08] [ERREUR] essais.pb (Ligne: 15)
[17 :49 :08] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :49 :11] Exécution du programme terminée.
je ferme même le port, puis je l'ouvre, j'ai même mis Delay (5000), toujours le même Pb.
Cette erreur n'est pas au niveau de l'écriture vers la carte mais pour la lecture.
[17 :45 :49] [COMPILER] Ligne 9: Mauvais type de parametre: nombre attendu a la place d'une chaine de caracteres.
[17 :46 :14] Attente du démarrage du programme...
[17 :46 :14] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :46 :14] Exécutable démarré.
[17 :46 :22] [ERREUR] essais.pb (Ligne: 14)
[17 :46 :22] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :46 :29] Exécution du programme terminée.
[17 :47 :38] Attente du démarrage du programme...
[17 :47 :38] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :47 :38] Exécutable démarré.
[17 :47 :43] [ERREUR] essais.pb (Ligne: 15)
[17 :47 :43] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :47 :46] Exécution du programme terminée.
[17 :47 :54] Attente du démarrage du programme...
[17 :47 :54] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :47 :54] Exécutable démarré.
[17 :48 :09] [ERREUR] essais.pb (Ligne: 15)
[17 :48 :09] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :48 :12] Exécution du programme terminée.
[17 :48 :51] Attente du démarrage du programme...
[17 :48 :51] Type d'exécutable: Windows - x64 (64bit, Unicode)
[17 :48 :51] Exécutable démarré.
[17 :49 :08] [ERREUR] essais.pb (Ligne: 15)
[17 :49 :08] [ERREUR] Le #SerialPort spécifié n'est pas initialisé.
[17 :49 :11] Exécution du programme terminée.
je ferme même le port, puis je l'ouvre, j'ai même mis Delay (5000), toujours le même Pb.
Cette erreur n'est pas au niveau de l'écriture vers la carte mais pour la lecture.
Re: Arduino
Voilà mon premier programme :
L'éditeur montre l'erreur ici :
Code : Tout sélectionner
ardu.i=OpenSerialPort (#PB_Any,"COM3", 9600, #PB_SerialPort_NoParity,8,1, #PB_SerialPort_NoHandshake,0,0)
OpenConsole()
OpenSerialPort (#PB_Any,"COM3", 9600, #PB_SerialPort_NoParity,8,1, #PB_SerialPort_NoHandshake,4,4)
Delay (5000)
b_size = 100
*Byte = AllocateMemory(b_size)
Bytes = AvailableSerialPortInput (NPort)
While(Bytes = 0)
Delay(100)
Bytes = AvailableSerialPortInput(NPort)
Wend
Result = ReadSerialPortData(NPort, *Byte, Bytes)
Rep.s = PeekS(*Byte, Result, #PB_Ascii)
Print (Rep)
Input()
CloseConsole()
Code : Tout sélectionner
Bytes = AvailableSerialPortInput (NPort)
Re: Arduino
Tu mélanges un peu deux façons de faire (#Pb_Any)
Ton NPort ne correspond à rien.
Tu utilises #PB_Any mais n'utilise pas le résultat
non (enfin, oui possible aussi)Plus simple à utiliser
...
etc
Essaye mon exemple avant d'en créer un nouveau
Pour bien comprendre chaque commande, clique dessus (dans l'éditeur) et presse F1
PS. Le code qui tourne sur ma carte
Ton NPort ne correspond à rien.
Tu utilises #PB_Any mais n'utilise pas le résultat
non (enfin, oui possible aussi)
Code : Tout sélectionner
ardu.i=OpenSerialPort (#PB_Any ...
Code : Tout sélectionner
OpenSerialPort (ardu ...
Code : Tout sélectionner
Bytes = AvailableSerialPortInput (ardui)
Essaye mon exemple avant d'en créer un nouveau
Pour bien comprendre chaque commande, clique dessus (dans l'éditeur) et presse F1
PS. Le code qui tourne sur ma carte
Code : Tout sélectionner
long randNumber;
void setup(){
Serial.begin(9600);
// if analog input pin 0 is unconnected, random analog
// noise will cause the call to randomSeed() to generate
// different seed numbers each time the sketch runs.
// randomSeed() will then shuffle the random function.
randomSeed(analogRead(0));
}
void loop() {
// print a random number from 10 to 99
randNumber = random(10, 99);
Serial.println(randNumber);
delay(1000);
}
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Arduino
Pour ma part même si Pb reste un excellent langage il n'est pas idéal pour le développement de microcontrôleurs.
Il vaut mieux utilisé Atmel Studio (gratuit) en C/C++, mais cela requière certaines connaissances aux point de vue des opérateurs logiques et des registres de µs concerné pour la configuration des timers et l'usart.
Le logiciel Arduino reste le plus simple avec ses librairies qui demande nettement moins de connaissances, une connaissance basique du C est juste nécessaire.
Il vaut mieux utilisé Atmel Studio (gratuit) en C/C++, mais cela requière certaines connaissances aux point de vue des opérateurs logiques et des registres de µs concerné pour la configuration des timers et l'usart.
Le logiciel Arduino reste le plus simple avec ses librairies qui demande nettement moins de connaissances, une connaissance basique du C est juste nécessaire.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Arduino
J'utilise l'Arduino pour des applications professionnelles car, comme le signale "microdevweb", sa programmation est très simple et la communauté autour est très active. Il existe une version "pro" chez ST avec le Nucleo qui est presque compatible.
La quantité de projet autour d'Arduino est très grande et il existe de nombreux "shields", des cartes et composants tout faits très simple à mettre en oeuvre : la réalisation de prototypes fonctionnels peut être très rapide.
J'ai un peu galéré pour communiquer avec PureBasic via le FTDI (mais pas moins qu'avec Visual Basic 6) : PureBasic est trop rapide et il faut bien contrôler les échanges. J'ai mis en place un protocole de communication, simpliste coté Arduino, un peu plus évolué côté PC. Ce protocole d'échange est très fiable. J'ai également encapsulé les fonctions principales dans une DLL écrite en PureBasic (que c'est facile à faire, du PureB...onheur) que j'exploite en PureBasic, évidemment, en python et bientôt avec le logiciel de traitement d'image ImageJ.
Quand j'aurai suffisamment finalisé ce travail, je prévoie de le proposer au Forum sous forme de tutoriel. Si des personnes sont intéressés aujourd'hui, je pourrai leur transmettre "en l'état".
La quantité de projet autour d'Arduino est très grande et il existe de nombreux "shields", des cartes et composants tout faits très simple à mettre en oeuvre : la réalisation de prototypes fonctionnels peut être très rapide.
J'ai un peu galéré pour communiquer avec PureBasic via le FTDI (mais pas moins qu'avec Visual Basic 6) : PureBasic est trop rapide et il faut bien contrôler les échanges. J'ai mis en place un protocole de communication, simpliste coté Arduino, un peu plus évolué côté PC. Ce protocole d'échange est très fiable. J'ai également encapsulé les fonctions principales dans une DLL écrite en PureBasic (que c'est facile à faire, du PureB...onheur) que j'exploite en PureBasic, évidemment, en python et bientôt avec le logiciel de traitement d'image ImageJ.
Quand j'aurai suffisamment finalisé ce travail, je prévoie de le proposer au Forum sous forme de tutoriel. Si des personnes sont intéressés aujourd'hui, je pourrai leur transmettre "en l'état".