Hello everyone
Im trying to get make a PIEZO to beep quickly twice using the Blink without delay example however, at the end of two blinks I want the PIEZO to not beep for a period of time that is separate to the one used for the blink. It works fine using the method below but I can't help to think that it could be done it a much simpler way. Any suggestions would be great!
/* Blink without Delay
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 from pin 13 to ground.
Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.
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 = 13; // the number of the LED pin
const int PIEZO = 5;
// Variables will change :
int ledState = LOW; // ledState used to set the LED
int PIEZOstate = LOW; // PIEZOstate used to set the LED
int blinkcount = 0;
// 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 = 100; // interval at which to blink (milliseconds)
// 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 previousMillis2 = 0; // will store last time LED was updated
// constants won't change :
const long interval2 = 10000; // interval at which to blink (milliseconds)
void setup() {
Serial.begin(9600); // open the serial port at 9600 bps:
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
Serial.print(blinkcount);
// 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)
if (blinkcount <= 3) {
// 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;
PIEZOstate = 20;
blinkcount = blinkcount + 1;
} else {
ledState = LOW;
PIEZOstate = LOW;
blinkcount = blinkcount + 1;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
analogWrite(PIEZO, PIEZOstate);
}
if (blinkcount == 4)
{
unsigned long currentMillis2 = millis();
ledState = LOW;
PIEZOstate = LOW;
if (currentMillis2 - previousMillis2 >= interval2) {
// save the last time you blinked the LED
previousMillis2 = currentMillis2;
// set the LED with the ledState of the variable:
blinkcount = 0;
}
}
}