Dubbele werking arduino

algemene C code
Berichten: 5
Geregistreerd: 23 Dec 2017, 18:22

Dubbele werking arduino

Berichtdoor job » 23 Dec 2017, 20:07

Goeden avond,

Ik ben bezig met het inbouwen van verlichting in mijn trap(je)
Ik heb een miniatuur trapje gemaakt van plexiglas met daarin led lampjes. Elke trede heeft een lichtsluis doormiddel van een laser en een LDR. Nou is de bedoeling dat als ik de lichtlijn onderbreekt dat de trede waarop ik "sta" en de trede er onder en de trede er boven verlicht wordt. Nou was ik zover dat het met een sensor werkte. Alleen ik loop tegen het probleem aan dat als de verlichting aan gaat, de sensoren wachten met meten totdat de verlichting weer uit is. Nou heb ik gelezen dat dit door de delay komt. Best logisch natuurlijk maar hoe zou ik dit kunnen oplossen? Het is namelijk de bedoeling dat als ik naar boven loopt de rest van de verlichting ook aan gaat.

Groetjes,
Job

Advertisement

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dubbele werking arduino

Berichtdoor nicoverduin » 23 Dec 2017, 20:09

Nou zet je sketch maar neer en kijk eens naar blink without delay
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 2491
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Dubbele werking arduino

Berichtdoor shooter » 24 Dec 2017, 13:01

op naar les 2 dus.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 23 Dec 2017, 18:22

Re: Dubbele werking arduino

Berichtdoor job » 26 Dec 2017, 17:25

const int ledPin = 23;

const int ldrPin = A0;

void setup() {

Serial.begin(9600);

pinMode(ledPin, OUTPUT);

pinMode(ldrPin, INPUT);

}

void loop() {

int ldrStatus = analogRead(ldrPin);

if (ldrStatus >=900) {

digitalWrite(ledPin, HIGH);

Serial.println("LDR is DARK, LED is ON");

}

else {

digitalWrite(ledPin, LOW);

Serial.println("------------");

}

}




als ik dit gebruik dan ga mijn trede aan als ik de lichtlijn onderbreekt. het is mij alleen niet duidelijk hoe ik dit nou kan combineren met blink whithout delay.

Berichten: 2491
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Dubbele werking arduino

Berichtdoor shooter » 26 Dec 2017, 21:52

sorry was iets te snel, er zit helemaal geen delay in je programma, volgende stap is om de trede erboven en eronder aan te zetten, ga je gang.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dubbele werking arduino

Berichtdoor nicoverduin » 26 Dec 2017, 22:02

Het mij zolangzamerhad een beetje onduidelijk wat de TS wil. Waarom had hij uberhaupt in zijn eerste onbekende sketch een delay ingebouwd?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 23 Dec 2017, 18:22

Re: Dubbele werking arduino

Berichtdoor job » 26 Dec 2017, 22:11

Gewoon heel simpel. Dat komt door het gebrek aan kennis over een arduino. Dus vandaar dat ik hulp zoek. Wat ik hier boven hebt staan werkt prima voor een trede maar het probleem is dat als ik mn vinger weg haal bij de sensor, dat dan de verlichting gelijk weer uit gaat. Daar had ik dus een delay neergezet zodat het wat langer duurde voordat de verlichting weer uitging van de trede. Maar dat werkt niet want dan stopt mn hele schakeling.

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dubbele werking arduino

Berichtdoor nicoverduin » 26 Dec 2017, 23:43

Kijk nu weten we wat je wilt. Maar nergens hier voor staat wat je nu verteld
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 23 Dec 2017, 18:22

Re: Dubbele werking arduino

Berichtdoor job » 27 Dec 2017, 19:03

Sorry ik zal duidelijker zijn voortaan, Nou hopen dat iemand een oplossing heeft of een tip

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dubbele werking arduino

Berichtdoor nicoverduin » 27 Dec 2017, 19:54

Met dank aan de feestdagen.... ff voor 6 treden
cpp code
/**
* program : stairs
* purpose : controlling stairs lights using an Arduino MEGA
* author : Nico Verduin
* date : 27-12-2017
* This program tests sensors if some one is taking the stairs. Once the process has
* started, the direction is determined. Leds switch off after a set time parameter
*/

