Programme avec algorithme et afficheur lcd

hello tu a deux librairies

vires la .master ou renomme là

Used: /Users/utilisateur/Documents/Arduino/libraries/Keypad-master

Pour la librairie, tu l'as installée 2 fois mais l'une est ignorée. C'est le premier message et ce n'est pas une erreur juste un avertissement à toi de vérifier que c'est la bonne qui est utilisée. Le second message te dit qu'il ne peut pas accéder au périphérique que tu as donné comme accès à la carte. Manifestement tu t'es trompé de nom de port série virtuel.

ok merci et je me demandais si il fallait utiliser {0;180} ou {550;2330} pour POS_MIN et POS_MAX ?

Voir là https://www.arduino.cc/en/Reference/ServoWrite

Bonjour.

Deux questions aujourd'hui.

-Avez vous une fonction qui permet de stopper le void loop, puis le redémarrer là où il s'était arrêté? Si oui laquelle?

-Lorsque nous inscrivons via le keypad des caractères sur le lcd, sont-ils enregistrés? Si non, existe-t-il une fonction permettant de garder en mémoire en les incluant dans une variable les caractères et les valeurs inscrites sur le lcd? Si oui laquelle?

Merci beaucoup! ;)

Bon je pense avoir réussit mon programme, quand je compile ça me marque pas d’erreurs.

Cependant, j’aimerais que quelqu’un essaye le programme chez lui, pour voir ce que ça lui donne.

Si vous parvenais à me dire si il il n’y pas pas d’erreurs simplement en le regardant, je suis également preneur.
J’ai tout de même un doute, sur les endroits où je rentre les variables via le clavier; ces passages:

unsigned long u = touche = clavier.getKey();
while (touche == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'#') {
if (touche != NO_KEY){
if (touche =='#') lcd.clear();
else lcd.print(touche);
}
}

Sinon, voici mon programme:

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>

const int numRows = 2;
const int numCols = 16;


const byte LIGNES = 4;
const byte COLONNES = 3;

const int C3=10;
const int C2=9;
const int C1=8;
const int L4=2;
const int L3=3;
const int L2=4;
const int L1=5;

char touches [LIGNES] [COLONNES] = {
  {'1','2','3'},
  {'4','5','6'},
  {'6','7','8'},
  {'*','9','#'}
};

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3};

char touche;

