Sound generator

Hi All, I am new to Arduino and having a little bit of trouble getting started with a program. Essentially I am trying to write a program whereby on a switch input (1 for example) it plays a tone on a digital output (8 for example) and on a different switch input (2 for example) it plays a different tone but uses the same speaker output being (digital 8 ). The application for this program is a door bell and siren which will be wired into a factory PA system to warn the workers when someone walks through the roller door. I am using an Arduino Uno board.

I have been able to upload a tone to the board so that on start up and reboot it plays it but i am struggling to cue the sound by a switch input if that makes any sense.

Any help would be greatly appreciated, Lachie

Post the code you have tried.

And look at the Button example that comes with the IDE. Instead of turning on an LED, you can play a tone.

Thank you for your help!
The code below is what is currently uploaded on the board. Where “door” is a photo electric sensor over a door way and “evac” is a push button to activate the second tone. Haven’t wrote the tone for evac yet.


#include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_D3, NOTE_D5,NOTE_D6, };
int door = 1;
int evac = 2;

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  10,4,10,4,10,4,10,4 };

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    // stop the tone playing:

void loop()  {if (door = HIGH);// no need to repeat the melody.

Moderator edit: There are really good reasons for using tags

void loop()  {if (door = HIGH);// no need to repeat the melody.


door is assigned a value of 1. door will ALWAYS be 1, unless you mistakenly overwrite it. To prevent this, door should be const, so it can not be overwritten.

The if statement assigns a value to door (which it should not be able to do), then uses the result of that assignment as the condition. Since the assignment always succeeds, the if statement will always be true.

You need to make door const, you need to use == in the if test, you need to loose the ; on the end, AND you need to compare the value read from the door pin to HIGH, NOT the value of the door pin.