bu chance, how would i go about using a nexus display to make an intervelometer (a device that can set a camera to take photoes at a set interval, with a set number of photoes and with a set exposure)
#define SHUTTER_PIN 2 // The pin that connects to the shutter of the camera. Must be kept HIGH if shutter is not to be triggered
//#define FOCUS_PIN 3 // The pin that connects to the shutter of the camera. Must be kept HIGH if shutter is not to be triggered
#define SHUTTER_TRIGGER 250
#include <SoftwareSerial.h>
SoftwareSerial btSerial(4,3); // RX, TX
void setup() {
btSerial.begin(115200); // start serial peripheral
pinMode(SHUTTER_PIN,OUTPUT);
//pinMode(FOCUS_PIN,OUTPUT);
digitalWrite(SHUTTER_PIN,HIGH);
//digitalWrite(FOCUS_PIN,HIGH);
}
unsigned long interval = 0;
unsigned long numberOfPhotos = 0;
unsigned long cameraExposure = 0;
String action = "";
bool messageComplete = false;
void loop() {
if(btSerial.available()) // If there is serial data waiting in the buffer
{
char actionChar = btSerial.read();
if(actionChar == '\n') {
messageComplete = true;
//Serial.print(action);
}
else {
action += actionChar;
}
}
if(messageComplete) {
String key = action.substring(0, action.indexOf(" "));
String value = action.substring(action.indexOf(" ") + 1);
if(key == "setNumberOfPhotos") {
numberOfPhotos = value.toInt();
}
else if(key == "setInterval") {
interval = value.toInt() * 1000;
}
else if(key == "setCameraExposure") {
cameraExposure = value.toInt() * 1000;
}
else if(key == "start") {
btSerial.println("Starting time lapse: ");
unsigned long remainingPhotos = numberOfPhotos;
while(remainingPhotos) {
//Serial.print("Taking photo number "); Serial.print(remainingPhotos);
digitalWrite(SHUTTER_PIN,LOW);
delay(SHUTTER_TRIGGER);
digitalWrite(SHUTTER_PIN,HIGH);
delay(interval - cameraExposure - SHUTTER_TRIGGER);
remainingPhotos --;
}
}
else {
btSerial.println("Action not recognized");
}
btSerial.println("////////////////////////////////////////////");
btSerial.print("Photos: "); btSerial.print(numberOfPhotos); btSerial.print(". Interval: "); btSerial.print((float)interval/1000); btSerial.print(" seconds. "); btSerial.print("Exposure: "); btSerial.print((float)cameraExposure/1000); btSerial.println(" seconds");
btSerial.print("It will take "); btSerial.print((float)interval * numberOfPhotos / 1000); btSerial.println(" seconds to complete this timelapse");
btSerial.print("Played back at 30fps the resulting clip will be "); btSerial.print((float)numberOfPhotos/30); btSerial.println(" seconds long");
btSerial.println("////////////////////////////////////////////");
action = "";
messageComplete = false;
}
}
i want to intergrate the intervelometer code from this ide but alas, i dont have much coding knowladge especially in nexus displays (if not any)
this is what ive tried to do but it just doesnt seem to work. like the values wont print onto t3 and im just kinda stumped
#include <Nextion.h>
#define LED_PIN 2
#define LED_TRIGGER 250
int variable1 = 0;
int variable2 = 0;
int counter = 0;
int CurrentPage = 0;
NexButton bSta = NexButton(0, 13, "bSta");
NexButton bPhN = NexButton(0, 18, "bPhN");
NexButton bInt = NexButton(0, 19, "bInt");
NexButton bExp = NexButton(0, 20, "bExp");
NexNumber nPhN = NexNumber(0, 3, "nPhN");
NexNumber nInt = NexNumber(0, 5, "nInt");
NexNumber nExp = NexNumber(0, 7, "nExp");
NexText t3 = NexText(0, 8, "t3");
NexSlider hPhN = NexSlider(0, 10, "hPhN");
NexSlider hInt = NexSlider(0, 11, "hInt");
NexSlider hExp = NexSlider(0, 12, "hExp");
NexSlider hBri = NexSlider(1, 3, "hBri");
NexProgressBar jProg1 = NexProgressBar(0, 9, "jProg1");
NexProgressBar jProg2 = NexProgressBar(1, 2, "jProg2");
char buffer[100] = {0};
NexTouch *nex_listen_list[] =
{
&bSta,
&bPhN,
&bInt,
&bExp,
&hPhN,
&hInt,
&hExp,
&hBri,
NULL
};
unsigned long interval = 0;
unsigned long numberOfPhotos = 0;
unsigned long cameraExposure = 0;
String action = "";
bool messageComplete = false;
void hPhNPopCallBack(void *ptr){
uint32_t number1 = 0;
hPhN.getValue(&number1);
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
if(number1==0){
hPhN.getValue(&number1);
}
Serial.print("nPhN.val=");
Serial.print(number1);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
void hIntPopCallBack(void *ptr){
uint32_t number2 = 0;
hInt.getValue(&number2);
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
if(number2==0){
hInt.getValue(&number2);
}
Serial.print("nInt.val=");
Serial.print(number2);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
void hExpPopCallBack(void *ptr){
uint32_t number3 = 0;
hExp.getValue(&number3);
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
if(number3==0){
hExp.getValue(&number3);
}
Serial.print("nExp.val=");
Serial.print(number3);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
void bPhNPopCallBack(void *ptr)
{
}
void bIntPopCallBack(void *ptr)
{
}
void bExpPopCallBack(void *ptr)
{
}
void bStaPushCallBack(void *ptr)
{
}
void setup() { // put your setup code here, to run once:
Serial.begin(9600);
// I am going to change the Serial baud to a faster rate (optional):
delay(500); // This dalay is just in case the nextion display didn't start yet, to be sure it will receive the following command.
Serial.print("baud=115200");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.end(); // End the serial comunication of baud=9600.
Serial.begin(115200); // Start serial comunication at baud=38400.
bSta.attachPush(bStaPushCallBack);
//hPhN.attachPop(hPhNPopCallBack);
//hInt.attachPop(hIntPopCallBack);
//hExp.attachPop(hExpPopCallBack);
//hBri.attachPop(hBriPopCallBack);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
}
void loop()
{
nexLoop(nex_listen_list);
}
i guess the idea is to change the slider to the set value suck as 2000 photos and than press the cutton next to said slider. this will print the text onto t3 from the lower part of the first code i have uploaded aswell as set the camera shutter to go off 2000 times. this is the same for the exposure and interval exept when those are printed it will calculate the total time.
sorry if this is allot i just have no idea what im doing wrong and just quite stumped.