#include "Arduino.h"

/**
* program definitions
*/
#define LIGHT_SWITCH_OFF_TIME 2000 // switch previsous lights off after 2 seconds
#define NO_OF_STAIRS 6 // this example supports 6 stairs

#define USE_INTERNAL_PULLUP // comment this line if NOT using internal PULLUP resistors
#define OUTPUT_ACTIVE_HIGH // High switches Lights on. Comment out if reversed
#define SENSOR_ACTIVE_HIGH // HIGH means sensor is active. Comment out if reversed


// do not change below

void switchStair(uint8_t , uint8_t);

#ifdef OUTPUT_ACTIVE_HIGH
#define OUTPUT_OFF LOW // output LOW is lights off
#define OUTPUT_ON HIGH // output HIGH is lights on
#else
#define OUTPUT_OFF HIGH // output HIGH is lights off
#define OUTPUT_ON LOW // output LOW is lights on
#endif

#ifdef _SENSOR_ACTIVE_HIGH
#define SENSOR_OFF LOW // sensor is LOW is sensor is off
#define SENSOR_ON HIGH // sensor is HIGH is sensor is on
#else
#define SENSOR_OFF HIGH // sensor is HIGH is sensor is off
#define SENSOR_ON LOW // sensor is LOW is sensor is on
#endif

/**
* global variables
*/
// contents of arrays should meet NO_OF_STAIRS or you will get a compile error
uint8_t pinArray[NO_OF_STAIRS] = { 14, 15, 16, 17, 18, 19};
uint8_t sensorArray[NO_OF_STAIRS] = { 2, 3, 4, 5, 6, 7};
uint32_t timerArray[NO_OF_STAIRS];
boolean timerRunningArray[NO_OF_STAIRS];

/**
* @name setup
* initializes the program
*/
void setup()
{
// setup IO and timer running array
for (uint8_t i = 0; i < NO_OF_STAIRS; i++) {
pinMode(pinArray[i], OUTPUT); // outputs
digitalWrite(pinArray[i], OUTPUT_OFF); // lights off
#ifdef USE_INTERNAL_PULLUP
pinMode(sensorArray[i], INPUT_PULLUP); // use internal pullup
#else
pinMode(sensorArray[i], INPUT); // no internal pullup
#endif
timerRunningArray[i] = false;
}
}

/**
* @name loop
* runs forever
*/
void loop()
{
uint32_t currentMillis = millis();

// check our sensors
for (uint8_t i = 0; i < NO_OF_STAIRS; i++) {
if (digitalRead(sensorArray[i]) == SENSOR_ON) {

// start our corresponding timer
timerArray[i] = currentMillis;
timerRunningArray[i] = true;
}
}

// check our timers
for (uint8_t i = 0; i < NO_OF_STAIRS; i++) {

// check if the timer is running
if (timerRunningArray[i]) {

// check if timer past set delay time
if (currentMillis - timerArray[i] > LIGHT_SWITCH_OFF_TIME) {

// we are past our delayed swithing time

// switch or keep lights off
switchStair(i, OUTPUT_OFF);
timerRunningArray[i] = false;
} else {

// switch or keep lights on
switchStair(i, OUTPUT_ON);
}
}
}
}

/**
* @name switchStair
* @param Index uint8_t stair number in arrays
* @param uint8_t on or off
* Switches the current stair plus its successor and predecessor on or off
*/
void switchStair(uint8_t Index, uint8_t onOff) {
int8_t stairIndex = Index;

// check successor
if ((stairIndex + 1) < NO_OF_STAIRS ) {

// switch successor stair on or off
digitalWrite(pinArray[stairIndex + 1], onOff);
}

// switch current stair on or off
digitalWrite(pinArray[stairIndex], onOff);

// check successor
if ((stairIndex - 1) >= 0 ) {

// switch successor stair on or off
digitalWrite(pinArray[stairIndex - 1], onOff);
}

}


Je moet zelf ff aantal treden en de pinnummers definieren.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast