ATtiny Run w/o Delay Two Functions from void Loop()

Hello Arduino Proramming forum,

Working to call two different functions from void loop() that use blink without delay.

So I copied a sketch that uses blink without delay in void loop().
It works well. Code and schematic attached.

Then the function which blinks w/o delay was made into two functions, runLED3()
and runLED4() and the two functions were called from void loop().
Code and schematic attached.

But the error Compilation error: 'runLED4' was not declared in this scope persists.

It is realized that runLED4 is not declared in the scope of void loop() but
runLED4 is declare as a function.

Can a function not be called from void loop() or am I missing something?

Thanks.

Allen Pitts

****** run from void loop)************

/* Blink without Delay

from
https://gist.github.com/kubilisr/eaf9d488e258a2175313fb38f6f80aa2


 Turns on and off a light emitting diode (LED) connected to a digital
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.

 The circuit:
 * LED attached to 220 ohm resistor attached to pin 4 of the ATtiny85

 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 modified 11 Nov 2013
 by Scott Fitzgerald


 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */

// constants won't change. Used here to set a pin number :
const int ledPin =  4;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

***** end of run from void loop)************

****** call functions run from void loop)************

/* Blink without Delay
based on Blink_wo_Delay_Attiny85_240327.ino

*/

// constants won't change. Used here to set a pin number :
const int ledPin3 =  3;      // the number of the LED pin
const int ledPin4 =  4;      // the number of the LED pin

// Variables will change :
int ledState3 = LOW; 
int ledState4 = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis3 = 0;
unsigned long previousMillis4 = 0;        // will store last time LED was updated

// constants won't change :
const long interval3 = 1000;
const long interval4 = 500;            // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
}

void loop() {
  runLED3();
  runLED4();
}

void runLED3(){
  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis3 = millis();

  if (currentMillis3 - previousMillis3 >= interval3) {
    // save the last time you blinked the LED
    previousMillis3 = currentMillis3;

    // if the LED is off turn it on and vice-versa:
    if (ledState3 == LOW) {
      ledState3 = HIGH;
    } else {
      ledState3 = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin3, ledState3);

  }

void runLED4(){
  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis4 = millis();

  if (currentMillis4 - previousMillis3 >= interval3) {
    // save the last time you blinked the LED
    previousMillis4 = currentMillis3;

    // if the LED is off turn it on and vice-versa:
    if (ledState4 == LOW) {
      ledState4 = HIGH;
    } else {
      ledState4 = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin4, ledState4);

  }



****** call functions run from void loop)************

Looks like both functions are missing one last closing brace.

If you use the IDE Autoformat tool, errors like this can be easier to see.

HTH

a7

Where does the runLED3() function end

A habit you might like to consider is to make one global variable

unsigned long currentMillis;

and set it at the top of the loop() function

void loop() {
  currentMillis = millis();

and use that everywhere instead of new variables taking their value from another call to millis().

I've always found currenMillis to be pretentious and annoying, I've gone with now since forever.

unsigned long now;

void loop() {
  now = millis();

My sketches usually have one call to millis() and between zero and two calls to delay(), almost certainly all done with delay by the time I'm out of setup().

a7

@AllenPitts

Your other topic on the same subject deleted.

Please do not duplicate your questions as doing so wastes the time and effort of the volunteers trying to help you as they are then answering the same thing in different places.

Please create one topic only for your question and choose the forum category carefully. If you have multiple questions about the same project then please ask your questions in the one topic as the answers to one question provide useful context for the others, and also you won’t have to keep explaining your project repeatedly.

Repeated duplicate posting could result in a temporary or permanent ban from the forum.

Could you take a few moments to Learn How To Use The Forum

It will help you get the best out of the forum in the future.

Thank you.

Please answer this question

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.