aide programmation arduino

Bonjour

j'aurais besoin d'aide pour un exercice qui provient de mon tuteur (je suis en stage).

faire un petit montage pour afficher les codes RS232 sur un ecran lcd
shéma de principe :

Max232 ======> Arduino ======> max232
======> lcd
les boutons poussoirs du arduino permettent de changer la configuration rs232 (vitesse,débit,...)

matos :
afficheur lcd 2*16 ligne en i2c
arduino uno comme platine de test
Max 232: convertisseur rs232/TTl

Alors j'ai trouvé les branchements à faire (les shemas electriques), c'est à dire quelle patte vas avec quelle patte pour relier le max 232 vers arduino puis arduino vers l'écran 2*16 lignes.

cependant je dois écrire le programme nécessaire et je n'ai aucune idée de comment sa marche, la seul chose que j'ai est (démarrage de l'écran sur arduino) :

#include "liquidecrystal.h" // ajout de la librairie
liquidecrystal lcd (11,10,9,8,7,6,5,4,3,2) // liaison 8 bits de données
// soit liquidecrystal (rs, enable,...,d7)

void setup ()

{ lcd.begin (16,2); // 16 colonnes et 2 lignes pour l'écran
lcd.write("bonjour");
}
void loop() {}

merci pour votre aide

Bonjour,
Pour plus de lisibilité, il serait opportun de mettre ton code entre des balises #.
Transmets nous le schéma de ce que tu souhaites faire.
@+

Commence par faire simple : affichage direct dans le serial monitor, avant de rajouter un écran.

bonjour

merci pour votre aide

mon tuteur m'a dit qu'il me passera le matériel vendredi ou lundi, il veut que j'écrive le code avant.
merci pour la librairie. je sais aussi que les boutons poussoirs sont important et je dois m'en servir pour régler le débit, la vitesse...

voici l'image pour connecter en l'écran lcd en i2c avec l'arduino uno

et l'image pour moi connecter le rs232 à l'arduino

Ce n'est pas cette librairie là qu'il faut pour le lcd, mais celle la puisqu'il est en i2c : GitHub - fdebrabander/Arduino-LiquidCrystal-I2C-library: Library for the LiquidCrystal LCD display connected to an Arduino board.

Bonjour,

oui j'ai bien un probleme de librairie. j'utilise le logiciel arduino 1.0.5-r2, version Frainçaise

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C.h lcd(4, 6, 8,16,15,14);


void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // Turn off the display:
  lcd.noDisplay();
  delay(500);
   // Turn on the display:
  lcd.display();
  delay(500);
}

cepandant la librairie n'existe pas, je vais donc sur : GitHub - fdebrabander/Arduino-LiquidCrystal-I2C-library: Library for the LiquidCrystal LCD display connected to an Arduino board.

je dois placer tous les fichiers dans le dossier "LiquidCrystal_I2C" que j'ai créé. cepandant je ne peux pas copier ou telecharger ces dossiers.

je ne sais donc pas qu'elle librairie utiliser pour afficher quoi que se soit sur l'écran.

matthieu59:
Bonjour,

oui j'ai bien un probleme de librairie. j'utilise le logiciel arduino 1.0.5-r2, version Frainçaise

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C.h lcd(4, 6, 8,16,15,14);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // Turn off the display:
  lcd.noDisplay();
  delay(500);
   // Turn on the display:
  lcd.display();
  delay(500);
}




cepandant la librairie n'existe pas, je vais donc sur : https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library


je dois placer tous les fichiers dans le dossier "LiquidCrystal_I2C" que j'ai créé. cepandant je ne peux pas copier ou telecharger ces dossiers.

je ne sais donc pas qu'elle librairie utiliser pour afficher quoi que se soit sur l'écran.

bonjour,
A quoi sert le bouton Download ZIP à droite sur Github? :slight_smile:
extraire les fichiers dans le rep librairies de l'ide

