Académique Documents
Professionnel Documents
Culture Documents
------------------------------------
INSTITUT D’ENSEIGNEMENT SUPERIEUR D’ANTSIRABE-VAKINANKARATRA
------------------------------------
DOMAINE SCIENCES DE L’INGENIEUR
MENTION ELECTRONIQUE
GROUPE CINQ
Présenté par :
ANDRIARIMALALA Lantomahafaly Joela Miharivony
FANEVANIAINA Manovosoa
RANDRIAMANANTSOA Roméo Franick
HERINOMENJANAHARY Sidonie Valerie
MENTION ELECTRONIQUE
Présenté par :
ANDRIARIMALALA Lantomahafaly Joela Miharivony
FANEVANIAINA Manovosoa
RANDRIAMANANTSOA Roméo Franick
HERINOMENJANAHARY Sidonie Valerie
Enseignant : Dr Sedera
PORT PARALLELE
Exemple 1 : Contrôler des LED
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main() {
unsigned char data = 0x01; // Données pour allumer les LED
unsigned int i;
while (1) {
// Écriture des données sur le port parallèle
outp(BASE, data);
// Attente de 500 ms
delay(500);
return 0;
}
Ce code utilise l'adresse de base 0x378 pour accéder au port parallèle. On peut modifier cette
valeur selon l'adresse du port parallèle si nécessaire.
Il faut assurer d'avoir les bibliothèques appropriées incluses (stdio.h, conio.h, dos.h) pour
pouvoir utiliser les fonctions nécessaires. Ce code est spécifique à la plate-forme
DOS/Windows.
int main() {
unsigned char command = 0x80; // Commande pour démarrer la conversion
unsigned char data;
float temperature;
return 0;
}
Contrôler un relais
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main() {
unsigned char relayOn = 0x01; // Données pour activer le relais
unsigned char relayOff = 0x00; // Données pour désactiver le relais
// Désactivation du relais
outp(BASE, relayOff);
return 0;
}
Ce code initialise le port parallèle en mode de sortie, puis écrit les données 0x01 sur le port
parallèle pour activer le relais. Ensuite, il attend pendant 1 seconde à l'aide de la fonction
delay, puis écrit les données 0x00 sur le port parallèle pour désactiver le relais.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main() {
unsigned char stepSequence[] = {0x01, 0x02, 0x04, 0x08};
int numSteps = sizeof(stepSequence) / sizeof(stepSequence[0]);
int i;
// Attente de 50 ms
delay(50);
}
}
return 0;
}
Ce code initialise le port parallèle en mode de sortie, puis utilise un tableau stepSequence pour
définir la séquence de pas du moteur pas à pas. Il boucle en boucle infinie et, à chaque itération,
écrit une valeur de la séquence de pas sur le port parallèle, attend 50 ms à l'aide de la fonction
delay, puis passe à la valeur suivante dans la séquence.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main() {
unsigned char actuatorOn = 0x01; // Données pour activer l'actionneur
unsigned char actuatorOff = 0x00; // Données pour désactiver l'actionneur
// Activation de l'actionneur
outp(BASE, actuatorOn);
// Désactivation de l'actionneur
outp(BASE, actuatorOff);
return 0;
}
Ce code initialise le port parallèle en mode de sortie, puis écrit les données 0x01 sur le port
parallèle pour activer l'actionneur pneumatique. Ensuite, il attend pendant 1 seconde à l'aide
de la fonction delay, puis écrit les données 0x00 sur le port parallèle pour désactiver
l'actionneur. L'utilisation du port parallèle pour contrôler un actionneur pneumatique peut
nécessiter des composants supplémentaires, tels que des relais, des amplificateurs de
puissance, des circuits de contrôle et de protection, pour assurer un fonctionnement sûr et
fiable.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main() {
unsigned char stepSequence[] = {0x01, 0x02, 0x04, 0x08};
int numSteps = sizeof(stepSequence) / sizeof(stepSequence[0]);
int i;
// Attente de 2 ms
delay(2);
}
}
return 0;
}
Ce code initialise le port parallèle en mode de sortie, puis utilise un tableau stepSequence pour
définir la séquence de pas du moteur pas à pas. Il boucle en boucle infinie et, à chaque itération,
écrit une valeur de la séquence de pas sur le port parallèle, attend 2 ms à l'aide de la fonction
delay, puis passe à la valeur suivante dans la séquence.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int serialPort;
char buffer[256];
if (serialPort == -1) {
exit(EXIT_FAILURE);
tcgetattr(serialPort, &serialOptions);
cfsetispeed(&serialOptions, B9600); // Vitesse de transmission (9600 bauds)
ssize_t bytesRead;
while (1) {
if (bytesRead > 0) {
// ...
close(serialPort);
return 0;
On utilise les fonctions système open(), read() et close() pour ouvrir, lire et fermer le port
série respectivement. Il faut spécifier correctement le chemin du port série dans la constante
SERIAL_PORT. Le code configure également les paramètres du port série, tels que la vitesse de
transmission, le nombre de bits de données, etc., en utilisant la structure termios. Dans la
boucle principale, on utilise la fonction read() pour lire les données du port série dans le
tampon buffer. Si des données sont lues (bytesRead > 0).
Envoi de commandes à des équipements
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int serialPort;
if (serialPort == -1) {
exit(EXIT_FAILURE);
tcgetattr(serialPort, &serialOptions);
if (bytesWritten == -1) {
exit(EXIT_FAILURE);
sleep(1);
close(serialPort);
return 0;
On utilise la fonction système open() pour ouvrir le port série en mode écriture seule. On
doit spécifier correctement le chemin du port série dans la constante SERIAL_PORT. Le code
configure également les paramètres du port série, tels que la vitesse de transmission et le
nombre de bits de données, en utilisant la structure termios.
Ensuite, on utilise la fonction write() pour envoyer la commande spécifiée (command) sur le
port série. La taille de la commande est déduite en utilisant sizeof(command) - 1 pour
exclure le caractère nul de fin de chaîne.
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#define SERIAL_PORT "/dev/ttyUSB0" // Chemin du port série
int main() {
int serialPort;
if (serialPort == -1) {
exit(EXIT_FAILURE);
tcgetattr(serialPort, &serialOptions);
if (bytesWritten == -1) {
exit(EXIT_FAILURE);
return 0;
On utilise la fonction système open() pour ouvrir le port série en mode écriture seule. Il faut
spécifier correctement le chemin du port série dans la constante SERIAL_PORT. Le code
configure également les paramètres du port série, tels que la vitesse de transmission et le
nombre de bits de données, en utilisant la structure termios. On use la fonction write()
pour envoyer la commande de mouvement spécifique (command) au moteur pas à pas via le
port série. La taille de la commande est déduite en utilisant sizeof(command) - 1 pour
exclure le caractère nul de fin de chaîne.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int serialPort;
char command[] = "MOVE_FORWARD\r\n"; // Commande de
déplacement pour le robot
char buffer[256];
// Ouverture du port série en lecture/écriture
serialPort = open(SERIAL_PORT, O_RDWR);
if (serialPort == -1) {
perror("Erreur lors de l'ouverture du port série");
exit(EXIT_FAILURE);
}
return 0;
}
Port USB
ouvre un port USB FTDI à une vitesse de 9600 bauds
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ftdi.h>
int main() {
struct ftdi_context ftdi;
int ret;
// Affichage de la réponse
printf("Réponse : ");
for (int i = 0; i < ret; i++) {
printf("%02X ", response[i]);
}
printf("\n");
return 0;
}
On utilise la bibliothèque FTDI (libftdi) pour communiquer avec le port USB FTDI. Il faut
installer la bibliothèque libftdi et d'inclure le fichier d'en-tête ftdi.h dans votre projet. La
fonction ftdi_usb_open() est utilisée pour ouvrir le port USB FTDI en spécifiant les identifiants
du fournisseur (0x0403) et du produit (0x6001) correspondant à votre module FTDI. Assurez-
vous de mettre à jour ces identifiants en fonction de votre périphérique.
Contrôle d'un servomoteur à l'aide d'un port USB
#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>
int main() {
int ret;
ret = libusb_init(&ctx);
if (ret < 0) {
return ret;
if (dev_handle == NULL) {
libusb_exit(ctx);
return -1;
}
int bytes_sent;
if (ret == 0) {
} else {
libusb_close(dev_handle);
libusb_exit(ctx);
return 0;
#include <SDL2/SDL.h>
int main() {
// Initialisation de SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
return -1;
// Création de la fenêtre
if (window == NULL) {
SDL_Quit();
return -1;
// Création du renderer
if (renderer == NULL) {
printf("Erreur lors de la création du renderer : %s\n", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return -1;
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_Rect squareRect;
squareRect.w = SQUARE_SIZE;
squareRect.h = SQUARE_SIZE;
SDL_RenderFillRect(renderer, &squareRect);
SDL_RenderPresent(renderer);
SDL_Event event;
int quit = 0;
while (!quit) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
quit = 1;
}
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>
int main() {
libusb_context *ctx = NULL;
int ret;
ret = libusb_init(&ctx);
if (ret < 0) {
return ret;
if (dev_handle == NULL) {
libusb_exit(ctx);
return -1;
int bytes_received;
if (ret == 0) {
} else {
}
// Fermeture du périphérique USB
libusb_close(dev_handle);
libusb_exit(ctx);
return 0;