Go Down

Topic: [HELP] Running 2 programs at once. (Read 1 time) previous topic - next topic

Gin319



Let's say that I want to control 2 LEDs independently, with different pin connections and effects.


http://www.gammon.com.au/blink



Thanks for the link. I kinda understand how it works. Now let's say that I wanted to take temperature readings and then control a servo motor independently.

Using this code that I got from your link, can you please give me an idea on how to place it in this code?

Thanks.

Code: [Select]


// Which pins are connected to which LED
const byte greenLED = 12;
const byte redLED = 13;

// Time periods of blinks in milliseconds (1000 to a second).
const unsigned long greenLEDinterval = 500;
const unsigned long redLEDinterval = 1000;

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

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

void toggleGreenLED ()
  {
   if (digitalRead (greenLED) == LOW)
      digitalWrite (greenLED, HIGH);
   else
      digitalWrite (greenLED, LOW);

  // remember when we toggled it
  greenLEDtimer = millis (); 
  }  // end of toggleGreenLED

void toggleRedLED ()
  {
   if (digitalRead (redLED) == LOW)
      digitalWrite (redLED, HIGH);
   else
      digitalWrite (redLED, LOW);

  // remember when we toggled it
  redLEDtimer = millis (); 
  }  // end of toggleRedLED

void loop ()
  {

  // Handling the blink of one LED.
  if ( (millis () - greenLEDtimer) >= greenLEDinterval)
     toggleGreenLED ();

  // The other LED is controlled the same way. Repeat for more LEDs
  if ( (millis () - redLEDtimer) >= redLEDinterval)
    toggleRedLED ();

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

}  // end of loop



--Gin319

PGT


Code: [Select]

void setup{
i=0;
s=0;
r=0;}

void loop {
if ( i % 5 == 0 )
   {  s=1-s;
      if (s<0){digitalwrite (relight,HIGH); } else {digitalwrite (redlight,LOW)};   // define redlight pin in setup
                   }
if ( i % 100 == 0 )
{  r=1-r;
    if (r<0){digitalwrite (greenlight,HIGH); } else {digitalwrite (greenlight,LOW)};   // define greenlight pin in setup
                  }
//delay below
//..
}


for sure this programs runs to fast to see redlight blink you add delay or use higer numeber after the %    .. i % 5000


just another way of doing it, based on modulo calculation




Arrch


Using this code that I got from your link, can you please give me an idea on how to place it in this code?
Quote


BIG Clue here:
Code: [Select]

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


PaulS

Quote
Now let's say that I wanted to take temperature readings and then control a servo motor independently.

What does this mean. You have one computer and two jobs. How can you expect to do them independently? Doing one right after the other (read the temps; diddle with the servo; read the temps; diddle with the servo) makes sense. Doing the two tasks independently requires two Arduinos. Help me understand what independently means to you.

GoForSmoke

Maybe thermometer and servo are the independent parts?

Gin, loop() is your friend. Every time through can be 100 microseconds or less later, if your code doesn't hang things up. Inside loop() you can have a block of code that watches the sensor and the next block of code runs the servo. Each runs then loop() starts again and loop() is perpetually 'now'... but only if your code doesn't block.
I find it harder to express logic in English than in Code.
Sometimes an example says more than many times as many words.

Go Up