merci, j'ai trouvé, j'ai la librairie LiquidCrystal_I2C; cependant, elle ne se met pas en orange dans le code comme les autres librairie, elle ne fonctionne pas, j'ai vu sur internet qu'on pouvais écrire
#include <Wire.h>
void setup() {

Serial.begin(9600); //Lancer le mode série

Wire.begin(); //Lancer I2C

ce qui me donne comme code :

#include <Wire.h>

Wire lcd(12, 11, 5, 4, 3, 2);

void setup() {
  
  Serial.begin(9600); //Lancer le mode série
  
  Wire.begin(); //Lancer I2C

  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

voici les erreurs
HelloWorld:3: error: 'Wire' does not name a type
HelloWorld.ino: In function 'void setup()':
HelloWorld:16: error: 'lcd' was not declared in this scope
HelloWorld.ino: In function 'void loop()':
HelloWorld:24: error: 'lcd' was not declared in this scope

je pense qu'il s'agit de la librairie mais je ne peux pas utiliser celle téléchargé LiquidCrystal_I2C.

https://github.com/fdebrabander/Ardu...-library

j'ai fait dowload ZIP, j'ai tour extrait dans un dossier qui s'appelle LiquidCrystal_I2C, j'ai fait sur le logiciel croquis; importer bibliotheque, add library, j'ai sélectionné le dossier Arduino-LiquidCrystal-I2C-library-fc0801a1f7ecb22308c31d52039d674bffc2cde6. et j'ai ajouté,

ensuite je vais dans croquis importer bibliothéque, tout en bas il y a LiquidCrystal_I2C; je la selectionne et j'ai
#include <LiquidCrystal_I2C.h> mais ce n'est pas en orange comme les autres librairies.

Code:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(12, 11, 5, 4, 3, 2);

void setup() {

Serial.begin(9600); //Lancer le mode série

LiquidCrystal_I2C.begin(); //Lancer I2C

// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}

void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}

comme erreur j'ai

HelloWorld:3: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrys tal_I2C(int, int, int, int, int, int)'
C:\Documents and Settings\stagiaire\Mes documents\Arduino\libraries\Li quidCrystal_I2C/LiquidCrystal_I2C.h:71: note: candidates are: LiquidCrystal_I2C::LiquidCryst al_I2C(uint8_t, uint8_t, uint8_t, uint8_t)
C:\Documents and Settings\stagiaire\Mes documents\Arduino\libraries\Li quidCrystal_I2C/LiquidCrystal_I2C.h:60: note: LiquidCrystal_I2C::LiquidCryst al_I2C(const LiquidCrystal_I2C&)
HelloWorld.ino: In function 'void setup()':
HelloWorld:9: error: expected unqualified-id before '.' token
HelloWorld:12: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'
C:\Documents and Settings\stagiaire\Mes documents\Arduino\libraries\Li quidCrystal_I2C/LiquidCrystal_I2C.h:76: note: candidates are: void LiquidCrystal_I2C::begin()

Bonjour,
C'est plus lisible ainsi :

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(12, 11, 5, 4, 3, 2);

void setup() {
 
  Serial.begin(9600); //Lancer le mode série
 
  LiquidCrystal_I2C.begin(); //Lancer I2C

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Il faut se donner la peine de faire un minimum de présentation, les balises sont là pour cela
@+

On s'en fiche que ça soit pas en orange, c'est juste une question de présentation.

Ensuite il faut un peu essayer de comprendre ce que tu fais, et étudier les fonctions appelées et ne pas taper au pif.

j'ai trouvé, je connais aussi la notion de buffer et comment savoir si il y des choses dans la mémoire

voici un exemple :

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);


void setup() {

  Serial.begin(9600); //Lancer le mode série


  // initialize the LCD
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.print("Hello, world!");

}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

le truc c'est que je ne sais pas vraiment ce que me demande mon tuteur
lire ce qui arrive sur le port série physique, sa veut dire afficher en ASCII ce qui en hexa, soit faire un programme qui convertit l'hexa en ASCII ?

j'ai trouvé un programme simple qui permet je pense d’afficher le résultat brut d'une conversion analogique-numérique
Code:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const int Voie_0=0; //declaration constante de broche analogique

// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique

void setup()
{
Serial.begin(115200);

lcd.begin();

lcd.backlight();

}
void loop(){

mesure_brute=analogRead(Voie_0);

// affiche valeur numerique entière ou à virgule au format décimal
lcd.println(mesure_brute);

delay(500); // pause de 500 millisecondes

}

ici j'affiche sur l'écran mais je peux le mettre dans un moniteur série en modifiant : lcd.println(mesure_brute); par Serial.println(mesure_brute);

j'ai une suite de chiffre, 338,339,339,338,,....

Pense aux balises code # ...

Sinon il vaut mieux faire un .clear() avant un nouvel affichage.

Pour ton projet il te faudra lire les trame séries via Serial.read() en chargeant un tableau. Après voit ce que veut ton tuteur parce que tout est possible : est-ce que les transmissions RS-232 sont en binaire ou en ASCII ? Ces données il les veut sous quelle forme sur le LCD ? Binaire ? Hexa ? Caractère ASCII ?

bonjour

il doit les vouloirs en ASCII, il veut LIRE ce qui provient du port et l'envoyer sur le LCD.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const int Voie_0=0; //declaration constante de broche analogique

// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique



void setup()
{  
    Serial.begin(115200); 
    
  lcd.begin();

  lcd.backlight();

}
void loop(){ 



mesure_brute=analogRead(Voie_0); 

// affiche valeur numerique entière ou à virgule au format décimal

lcd.println(mesure_brute); 

delay(500); // pause de 500 millisecondes

}

cependant je pense que je dois remplacer l'avant dernière ligne par Serial.read(mesure_brute); mais j'ai des erreurs
Afficher_le_r_sultat_brut_d_une_conversion_analogique_num_rique.ino: In function 'void loop()':
Afficher_le_r_sultat_brut_d_une_conversion_analogique_num_rique:32: error: no matching function for call to 'HardwareSerial::read(int&)'
C:\Program Files\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h:60: note: candidates are: virtual int HardwareSerial::read()

je suis allé voir comment fonctionne le read sur arduino voici l'exemple

Code:

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

et voici mon code pour afficher le résultat brut d'une conversation analogique numérique. je vais donc utiliser le read ce qui donne comme code :

Code:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
// Set the LCD address to 0x27 for a 16 chars and 2 line display

const int Voie_0=0; //declaration constante de broche analogique

// --- Déclaration des variables globales ---
int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique



void setup()
{  
    Serial.begin(9600); //Lancer le mode série
    
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();

}
void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 

// acquisition conversion analogique-numerique (CAN) sur la voie analogique

mesure_brute=analogRead(Voie_0); 

int mesure_brute=0;

// affiche valeur numerique entière ou à virgule au format décimal

  if (Serial.available() > 0) {
                // read the incoming byte:
                mesure_brute = Serial.read();

                // say what you got:
                lcd.print("I received: ");
                lcd.println(mesure_brute, DEC);
        }

delay(500); // pause de 500 millisecondes

}

mais rien ne se passe

en fait j'ai trouvé qqchose de plus simple

voici ce qu'il est écrit : Arduino peut lire l’information provenant du port série. Mais rappelez-vous que arduino est beaucoup plus rapide que l’information qui lui arrive. Il faut donc écrire un code qui attend l’info, la lit quand elle arrive et la traite.

Code:

int ledPin = 9;

void setup()
{
 // begin the serial communication
 Serial.begin(9600);
 pinMode(ledPin, OUTPUT);

}

void loop()
{
 byte val;

 // regarde si quelque chose se trouve dans le buffer
 if (Serial.available()) {
   // lit le premier byte dans la pile (valeur entre 0 to 255)
   val = Serial.read();
   // set the brightness of the LED
   analogWrite(ledPin, val); // par exemple
 }
}

cependant je n'ai pas besoin de la LED car je veux afficher sur l'écran ce qui donne :
Code:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);





void setup()
{
 Serial.begin(9600); //Lancer le mode série
    
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
 

}

void loop()
{
 byte val;

 // regarde si quelque chose se trouve dans le buffer
 if (Serial.available()) {
   // lit le premier byte dans la pile (valeur entre 0 to 255)
   val = Serial.read();
   // set the brightness of the LED
   lcd.println (val); // par exemple
 }
}

mais rien en s’affiche

Est-ce que ton lcd fonctionne déjà ?

Pour le savoir transforme ton loop en :

void setup()
{
 Serial.begin(9600); //Lancer le mode série
    
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.setCursor(0,0);
 lcd.println("Je fonctionne !");

}

oui je suis sur qu'il fonctionne

j'ai modifié dans mon programme
byte val; par char, int, float,... mais rien