Arduino loop moet na 36x stoppen

Arduino specifieke Software
Berichten: 11
Geregistreerd: 08 Jul 2018, 23:03

Arduino loop moet na 36x stoppen

Berichtdoor JanW » 08 Jul 2018, 23:23

Wie helpt mij verder met het volgende probleem?

De bedoeling is op oude dia's om et zetten naar jpg opnames op de smartphone. De gedachte is om een diaprojector en een smartphone te gaan gebruiken. Op de dia projector zit een aansluiting voor een afstandbediening en de smartphone ga ik aansturen met een selfie stick.
De tijden heb ik in de volgende listing een beetje kort gezet maar dat kan aangepast worden. Nu zou het loopje ( void loop) na 36 dia's moeten stoppen want meer dia's pasten er niet in een rekje.
En nou dat krijg ik niet voor elkaar zonder een enorme rij aan foutmeldingen.


//the relays connect to
int IN1 = 2;
int IN2 = 3;

#define ON 0
#define OFF 1
void setup()
{
relay_init();//initialize the relay
}

void loop() {
relay_SetStatus(ON, OFF);//Start puls diaprojector
delay(500);//delay 0,5s
relay_SetStatus(OFF, OFF); //Wachttijd tot de dia plopt.
delay(5000);//delay 5s
relay_SetStatus(OFF, ON);//Puls aan Smartphone
delay(500);//delay 0,52s
relay_SetStatus(OFF, OFF); //Wachtiijd aan het einde voor de nieuwe die.
delay(3000);//delay 3s
}
void relay_init(void)//initialize the relay
{
//set all the relays OUTPUT
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
relay_SetStatus(OFF, OFF); //turn off all the relay
}
//set the status of relays
void relay_SetStatus( unsigned char status_1, unsigned char status_2)
{
digitalWrite(IN1, status_1);
digitalWrite(IN2, status_2);

}

Advertisement

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Arduino loop moet na 36x stoppen

Berichtdoor baco1978 » 09 Jul 2018, 09:10

Code: Alles selecteren

//the relays connect to
int IN1 = 2;
int IN2 = 3;

#define ON 0
#define OFF 1
void setup()
{
relay_init();//initialize the relay
}

void loop() {
for (int Slides=0; Slides <= 36; Slides++)
{
relay_SetStatus(ON, OFF);//Start puls diaprojector
delay(500);//delay 0,5s
relay_SetStatus(OFF, OFF); //Wachttijd tot de dia plopt.
delay(5000);//delay 5s
relay_SetStatus(OFF, ON);//Puls aan Smartphone
delay(500);//delay 0,52s
relay_SetStatus(OFF, OFF); //Wachtiijd aan het einde voor de nieuwe die.
delay(3000);//delay 3s
}
}

void relay_init(void)//initialize the relay
{
//set all the relays OUTPUT
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
relay_SetStatus(OFF, OFF); //turn off all the relay
}
//set the status of relays

void relay_SetStatus( unsigned char status_1, unsigned char status_2)
{
digitalWrite(IN1, status_1);
digitalWrite(IN2, status_2);
}



Met vriendelijke groet Arjan

Berichten: 11
Geregistreerd: 08 Jul 2018, 23:03

Re: Arduino loop moet na 36x stoppen

Berichtdoor JanW » 09 Jul 2018, 17:09

Arjan,

Hartelijk dank voor je reactie.
Ja zoiets zou het moeten zijn, in ieder geval kan ik het laden zonder foutmeldingen.
Nu heb ik voor het testen de teller maar even op 3 gezet en de software geladen.
Jammer genoeg blijft de aansturing van de relais gewoon doorlopen. Heb je misschien nog een idee wat ik zou kunnen proberen?
Bij voorbaat dank voor je moeite.

Gr Jan

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Arduino loop moet na 36x stoppen

Berichtdoor Gij Kieken » 09 Jul 2018, 17:24

Hallo JanW,
Misschien wat onorthodocs, maar probeer dit eens.
Enkel door de Reset knop op de Arduino of de voeding spanning te onderbreken zal de sketch terug lopen.

