Hey everyone,
I have been trying to get a piezo buzzer to work with an IR sensor. I have got a code that works on software such as Tinker Cad, but when I try to actaully do it with a circuit, it isn't working. I'm new to coding so can't see my mistake. If anyone can see the mistake I have made that would be a lot of help
Thanks
This is the code I have been using
// C++ code
//
int buttonState = 0;
void setup()
{
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{
// read the state of the pushbutton
buttonState = digitalRead(2);
// check if pushbutton is pressed. if it is, the
// button state is HIGH
if (buttonState == HIGH) {
tone(13, 659, 10000); // play tone 64 (E5 = 659 Hz)
} else {
noTone(13);
}
delay(10); // Delay a little bit to improve simulation performance
}
Change pin 2 to INPUT_PULLUP, wire the pin to connect to GND when the button is pressed, and test for a LOW.
Are you sure the IO pin can drive the buzzer directly?
You may need a transistor to provide enough current.
Or a resistor to limit the IO pin current and not destroy the pin.
Generally this looks OK, but maybe you could check a couple of things:
Like @CrossRoads says, check that the buzzer can be driven directly from the output pin (I think this should probably be OK, looking at it).
As a troubleshooting step, try connecting an LED (with resistor) to any output and set its pin to high at the same time as you activate the buzzer. This way you can work out if your sensor is behaving as expected (just make sure to switch it off again in the else condition).
You could also check the sensor voltage with a multimeter (against ground) when you think it should be activated and not (and check you've got the connections in the right order on the actual PIR)