Aller au contenu

Messages recommandés

Posté (modifié)

Programme arduino uno

 

ce programme va evolué avec le temps

 

 

 

/*--------------------------------------------------------------

Program: voltmeter_LCD

 

 

Description: 4 canaux voltmètre DC avec des tensions affichées

sur l'écran LCD à 1a décimale

 

Matériel: Arduino Uno avec des diviseurs de tension sur A1 à A4.

2 x 16 LCD relié aux broches standards utilisés dans

Exemple Arduino esquisse de IDE.

 

Logiciel: Développé en utilisant le logiciel Arduino 1.0.5

Doivent être compatibles avec Arduino 1.0 +

 

Date: 14/07/2014

--------------------------------------------------------------*/

#include <LiquidCrystal.h>

 

 

// nombre d'échantillons analogiques à prendre par la lecture, par canal

#define NUM_SAMPLES 10

// valeurs d'étalonnage de diviseur de tension

#define DIV_1 8.785

#define DIV_2 8.785

#define DIV_3 8.785

#define DIV_4 8.785

// Valeur de tension de référence ADC / calibration

#define V_REF 4.95

 

 

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int sum[4] = {0}; // sommes d'échantillons prélevés

unsigned char sample_count = 0; // taille de l'échantillon

float voltage[4] = {0.0}; // tensions calculées

char l_cnt = 0; // utilisé dans »pour« boucles

 

// Definit des valeurs utilisées par les 5 boutons

int lcd_key = 0;

int adc_key_in = 0;

#define btnRIGHT 0

#define btnUP 1

#define btnDOWN 2

#define btnLEFT 3

#define btnSELECT 4

#define btnNONE 5

 

// Lecture des boutons (tous regroupés sur le Pin Analog A0)

int read_LCD_buttons()

{

adc_key_in = analogRead(0); // Lit la valeur depuis le sensor sur A0

// centré sur ces valeurs : 0, 144, 329, 504, 741

// on ajoute environ 50 à ces valeurs et on vérifie si on est proche

if (adc_key_in > 1000) return btnNONE; // On définit ça en première option pour raison de rapidité car option la plus probable

 

if (adc_key_in < 50) return btnRIGHT;

if (adc_key_in < 195) return btnUP;

if (adc_key_in < 380) return btnDOWN;

if (adc_key_in < 555) return btnLEFT;

if (adc_key_in < 790) return btnSELECT;

return btnNONE; // Sinon, on n'a aucun bouton de sélectionné (par défaut)

}

void setup() // Initialisation

{

lcd.begin(16, 2); // Démarrer la librairie

 

//Message de bienvenue

lcd.setCursor(0,0); //En haut à gauche (numéroté depuis 0)

lcd.print("Alim Astro"); // Afficher un petit message

lcd.setCursor(0,1); //Ligne du bas

lcd.print("Mogenot D. V2.1"); // Afficher un petit message

 

delay(5000); //intro de 5 secondes-

 

lcd.setCursor(0,1); //Ligne du bas

lcd.print(" "); //Effacer cette ligne

lcd.setCursor(0,0);

lcd.print("Choisir 1 bouton"); // Afficher un petit message

}

 

void loop() // Fonction principale

{

 

// prendre un certain nombre d'échantillons analogiques et de les additionner

while (sample_count < NUM_SAMPLES) {

// sample each channel A1 to A4

for (l_cnt = 0; l_cnt < 4; l_cnt++) {

sum[l_cnt] += analogRead(A1 + l_cnt);

}

sample_count++;

delay(10);

}

// calculer la tension de chaque canal

for (l_cnt = 0; l_cnt < 4; l_cnt++) {

voltage[l_cnt] = ((float)sum[l_cnt] / (float)NUM_SAMPLES * V_REF) / 1024.0;

}

// tensions d'affichage sur l'écran LCD

// chaque tension est multipliée par le réseau de résistances

// facteur de division pour calculer la tension réelle

// tension 1 - A (pin A1)

lcd.setCursor(0, 0);

lcd.print("A ");

lcd.print(voltage[0] * DIV_1, 1);

lcd.print("V ");

 

// tension 2 - B (pin A2)

lcd.setCursor(8, 0);

lcd.print("B ");

lcd.print(voltage[1] * DIV_2, 1);

lcd.print("V ");

 

// tension 3 - C (pin A3)

lcd.setCursor(0, 1);

lcd.print("C ");

lcd.print(voltage[2] * DIV_3, 1);

lcd.print("V ");

 

// tension 4 - D (pin A4)

lcd.setCursor(8, 1);

lcd.print("D ");

lcd.print(voltage[3] * DIV_4, 1);

lcd.print("V ");

 

// réinitialiser le nombre et les montants

sample_count = 0;

for (l_cnt = 0; l_cnt < 4; l_cnt++) {

sum[l_cnt] = 0;

}

}

5aa583546497f_ShieldLCD.jpg.29e765e5b4ee87bd2556559576eece01.jpg

Modifié par denis-mgt

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.