Twee acties tegelijk laten lopen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 20 Dec 2015, 02:04
Woonplaats: 080

Twee acties tegelijk laten lopen

Berichtdoor Patt » 01 Jan 2016, 18:45

Heren,

Ik ben bezig met een knipperlichtprojectje voor een neefje, twee led's moeten om en om flitsen de derde moet continu blijven flitsen.
Heb al van alles geprobeerd maar ze blijven elkaar steeds opvolgen, ik zal wel iets over het hoofd zien maar kom er zelf niet uit.
Is er iemand van jullie die mij kan vertellen hoe ik pin 13 onafhankelijk van pin 11 en 12 kan programmeren?
Heb er niks over kunnen vinden op het world wide web.
Deze code gebruik ik:

void setup() {
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(11, HIGH);
delay(50);
digitalWrite(11, LOW);
delay(100);
digitalWrite(11, HIGH);
delay(50);
digitalWrite(11, LOW);
delay(100);

digitalWrite(12, HIGH);
delay(50);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(50);
digitalWrite(12, LOW);
delay(100);

digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}

Alvast mijn hartelijke dank.

Advertisement

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

Re: Twee acties tegelijk laten lopen

Berichtdoor shooter » 01 Jan 2016, 20:48

dit is het snelst op te lossen door blink without delay.

cpp code
/* Multiple independent delay - Two blinking LEDs

Working code example that blinks two LEDs, each with its own independent period.
This extends the BlinkWithoutDelay example of a single LED, showing how to
implement multiple independent timing paths in the main loop.

Written by several forum members. In public domain. Oct 2011.

Note: works even when millis () wraps around to zero after approximately 50 days.
*/

// Which pins are connected to which LED
const byte greenLED = 8 ;
const byte redLED = 10 ;

// Time periods of blinks in milliseconds (1000 milliseconds to a second).
// Time variable and constants are always unsigned long
const unsigned long greenLEDinterval = 555UL ;
const unsigned long redLEDinterval = 1234UL ;

// Variable holding the timer value so far. One for each "Timer"
unsigned long greenLEDtimer = 0 ;
unsigned long redLEDtimer = 0 ;

// Variable to know what the current LED state is
int greenLEDState = LOW ;
int redLEDState = LOW ;

void setup() {
pinMode (greenLED,OUTPUT) ;
pinMode (redLED,OUTPUT) ;
greenLEDtimer = millis () ;
redLEDtimer = millis () ;
}

void loop() {

// Handling the blink of one LED.
// First, check if it is time to change state
if ( (millis () - greenLEDtimer) >= greenLEDinterval ) {
// It is time to change state. Calculate next state.
if (greenLEDState == LOW)
greenLEDState = HIGH ;
else
greenLEDState = LOW ;
// Write new state
digitalWrite (greenLED, greenLEDState ) ;
// Reset timer
greenLEDtimer = millis () ;
}

// The other LED is controlled the same way. Repeat for more LEDs
if ( (millis () - redLEDtimer) >= redLEDinterval ) {
if (redLEDState == LOW)
redLEDState = HIGH ;
else
redLEDState = LOW ;
digitalWrite (redLED, redLEDState ) ;
redLEDtimer = millis () ;
}

/* Other code that needs to execute goes here.
It will be called many thousands of times per second because the above code
does not wait for the LED blink interval to finish. */

}

heel snel even van arduino.cc gehaald (ook uit het forum)
niks aan veranderd, het gaat dus om het principe.
als het neefje ouder is dan 10 jaar dan geef hem ditstukje maar, hij kan het best zelf hoor.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 20 Dec 2015, 02:04
Woonplaats: 080

Re: Twee acties tegelijk laten lopen

Berichtdoor Patt » 01 Jan 2016, 22:18

Paul,

Zoiets als dit had ik ook al gevonden, maar hoe krijg ik nu dat de led's ( pin 11 & 12) twee keer achter elkaar knipperen en pin 13 continu blijft knipperen.
Met deze methode volgen ze elkaar ook op pin 13 stopt als pin 11 & 12 knipperen, ik wil de blauwe led continu laten knipperen en de rode en groene elkaar afwisselen.


Ik heb deze code ook geprobeerd:
cpp code
// Which pins are connected to which LED
const byte greenLED = 11 ;
const byte redLED = 12 ;
const byte blueLED = 13 ;

// Time periods of blinks in milliseconds (1000 milliseconds to a second).
// Time variable and constants are always unsigned long
const unsigned long greenLEDinterval = 200UL ;
const unsigned long redLEDinterval = 200UL ;
const unsigned long blueLEDinterval = 25UL;

// Variable holding the timer value so far. One for each "Timer"
unsigned long greenLEDtimer = 0 ;
unsigned long redLEDtimer = 0 ;
unsigned long blueLEDtimer = 0 ;

// Variable to know what the current LED state is
int greenLEDState = LOW ;
int redLEDState = LOW ;
int blueLEDState = LOW ;

void setup() {
pinMode (greenLED,OUTPUT) ;
pinMode (redLED,OUTPUT) ;
pinMode (blueLED, OUTPUT) ;
greenLEDtimer = millis () ;
redLEDtimer = millis () ;
blueLEDtimer = millis () ;
}

void loop() {

// Handling the blink of one LED.
// First, check if it is time to change state
if ( (millis () - greenLEDtimer) >= greenLEDinterval ) {
// It is time to change state. Calculate next state.
if (greenLEDState == LOW)
greenLEDState = HIGH ;
else
greenLEDState = LOW ;
// Write new state
digitalWrite (greenLED, greenLEDState ) ;
// Reset timer
greenLEDtimer = millis () ;
}

// The other LED is controlled the same way. Repeat for more LEDs
if ( (millis () - redLEDtimer) >= redLEDinterval ) {
if (redLEDState == LOW)
redLEDState = HIGH ;
else
redLEDState = LOW ;
digitalWrite (redLED, redLEDState ) ;
redLEDtimer = millis () ;
}

// The other LED is controlled the same way. Repeat for more LEDs
if ( (millis () - blueLEDtimer) >= blueLEDinterval ) {
if (blueLEDState == LOW)
blueLEDState = HIGH ;
else
blueLEDState = LOW ;
digitalWrite (blueLED, blueLEDState ) ;
blueLEDtimer = millis () ;
}

}

De bedoeling is dat deze schakeling op een attiny gebakken word en in een autootje komt, de koplampjes knipperen continu en de twee andere led's moeten in de lichtbalk komen.

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

Re: Twee acties tegelijk laten lopen

Berichtdoor shooter » 02 Jan 2016, 11:21

dus als redledstate==high then greenledstate =low.
dan heb je een timer minder nodig.
maar je programma is correct lijkt mij.
nu knipperen zeallemaal onafhankelijk, maar je kunt van alles maken hoor.
de blauwe lamp is onafhankelijk en draait op 1 timer, (maar je kunt ook verschillende tijden gebruiken natuurlijk.
je kunt ook random tijden gebruiken.
je kunt ook een hele volgorde maken met een switch case actie.
maak een paar timing diagrammen en dan komt het prog vanzelf, zo kun je ook diverse dingen schijnbaar tegelijk doen.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 20 Dec 2015, 02:04
Woonplaats: 080

Re: Twee acties tegelijk laten lopen

Berichtdoor Patt » 02 Jan 2016, 15:32

Bedankt dan zal ik eens aan de gang gaan met de timer.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 40 gasten