Bonjour.
Alors que je suis au niveau zéro de la programmation, je me lance dans un projet "pharaonique", utiliser un Arduino pour controler un moteur pas à pas et un boitier reflex (motorisation d'une platine micrométrique en vue de faire du stacking).
J'ai commencé à réfléchir aux différents menus qui permettraient de programmer le nombre d'images à prendre, la taille du pas entre les photos, le délai...
Ca pourrait ressembler à ça (mais cette nuit, je me suis aperçu que j'avais oublié une commande d'avance/retour, rapide/auto, de la platine)
(en taille "originale" - 6 Mo - ICI)
Mais des menus à l'action, il y a tout plein de commandes que je n'arrive pas à mettre en place.
J'ai récupéré les codes du "Photoduino"
Je profite aussi des lumières d'un ami qui a pas mal d'avance sur un projet similaire, mais pour juste un premier paramétrage - activer/désactiver le retroéclairage (LCD DFrobot), je n'arrive déjà pas à aller au bout.
Voilà le bout de code que j'ai pour l'instant
/*******************************************************
*
* This program will test the LCD panel and the buttons
* Mark Bramwell, July 2010
* Modif Ch.Aubert, Dec. 2011 - Ajout valeur analogique->numérique (AN) boutons et divers remaniements (entre autre de variables)
* Modif Fred, Dec. 2011 - ajout d'un menu pour mettre ou enlever le retroeclairage (pin 10)
********************************************************/
/////////////// Librairie(s) à inclure //////////////////
#include <LiquidCrystal.h>
////////// Définir les broches du LCD (pins) /////////////////////////
LiquidCrystal lcd(8, 9, 4, 5, 6, 7, 10);
////////////////// Définition des E/S ////////////////
int PinBouton = 0; // broche analogique (A0) utilisée pour les 5 boutons
int PinLedArduino = 13; // Led de controle sur circuit Arduino
////////////////// CONSTANTES /////////////////////
// define some values used by the panel and buttons
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// Default system config
#define DEFAULT_system_useBacklight true
////////// VARIABLES ///////////////////////////
byte lcd_key = 0;
int adc_key_in = 0;
///////// SETUP ////////////////
void setup()
{
lcd.begin(16, 2); // initialiser la LCD library, 16 caractères, 2 lignes
digitalWrite(10, HIGH); // Init backlight
pinMode(PinLedArduino, OUTPUT); //led de controle - pin 13
}
/////////// Boucle principale ///////////////////
void loop()
{
lcd.setCursor(0,0); // placer le curseur à la première ligne, première position
lcd.print("RETROECLAIRAGE");// texte d'accueil du menu
lcd.setCursor(0,1); // placer le curseur au début de la seconde ligne
lcd_key = read_LCD_buttons(); // lire la valeur du bouton (->fonction)
switch (lcd_key) // selon le bouton appuyé ...
{
case btnRIGHT:
{
lcd.print("<OUI>");
lcd.print(adc_key_in); // Lire la valeur du "bouton" et l'afficher
}
case btnLEFT:
{
lcd.print("<NON>");
lcd.print(adc_key_in);
}
case btnUP:
{
break;
}
case btnDOWN:
{
break;
}
case btnSELECT:
{
lcd.print(" "); //efface ce qui est à l'écran
digitalWrite(PinLedArduino, HIGH); // LED ligne 13 on
lcd.print(adc_key_in);
system_useBacklight(); // change le retroeclairage
delay(500);
digitalWrite(PinLedArduino, LOW); // LED ligne 13 off
}
case btnNONE:
{
lcd.print("<OUI>");
break;
}
}
}
/************* Sous programmes ****************/
// change le retroeclairage
void system_useBacklight() {
//enleve le retroeclairage
digitalWrite(10, LOW);
}
///////////////// FONCTIONS ////////////////////
// Lire la valeur A/D retournée selon le bouton choisi
int read_LCD_buttons()
{
adc_key_in = analogRead(PinBouton);
// Mes boutons me donnent ces résultats :
// Gauche = 500
// Droite = 0
// Haut = 140-141
// Bas = 323-324
// Select = 736-737
// ** Code source : my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// ** we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // On commence par la valeur la plus probable : Aucun appui sur bouton !
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; // si aucun appui sur bouton, on retourne la constante btnNONE ...
}
Comme je suis parti d'autres morceaux... pour commencer, sur l'écran (qui s'affiche avec une intensité lumineuse moindre que d'habitude), j'ai encore de l'ancien texte qui s'affiche sur la première ligne (et pas "RETROECLAIRAGE".
Quand j'appuie sur le bouton "select", l'écran s'éteint tant que j'appuie
(pour la LED en ligne 13, ça fonctionne normalement)
Si j'appuie sur les quatre autres boutons, rien ne se passe.
Voilà.
Un grand merci à ceux ou celles qui pourraient m'aider.
PS : j'ai le livre de Tavernier, j'en ai lu une grande partie, mais le chapitre 2 est encore en algonquin
j'ai suivi un ou deux tutos simples pour faire clignoter des LED, j'ai à peu près compris :~