Arduino camera en flitser aansturing

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Arduino camera en flitser aansturing

Berichtdoor nicoverduin » 31 Jan 2015, 16:43

Hier een voorbeeld programma, waarbij ik in een tabelletje de verschillende stappen aangeef die gevolgd moeten worden. Boven in staat een eenvoudige class voor een timing stukje code. Dat zou je nog in een .h bestand kunnen gooien.
cpp code
class millisTimer {
public:
void start(bool resetTimer = true);
bool test(unsigned long value);
void stop();
private:
bool shouldWeReset;
unsigned long timer;
};

void millisTimer::start(bool resetTimer) {
//
// save if we wish to reset the timer once the timer has
// exceeded its deadline
//
shouldWeReset = resetTimer;
//
// skip the timer = zero. This is because a timer set to zero
// means the timer is not set
//
while((timer = millis()) == 0L) {};

}

/**
* @name test (unsigned long value)
* @param value determines to what value this timer needs to be tested
* @returns bool true= timer is past set value, false= timer is either not set or not past deadline
* @brief compares the if millis() has exceeded the value time. If so it will return TRUE.
* If it is zero or not past deadline it will return a TRUE. If the resetTimer was set to TRUE when we
* started the timer, the timer will be reset to zero.
*/
bool millisTimer::test(unsigned long value) {

bool returnCode = false;

if (timer != 0) {
if ((millis() - timer) > value){
//
// timer is triggered
//
returnCode = true;
if (shouldWeReset == true) {
timer = 0L;
}
}
}
return returnCode;
}

void millisTimer::stop() {
timer = 0;
}


#define LED1 12 // een LED op pin 12
#define LED2 13 // een LED op Pin 13
#define BLINKTIJD1 500 // elke 1/2 seconden LED1 wisselen
#define BLINKTIJD2 250 // elke 1/4 seconden LED1 wisselen

millisTimer timer;
uint16_t volgendeStap; // geeft aan welke stap verwerkt moet worden
uint16_t teller; // zomaar een tellertje
uint8_t ledState = 0; // geeft de LED output aan

/** Besturing van de stappen */
enum {
initieerStap1 ,
stap1 ,
initieerStap2 ,
stap2 ,
beginOpnieuw
};


void setup()
{
pinMode (LED1, OUTPUT); // Zet de outputs
pinMode (LED2, OUTPUT);
digitalWrite(LED1, LOW); // beginnen met LEDS uit
digitalWrite(LED1, LOW);
timer.stop(); // make sure the timer has not started yet
ledState = 0; // known value to led state
volgendeStap = initieerStap1; // we beginnen bij stap 0
}

void loop()
{
//
// verwerk de relevante stap
//
switch (volgendeStap) {

case initieerStap1:
teller = 0; // reset de teller
digitalWrite(LED2, LOW); // zet de LED uit
timer.start(); // set the timer to now
volgendeStap++;
break;

case stap1:
//
// alleen uitvoeren als de tijd is verstreken
//
if (timer.test(BLINKTIJD1)) {
ledState = !ledState;
digitalWrite(LED1, ledState); // Flip led 1
teller++; // verhoog teller
if (teller > 10) { // alles gehad?
volgendeStap++; // we zijn hier klaar
} else {
timer.start(); // we zijn er nog niet dus de timer zetten
}
}
break;

case initieerStap2:
teller = 0; // reset de teller
digitalWrite(LED1, LOW); // zet de LED uit
volgendeStap++;
timer.start();
break;

case stap2:
//
// alleen uitvoeren als de tijd is verstreken
//
if (timer.test(BLINKTIJD2)) {
ledState = !ledState;
digitalWrite(LED2, ledState); // Flip led 1
teller++; // verhoog teller tot 10
if (teller > 10) { // alles gehad
volgendeStap++;
} else {
timer.start(); // we zijn er nog niet dus de timer zetten
}
}
break;

case beginOpnieuw:
volgendeStap = initieerStap1; // begin bij de eerste stap
timer.start(); // we zijn er nog niet dus de timer zetten
break;

default:
break;
}
}

Kijk eerst maar of je dit begrijpt.
Grtz
Nico
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Berichten: 9
Geregistreerd: 14 Dec 2014, 21:42

Re: Arduino camera en flitser aansturing

Berichtdoor kiezel » 02 Feb 2015, 22:11

Hi Nico,
Bedankt, interessant! Genoeg voer voor weer een tijdje puzzelen :D
Ik kom wel weet terug met vragen voor de volgende fase 8-)
Groet, Kiezel

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten