Étape 4: logiciels
Pour sauver la vie de la batterie dans le logiciel dispose d’une fonction le rétro-éclairage LCD. Lorsque vous appuyez sur une touche quelconque, le rétro-éclairage de l’écran LCD s’allume.Code source :
Article http://english.cxem.net/arduino/arduino6.php
Version 1.0
#include « Wire.h »
#include « LiquidCrystal_I2C.h »
#define axis_X 0 / / axe X de Joystic connecté à analogique 0
#define axis_Y 1 / / axe Y de Joystic connecté à analogique 1
#define axis_Z 2 / / Z axe-bouton de Joystic connecté à 2 numérique
#define pinIRLED 10 / / IR LED
#define LEDgreen 13 / / LED à bord
#define autoOFF 10 / / autoOFF rétro-éclairage LCD
LiquidCrystal_I2C lcd(0x27,16,2) ; mettre l’adresse de LCD sur 0 x 27 pour un 16 caractères et affichage de la ligne 2
int value_X, value_Y, value_Z = 0 ; valeurs de l’axe
int pos = 0 ; position actuelle (0 - retard, 1 - travail)
intervalle d’int = 1 ; faire une pause entre les prises (s)
int cntPict = 0 ; nombre de coups de feu
travail booléen = false ;
unsigned long currentTime ;
unsigned long TimeShot, TimeLCDOff ;
void setup()
{
pinMode (axis_Z, entrée) ; Joystic bouton
pinMode (pinIRLED, sortie) ; LED IR
LCD.init() ; init LCD
LCD.backlight() ; LCD rétro-éclairage allumé
LCD.Clear() ; Clear LCD
show_menu() ; afficher le menu fonction
currentTime = millis() ;
TimeShot = currentTime ; minuterie de coups
TimeLCDOff = currentTime ; minuterie du rétro-éclairage
Serial.Begin(115200) ;
}
void loop()
{
value_X = analogRead(axis_X) ; lire la valeur analogique de l’axe X
value_Y = analogRead(axis_Y) ; lire la valeur analogique de l’axe Y
value_Z = digitalRead(axis_Z) ; lire la valeur numérique de l’axe Z (bouton)
value_Z = value_Z ^ 1 ; inverser la valeur
if(Working == false) {}
if(value_Y > 540) {/ / joystick vers le haut
POS = 0 ;
LCD.backlight() ; LCD rétro-éclairage ON
TimeLCDOff = currentTime ; nouvelle valeur du TimeLCDOff
show_menu() ;
}
ElseIf (value_Y < 500) {/ / joystick vers le bas
POS = 1 ;
LCD.backlight() ; LCD rétro-éclairage ON
TimeLCDOff = currentTime ; nouvelle valeur du TimeLCDOff
show_menu() ;
}
if(value_X > 530) {/ / joystick gauche
LCD.backlight() ; LCD rétro-éclairage ON
TimeLCDOff = currentTime ; nouvelle valeur du TimeLCDOff
if(POS == 0) {}
--intervalle ;
Si interval (value_X > 900) = intervalle-10 ; plein gauche manette
Si interval (intervalle < 1) = 1 ;
}
show_menu() ;
}
ElseIf (value_X < 490) {/ / manette droite
LCD.backlight() ; LCD rétro-éclairage ON
TimeLCDOff = currentTime ; nouvelle valeur du TimeLCDOff
if(POS == 0) {}
++ intervalle ;
Si interval (value_X < 100) = intervalle + 10 ; manette droite
}
show_menu() ;
}
}
if(value_Z == 1) {/ / joystick bouton presse
LCD.backlight() ; LCD rétro-éclairage ON
TimeLCDOff = currentTime ;
if(Working == true) {}
travailler = false ;
POS = 0 ;
show_menu() ;
}
if(pos == 1) show_working() ; activer le mode de travail
}
Delay(200) ;
currentTime = millis() ;
if(Working == true) {}
Si (heureactuelle > = (TimeShot + (intervalle * 1000))) {}
digitalWrite (LEDgreen, élevé) ; clignotement LED intégré
Delay(100) ;
digitalWrite (LEDgreen, basse) ;
takePicture() ; Envoyer IR
TimeShot = currentTime ;
++ cntPict ; augmenter les plans de comptoir
show_working() ; rafraîchir l’écran LCD
}
}
Si (heureactuelle > = (TimeLCDOff + (autoOFF * 1000))) {}
lcd.noBacklight() ; Rétro-éclairage LCD désactivé
}
}
Sub show_menu()
{
cntPict = 0 ; coups de compteur à zéro
LCD.Clear() ;
lcd.setCursor (0, pos) ;
LCD.Print("*") ; position actuelle
lcd.setCursor (1, 0) ;
LCD.Print("Delay:") ;
lcd.setCursor (8, 0) ;
LCD.Print(Interval) ;
lcd.setCursor (1, 1) ;
LCD.Print ("travail aller") ;
}
Sub show_working()
{
LCD.Clear() ;
lcd.setCursor (3, 0) ;
LCD.Print("Working...") ;
lcd.setCursor (2, 1) ;
LCD.Print("Shots:") ;
lcd.setCursor (9, 1) ;
LCD.Print(cntPict) ;
travailler = true ;
}
void pulseON (int pulseTime) {}
unsigned long endPulse = micros() + pulseTime ; créer les microsecondes pour impulsion pour
tandis que (micros() < endPulse) {}
digitalWrite (pinIRLED, HIGH) ; Allumez IR
delayMicroseconds(13) ; la moitié de l’horloge cycle pour 38KHz - par exemple la « on » une partie de notre vague
digitalWrite (pinIRLED, basse) ; désactiver l’IR
delayMicroseconds(13) ; délai pour l’autre moitié du cycle pour générer des ondes / oscillation
}
}
void pulseOFF (unsigned long startDelay) {}
unsigned long endDelay = micros() + startDelay ; créer les microsecondes pour retarder pour
while(micros() < endDelay) ;
}
void takePicture() {}
pour (int i = 0; j’ai < 2; i ++) {/ / impulsion envoyer deux fois
pulseON(2336) ;
pulseOFF(646) ;
.......
.......
.......
pulseON(99) ;
pulseOFF(646) ;
}
}
Vidéo :
Vous pouvez télécharger le code complet de PDE et Fritzing projet f