Ciao a tutti, sono nuovo!
non so se c'è una sezione dove presentarsi, cmq lo faccio qui!
Leggo spesso questo forum per risolvere problemi che insorgono nello sviluppo del software per vari progetti...
Questa volta proprio non riesco a risolvere da me ...e ho bisogno del vostro aiuto per andare avanti.
Comincio a presentarvi ciò che sto costruendo.
Il progetto è un intervallometro per fotocamera, con display lcd 4x16 e tastierino numerico 3x4 per l'inserimento dei valori.
Sull'LCD viene visualizzato:
TIME (intervallo di scatto)
REPEAT (numero di scatti da effettuare)
FPS (frame per seconds)
MOVIE (lunghezza del filmato unendo tutti i fotogrammi REPEAT/FPS)
per l'inserimento dei dati, ho usato un tastierino numerico 3x4 collegato all'ingresso analogico 2 prendendo spunto da questo articolo
il problema è che non riesco a dire ad arduino di eseguire lo scatto per N volte, tante quante sono impostate nella variabile " rpt"...
ho provato con la funzione FOR, WHILE ma niente... suggerimenti?
vi posto il codice:
#include <LiquidCrystal.h>
#define lcdlight 2000
unsigned int rpt = 300;
int scatti = 0;
int value = LOW;
long previousMills = 0;
unsigned int intervallo =1;
int luce=0;
int analogicoin=0;
int fps = 30;
int Lampeggio=0;
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
void setup(){
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(11, HIGH);
lcd.begin(16, 4);
lcd.setCursor(0, 0);
lcd.print("Cava's");
lcd.setCursor(0, 1);
lcd.print("Intervallometer");
lcd.setCursor(-4, 3);
lcd.print("LOADING");
delay(1000);
lcd.setCursor(3, 3);
lcd.print(".");
delay(1000);
lcd.setCursor(4, 3);
lcd.print(".");
delay(1000);
lcd.setCursor(5, 3);
lcd.print(".");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
digitalWrite(11, LOW);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
lcd.setCursor(11, 1);
lcd.print(rpt);
lcd.setCursor(7, 2);
lcd.print(fps);
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
}
void loop(){
luce=analogRead(2);
delay(15);
if(analogicoin >= 657 && analogicoin <= 667){
digitalWrite(11, HIGH);
}
else{
digitalWrite(11, LOW);
}
analogicoin=analogRead(2);
delay(15);
if(analogicoin >= 1002 && analogicoin <= 1012){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
intervallo--;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(7, 2);
lcd.print(fps);
lcd.setCursor(11, 1);
lcd.print(rpt);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
delay(250);
}
if(analogicoin >= 606 && analogicoin <= 616 ){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
intervallo++;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(7, 2);
lcd.print(fps);
lcd.setCursor(11, 1);
lcd.print(rpt);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
delay(250);
}
analogicoin = analogRead(2);
delay(15);
if (analogicoin >= 944 && analogicoin <= 954) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
rpt-- ;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(7, 2);
lcd.print(fps);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
lcd.setCursor(11, 1);
lcd.print(rpt);
delay(250);
}
if (analogicoin >= 580 && analogicoin <= 590) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
rpt++ ;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(7, 2);
lcd.print(fps);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
lcd.setCursor(11, 1);
lcd.print(rpt);
delay(250);
}
if (analogicoin >= 882 && analogicoin <= 892) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
fps--;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
lcd.setCursor(11, 1);
lcd.print(rpt);
lcd.setCursor(7, 2);
lcd.print(fps);
delay(250);
}
if (analogicoin >= 557 && analogicoin <= 567) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.setCursor(0, 1);
lcd.print("REPEAT:");
lcd.setCursor(-4, 2);
lcd.print("FPS:");
lcd.setCursor(-4, 3);
lcd.print("MOVIE:");
fps++;
lcd.setCursor(7, 3);
lcd.print(rpt/fps);
lcd.setCursor(11, 0);
lcd.print(intervallo+intervallo);
lcd.setCursor(11, 1);
lcd.print(rpt);
lcd.setCursor(7, 2);
lcd.print(fps);
delay(250);
}
if (millis() - previousMills > intervallo*1000 ){
previousMills = millis(); //Tiene in memoria l'ultimo lampeggio
if (value == LOW)
value = HIGH;
else
value = LOW;
digitalWrite(12, value);
}
}
Ringrazio anticipatamente chi mi presterà attenzione, e spero di non aver posto un quesito troppo banale...
Grazie e ciao.
Marco
PS scheda utilizzata arduino 2009