Keypad clavier = Keypad( makeKeymap (touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

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

unsigned long c = 300000000;
unsigned long u = 0;
unsigned long l = 0;
unsigned long n = 0;
unsigned long t = 0;
unsigned long d = 0;

const int broche_servo=8;
int position_servo=0;
Servo mon_servo;
int Reception=0;

void setup() {
lcd.begin (16,2);
delay (10);

}

void loop () {
  
pinMode(13, OUTPUT);//lcd
pinMode(14, OUTPUT);//clavier
pinMode(15, OUTPUT);//servomoteur

Serial.begin(115200);
mon_servo.attach(broche_servo);
pinMode(broche_servo, OUTPUT);
mon_servo.write(150);
delay(2000);



delay(100);


delay (10);
lcd.print ("V. OBJET (m/s) =");
delay (2000);
digitalWrite(1, HIGH);
lcd.setCursor (0,1);
unsigned long u = touche = clavier.getKey();
while (touche == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'#') {
if (touche != NO_KEY){
if (touche =='#') lcd.clear();
else lcd.print(touche);
}
}
delay (2000);
lcd.clear();
lcd.print ("L. OBJET (m) =");
delay (2000);
lcd.setCursor (0,1);
unsigned long l = touche = clavier.getKey();
while (touche == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'#') {
if (touche != NO_KEY){
if (touche =='#') lcd.clear();
else lcd.print(touche);
}
}
delay (2000);
lcd.clear();
lcd.print ("D. VOYAGE (s) =");
delay (2000);
lcd.setCursor (0,1);
unsigned long t = touche = clavier.getKey();
while (touche == '0'||'1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9'||'#') {
if (touche != NO_KEY){
if (touche =='#') lcd.clear();
else lcd.print(touche);
}
}
delay (2000);
if(u>=300000000){
lcd.clear();
lcd.print ("VIT >= C");
delay (2000);
lcd.setCursor (0,1);
lcd.print ("INTERDIT!");
delay (2000);
}
else {
unsigned long n = l*sqrt(1-pow(u,2)/pow(c,2));
lcd.clear();
lcd.print  ("NOUV. L. OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (n);
lcd.print (" m");
delay (2000);
unsigned long d = t/(sqrt(1-pow(u,2)/pow(c,2)));
lcd.clear();
lcd.print  ("DUREE TERRE =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (d);
lcd.print (" s");
}
delay(100);


position_servo=map(n,0,l,0,150);
mon_servo.write(position_servo);

delay(200);

lcd.clear();

delay(200);


  }

Merci beaucoup d’avance pour votre aide qui m’a été précieuse jusqu’à présent et qui le sera encore je l’espère dans la dernière ligne droite du projet.

Merci :wink:

JE VIENS DE L’ESSAYER.

Le programme se déroule correctement, mais lors de l’entrée des variables avec le clavier ne fonctionne pas. Est-ce une erreur de branchement (quels ports utiliser?) ou de programmation?

J’ai jusqu’à Lundi pour le finir, alors je suis mal en point.

Dernière question, est-il possible de remplacer un clavier réelle par un clavier virtuel sur PC ou tout simplement par les touches de son pc sous arduino?

Merci

Bonjour, j’ai réalisé un programme permettant de contracter une fusée en fonction de sa vitesse à l’aide d’un bouton poussoir (qui peut augmenter la vitesse) et d’un LCD (qui affiche des valeurs) mais lors de la contraction de la fusée (contraction gérée par un servomoteur), peut importe la vitesse, la fusée effectue le même mouvement. Pourriez-vous me dire ce qui cloche dans mon programme ?

#include "LiquidCrystal.h"
#include <Servo.h>
const int numRows = 2;
const int numCols = 16;

int boutonPoussoir = 9;

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

unsigned long c = 300000000;
unsigned long u = 0;
unsigned long i = 0;
unsigned long l = 0;
unsigned long n = 0;
unsigned long t = 0;
unsigned long d = 0;

const int broche_servo=8;
int position_servo=0;
Servo mon_servo;

void setup() {
lcd.begin (16,2);
delay (10);
}

void loop () {
  
pinMode(7, OUTPUT);//lcd
pinMode(10, OUTPUT);//servomoteur




delay(100);
digitalWrite(10, HIGH);
delay(2000);
Serial.begin(115200);
mon_servo.attach(broche_servo);
pinMode(broche_servo, OUTPUT);
mon_servo.write(150);
digitalWrite(10, LOW);
delay(2000);


delay (10);
unsigned long u = 200000000;
digitalWrite(7, HIGH);
delay (5000);
if (digitalRead (boutonPoussoir) == HIGH)
{
unsigned long i = u+100000;
delay(2000);
lcd.print ("VITESSE OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (i);
lcd.print(" m/s");
delay (2000);
unsigned long l = 100;
lcd.clear();
lcd.print ("LONGUEUR OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (l);
lcd.print (" m");
delay (2000);
unsigned long t = 86400;
lcd.clear();
lcd.print ("DUREE VOYAGE =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (t);
lcd.print(" s");
delay (2000);
if(u>=300000000){
lcd.clear();
lcd.print ("VIT >= C");
delay (2000);
lcd.setCursor (0,1);
lcd.print ("INTERDIT!");
delay (2000);
}
else {
unsigned long n = l*sqrt(1-pow(i,2)/pow(c,2));
lcd.clear();
lcd.print  ("NOUV. L. OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (n);
lcd.print (" m");
delay (2000);
unsigned long d = t/(sqrt(1-pow(i,2)/pow(c,2)));
lcd.clear();
lcd.print  ("DUREE OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (d);
lcd.print (" s");
delay (2000);
lcd.clear();
digitalWrite(7, LOW);
}
delay(5000);

digitalWrite(10, HIGH);
delay(2000);
position_servo=map(n,0,l,0,150);
mon_servo.write(position_servo);
digitalWrite(10, LOW);
delay(2000);
}
else
{
unsigned long i = u;
delay(2000);
lcd.print ("VITESSE OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (i);
lcd.print(" m/s");
delay (2000);
unsigned long l = 100;
lcd.clear();
lcd.print ("LONGUEUR OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (l);
lcd.print (" m");
delay (2000);
unsigned long t = 86400;
lcd.clear();
lcd.print ("DUREE VOYAGE =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (t);
lcd.print(" s");
delay (2000);
if(u>=300000000){
lcd.clear();
lcd.print ("VIT >= C");
delay (2000);
lcd.setCursor (0,1);
lcd.print ("INTERDIT!");
delay (2000);
}
else {
unsigned long n = l*sqrt(1-pow(i,2)/pow(c,2));
lcd.clear();
lcd.print  ("NOUV. L. OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (n);
lcd.print (" m");
delay (2000);
unsigned long d = t/(sqrt(1-pow(i,2)/pow(c,2)));
lcd.clear();
lcd.print  ("DUREE OBJET =");
delay (2000);
lcd.setCursor (0,1);
lcd.print (d);
lcd.print (" s");
delay (2000);
lcd.clear();
digitalWrite(7, LOW);
}
delay(5000);

digitalWrite(10, HIGH);
delay(2000);
position_servo=map(n,0,l,0,150);
mon_servo.write(position_servo);
digitalWrite(10, LOW);
delay(2000);
}



  }

as tu essayé en déclarant dans le set up Bouton poussoir en input ?

Bonsoir dfgh!

Merci de ton aide, mais je viens de trouver le problème de mon programme les déclarations du servomoteru étaient mal placées. Merci de ton aide dans tout les cas.