//the relays connect to
int IN1 = 2;
int IN2 = 3;

#define ON 0
#define OFF 1
void setup()
{
relay_init();//initialize the relay
}

void loop() {
for (int Slides=0; Slides <= 36; Slides++)
{
relay_SetStatus(ON, OFF);//Start puls diaprojector
delay(500);//delay 0,5s
relay_SetStatus(OFF, OFF); //Wachttijd tot de dia plopt.
delay(5000);//delay 5s
relay_SetStatus(OFF, ON);//Puls aan Smartphone
delay(500);//delay 0,52s
relay_SetStatus(OFF, OFF); //Wachtiijd aan het einde voor de nieuwe die.
delay(3000);//delay 3s
}

exit(0); // Voeg deze regel toe.
}

void relay_init(void)//initialize the relay
{
//set all the relays OUTPUT
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
relay_SetStatus(OFF, OFF); //turn off all the relay
}
//set the status of relays

void relay_SetStatus( unsigned char status_1, unsigned char status_2)
{
digitalWrite(IN1, status_1);
digitalWrite(IN2, status_2);
}

Er zijn vast wel betere manieren bijvoorbeeld met een knop om je probleem op te lossen.
Maar heel kort door de bocht zegt die regel, schakel alle interrupts uit en ga in een oneindige loop.

Berichten: 11
Geregistreerd: 08 Jul 2018, 23:03

Re: Arduino loop moet na 36x stoppen

Berichtdoor JanW » 09 Jul 2018, 20:29

Beste Gij Kieken,

Knap hoor dat is dus de oplossing. Dit werkt.

Hartelijk dank voor de moeite, en Arjan jij ook bedankt voor het meedenken.

Gr Jan

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Arduino loop moet na 36x stoppen

Berichtdoor Gij Kieken » 16 Jul 2018, 15:16

Hallo JanW,
Ingeval jouw interesse toch een beetje aangewakkerd zou zijn ,een versie met een knop.
Het blijft echter nog altijd een blocking code door het gebruik van delay().
De uitdaging zou kunnen zijn dit te maken door gebruik te maken van millis().

Code: Alles selecteren
/*
 * Purpose: To automaticaly project a frame of 36 dia's and take a
 * snapshot with a smartphone (selfi-stick included)
 * The circuit:
 *    -Relay-1 to digital input 2
 *    -the NO contact of relay-1 to the start of the dia-projector button
 *    -Relay-2 to digital input 3
 *    -the NO contact of relay-2 to the selfi-stick
 *    -Pushbutton 'NO'-contact one end to ground the other to digital input 4
 * Author: 
 */

//the relays connect to
int IN1 = 2;
int IN2 = 3;
int playBut = 4; //button to start the sequence

#define ON 0
#define OFF 1
int maxSlides = 36;  //max number of slides in a frame (change to xx at your wish)

void setup()
{
  relay_init();//initialize the relay
  pinMode(4, INPUT_PULLUP); //configure the input
}

void loop() {
  while ( ! digitalRead(playBut)) { //inverse signal because INPUT_PULLUP
    for (int Slides = 0; Slides < maxSlides; Slides++)
    {
      relay_SetStatus(ON, OFF);//Start puls diaprojector
      delay(500);//delay 0,5s
      relay_SetStatus(OFF, OFF); //Wachttijd tot de dia plopt.
      delay(5000);//delay 5s
      relay_SetStatus(OFF, ON);//Puls aan Smartphone
      delay(500);//delay 0,5s
      relay_SetStatus(OFF, OFF); //Wachtiijd aan het einde voor de nieuwe dia.
      delay(3000);//delay 3s
    }
  }
}

void relay_init(void)//initialize the relay
{
  //set all the relays OUTPUT
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  relay_SetStatus(OFF, OFF); //turn off all the relay
}
//set the status of relays

void relay_SetStatus( unsigned char status_1, unsigned char status_2)
{
  digitalWrite(IN1, status_1);
  digitalWrite(IN2, status_2);
}

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Bing [Bot] en 23 gasten