I have a program that is reading the state of a REED switch.
On my Feather M0 it worked flawlessly. Now on ATmega328 (Arduino) its doing the opposite.
It is running the program non stop UNTIL the REED switch gets activated then it stops the program.
It should start running when the reed switch gets activated.
Hopefully that makes sense?
So i must need to flop some programming or change my setup in some way?
Any help is greatly appreciated!!
Code: Select all
//set correct pin numbers as required
#define reedswitch 11
#define vibeMotor 5
#define piezo 9
#define LED 13
long Start = 0;
// this section is Piezo Pitch
#define tonec 3800
#define toned 3900
#define tonee 3950
#define tonep 0
void setup() {
// put your setup code here, to run once:
pinMode(reedswitch, INPUT_PULLUP);
pinMode(vibeMotor, OUTPUT);
pinMode(piezo, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(piezo, LOW);
digitalWrite(vibeMotor, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
begin_:
if(digitalRead(reedswitch)){//If reed switch active
Start = millis();
while((millis()-Start)<6000){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
digitalWrite(vibeMotor, HIGH);
Start = millis();
while((millis()-Start)<50){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
digitalWrite(LED, HIGH);
tone(piezo,toned,500);
Start = millis();
while((millis()-Start)<2000){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
beep(piezo,tonec,500);
Start = millis();
while((millis()-Start)<1000){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
beep(piezo,tonee,500);
Start = millis();
while((millis()-Start)<1000){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
beep(piezo,tonee,3000);
Start = millis();
while((millis()-Start)<1000){
if(!digitalRead(reedswitch)){
goto begin_;
break;
}
}
//digitalWrite(vibeMotor, LOW);//turn off ibe motor, if you don't need this just comment out
}
digitalWrite(vibeMotor, LOW);
digitalWrite(piezo, LOW);
digitalWrite(LED, LOW);
}
void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{
int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
for (x=0;x<loopTime;x++)
{
digitalWrite(speakerPin,HIGH);
delayMicroseconds(delayAmount);
digitalWrite(speakerPin,LOW);
delayMicroseconds(delayAmount);
}
}