I found the mistake, now it's really loud
Thank you so much.
I found the mistake, now it's really loud
Thank you so much.
you are absolutely right.
I changed the code as follows:
with HIGH the morse signal is played only once, therefore changed to LOW !
// Activate internal pull-up
// DigitalWrite (BUTTON_PIN, HIGH);
digitalWrite (BUTTON_PIN, LOW);
if (value == HIGH) {
dash ();
dot ();
dash ();
dot ();
delay (lPause-sPause); // Subtracts break already taken
dash ();
dash ();
dot ();
dash ();
delay (wPause-sPause); // Subtracts break already taken
attachInterrupt (digitalPinToInterrupt (BUTTON_PIN), buzzer_stop, CHANGE);
}
void buzzer_stop() {
digitalWrite(buzzPin, HIGH); // Tone OFF
return;
}
void dot(){
digitalWrite(buzzPin, LOW); // Tone ON
delay(dotL); // Tone length
digitalWrite(buzzPin, HIGH); // Tone OFF
delay(sPause); // Symbol pause
return;
}
void dash(){
digitalWrite(buzzPin, LOW); // Tone ON
delay(dashL); // Tone length
digitalWrite(buzzPin, HIGH); // Tone OFF
delay(sPause); // Symbol pause
return;
}
But now works with a small error :
the buzzer makes mose signal in an endless loop, however it is very quiet even though it actually is very noisy ?!
I have tried to solve this with INTERRUPT.
But that does not work !
#define INTERRUPT BUTTON_PIN-3
and
if (value==HIGH) {
dash();
dot();
dash();
dot();
delay(lPause-sPause); // Subtracts pause already taken
dash();
dash();
dot();
dash();
delay(wPause-sPause); // Subtracts pause already taken
gw.sleep(INTERRUPT,BUTTON_PIN-3, CHANGE);
}
Many thanks for your response !
It works.
But how can I change the code so that the morse code is played until the switch is closed again, because at the moment the morse code is played only once, when the switch is opened.
Hello everybody,
I hope someone can help me.
I have connected a magnetic door switch sensor and a buzzer with Arduino.
Now I would like that when you open the door switch the buzzer starts until the door switch is closed again.
I have combined the Door/Window/Button Sketch with my buzzer-Sketch, but unfortunately starts the buzzer when the Arduino starts and when the door switch is closed again.
I want the buzzer only starts when opening the switches and so long until the switch is closed again and will stop again.
Please help me, thank you in advance
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2015 Sensnology AB
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* DESCRIPTION
*
* Simple binary switch example
* Connect button or door/window reed switch between
* digitial I/O pin 3 (BUTTON_PIN below) and GND.
* http://www.mysensors.org/build/binary
*/
#include <MySensor.h>
#include <SPI.h>
#include <Bounce2.h>
#define CHILD_ID 3
#define BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switch
int buzzPin= 2; // I/O-pin from buzzer connects here
const int wpm = 20; // Morse speed in WPM
const int dotL = 1200/wpm; // Calculated dot-length
const int dashL = 3*dotL; // Dash = 3 x dot
const int sPause = dotL; // Symbol pause = 1 dot
const int lPause = dashL; // Letter pause = 3 dots
const int wPause = 7*dotL; // Word pause = 7 dots
MySensor gw;
Bounce debouncer = Bounce();
int oldValue=-1;
// Change to V_LIGHT if you use S_LIGHT in presentation below
MyMessage msg(CHILD_ID,V_TRIPPED);
void setup()
{
gw.begin();
// Setup the button
pinMode(BUTTON_PIN,INPUT);
pinMode(buzzPin,OUTPUT); // Set buzzer-pin as output
// Activate internal pull-up
digitalWrite(BUTTON_PIN, HIGH);
// After setting up the button, setup debouncer
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);
// Register binary input sensor to gw (they will be created as child devices)
// You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
// If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
gw.present(CHILD_ID, S_DOOR);
}
// Check if digital input has changed and send in new value
void loop()
{
debouncer.update();
// Get the update value
int value = debouncer.read();
if (value != oldValue) {
// Send in the new value
gw.send(msg.set(value==HIGH ? 1 : 0));
oldValue = value;
dash();
dot();
dash();
dot();
delay(lPause-sPause); // Subtracts pause already taken
dash();
dash();
dot();
dash();
delay(wPause-sPause); // Subtracts pause already taken
}
}
void dot(){
digitalWrite(buzzPin, LOW); // Tone ON
delay(dotL); // Tone length
digitalWrite(buzzPin, HIGH); // Tone OFF
delay(sPause); // Symbol pause
return;
}
void dash(){
digitalWrite(buzzPin, LOW); // Tone ON
delay(dashL); // Tone length
digitalWrite(buzzPin, HIGH); // Tone OFF
delay(sPause); // Symbol pause
return;
}