Stap 4: Software
Om batterijleven te redden in de software heeft een functie de achtergrondverlichting uit. Wanneer u op een willekeurige toets drukt, de LCD-achtergrondverlichting inschakelen.Broncode:
Artikel http://english.cxem.net/arduino/arduino6.php
Versie 1.0
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#define axis_X 0 / / as X van Joystic aangesloten op analoge 0
#define axis_Y 1 / / as Y van Joystic aangesloten op analoge 1
#define axis_Z 2 / / as-knop Z van Joystic aangesloten op Digital 2
#define pinIRLED 10 / / IR LED
#define LEDgreen 13 / / LED aan boord
#define autoOFF 10 / / autoOFF backlight LCD
LiquidCrystal_I2C lcd(0x27,16,2); 0x27 het LCD-adres instelt voor een 16 tekens en 2 regelig display
int value_X, value_Y, value_Z = 0; aswaarden
int pos = 0; huidige positie (0 - vertraging, 1 - werk)
int interval = 1; pauze tussen de opnamen (sec)
int cntPict = 0; schoten tellen
Booleaanse werken = false;
unsigned long currentTime;
unsigned long TimeShot, TimeLCDOff;
VOID Setup
{
pinMode (axis_Z, INPUT); Joystic knop
pinMode (pinIRLED, OUTPUT); IR LED
LCD.init(); init LCD
LCD.backlight(); Draai LCD backlight ON
LCD.Clear(); duidelijk LCD
show_menu(); functie Toon menu
currentTime = millis();
TimeShot = currentTime; schoten-timer
TimeLCDOff = currentTime; timer voor achtergrondverlichting
Serial.begin(115200);
}
void loop
{
value_X = analogRead(axis_X); Lees de analoge waarde van de X-as
value_Y = analogRead(axis_Y); Lees de analoge waarde van de Y-as
value_Z = digitalRead(axis_Z); Lees de digitale waarde van de Z-as (knop)
value_Z = value_Z ^ 1; omkeren van de waarde
if(Working == false) {}
if(value_Y > 540) {/ / joystick omhoog
POS = 0;
LCD.backlight(); LCD backlight ON
TimeLCDOff = currentTime; nieuwwaarde van TimeLCDOff
show_menu();
}
else if (value_Y < 500) {/ / joystick omlaag
POS = 1;
LCD.backlight(); LCD backlight ON
TimeLCDOff = currentTime; nieuwwaarde van TimeLCDOff
show_menu();
}
if(value_X > 530) {/ / joystick links
LCD.backlight(); LCD backlight ON
TimeLCDOff = currentTime; nieuwwaarde van TimeLCDOff
if(POS == 0) {}
--interval;
Als (value_X > 900) interval = interval-10; joystick volledige links
Als interval (interval < 1) = 1;
}
show_menu();
}
else if (value_X < 490) {/ / joystick naar rechts
LCD.backlight(); LCD backlight ON
TimeLCDOff = currentTime; nieuwwaarde van TimeLCDOff
if(POS == 0) {}
++ interval;
Als (value_X < 100) interval = interval + 10; joystick naar volledige rechts
}
show_menu();
}
}
if(value_Z == 1) {/ / joystick button pers
LCD.backlight(); LCD backlight ON
TimeLCDOff = currentTime;
if(Working == True) {}
werken = false;
POS = 0;
show_menu();
}
if(POS == 1) show_working(); werk-modus inschakelen
}
delay(200);
currentTime = millis();
if(Working == True) {}
Als (currentTime > = (TimeShot + (interval * 1000))) {}
digitalWrite (LEDgreen, hoge); ingebouwde LED knipperen
delay(100);
digitalWrite (LEDgreen, laag);
takePicture(); verzenden van IR
TimeShot = currentTime;
++ cntPict; verhogen van de teller-schoten
show_working(); vernieuwen van de LCD
}
}
Als (currentTime > = (TimeLCDOff + (autoOFF * 1000))) {}
lcd.noBacklight(); LCD-achtergrondverlichting uit
}
}
VOID show_menu()
{
cntPict = 0; nul uit de counter schoten
LCD.Clear();
lcd.setCursor (0, pos);
LCD.Print("*"); huidige positie
lcd.setCursor (1, 0);
LCD.Print("Delay:");
lcd.setCursor (8, 0);
LCD.Print(interval);
lcd.setCursor (1, 1);
LCD.Print ("Ga werk");
}
VOID 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);
werken = true;
}
VOID pulseON (int pulseTime) {}
unsigned long endPulse = micros() + pulseTime; Maak de microseconden om pulse voor
terwijl (micros() < endPulse) {}
digitalWrite (pinIRLED, hoge); IR inschakelen
delayMicroseconds(13); de helft van de klok cyclus voor 38Khz - bijvoorbeeld het 'over' gedeelte van onze Golf
digitalWrite (pinIRLED, laag); IR uitschakelen
delayMicroseconds(13); vertraging voor de andere helft van de cyclus voor het genereren van Golf / trilling
}
}
VOID pulseOFF (unsigned long startDelay) {}
unsigned long endDelay = micros() + startDelay; Maak de microseconden te stellen voor
while(Micros() < endDelay);
}
ongeldig takePicture() {}
voor (int i = 0; ik < 2; i ++) {/ / impuls sturen twee keer
pulseON(2336);
pulseOFF(646);
.......
.......
.......
pulseON(99);
pulseOFF(646);
}
}
Video:
U kunt volledige PDE code en Fritzing project f downloaden