Since it's blink without delay, the next loop will happen immediately. Not after the blink function is don't. So (see @jfpoilpret's comment)loopCount
will increment continuously. You don't limit loopCount to 9, so it will after a few milliseconds try to access, e.g. values[12]
which doesn't exist.
// constants won't change. Used here to set a pin number :
const int ledPin = 13; // 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
int blinkValues[] = {1000, 1000, 1000, 200, 200, 200, 1000, 1000, 100};
int loopCount = 0;
// constants won't change :
//unsigned long interval = 1000; // interval at which to blink (milliseconds)
// Number of times to blink
const long blinkMax = 10;
// Counter for number of times blinked
unsigned long blinkCount = 0;
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop()
{
blink();
}
void blink()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= blinkValues[loopCount]) {
previousMillis = currentMillis;
loopCount = (loopCount + 1) % 9;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
Also note that the blink function will toggle the led, after the interval. So you need to add intervals, for how long the led should be off between flashes. But I leave that for you to figure out.