Robię alarm laserowy dla kotów - gdy ten sterczy pod drzwiami to włącza się dzwonek
Układa składa się z Arduino, lasera diodowego 5mW, fotorezystora, diody i buzzera:
znalazłem taki program:
int sensorPin=A0;
int sensorValue=0;
int piezoPin=9;
void setup()
{
pinMode(sensorPin,INPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(piezoPin,OUTPUT);
digitalWrite(7,HIGH);
digitalWrite(6,LOW);
}
void loop()
{
sensorValue=analogRead(sensorPin);
if(sensorValue<=1000)
{
digitalWrite(piezoPin,HIGH);
{tone(9,3047,400); noTone(8); }
digitalWrite(7,HIGH);
}
else
{
digitalWrite(piezoPin,LOW); digitalWrite(7,LOW);
}
sensorValue=1000;
}
Jednak nie zawsze to działa jak należy, ponieważ kotek czasami na moment przetnie wiązkę i koniec - buzzer juz nie piszczy, a kot czeka. Chciałbym zeby buzzer piszczał póki nie wcisnę przycisku monostabilnego.
Starałem się to jakoś zmodfikować, ale program zacina się przy wartości odczytywanej przez fotorezystor = 600.
Moja przeróbka na przycisk wyłączający buzzer i diode:
int sensorPin1=A0;
int reset=1;
int sensorValue1=0;
int piezoPin=9;
void setup()
{
pinMode(sensorPin1,INPUT);
pinMode(7,OUTPUT);
pinMode(piezoPin,OUTPUT);
pinMode(reset,INPUT);
digitalWrite(7,HIGH);
}
void loop()
{
int ALARM;
int ALARMOFF;
int button=digitalRead(reset);
sensorValue1=analogRead(sensorPin1);
Serial.println(analogRead(sensorPin1)) ;
if(button==HIGH) {Serial.print("przycisk**********"); }
if((sensorValue1<=600)) {
digitalWrite(piezoPin,HIGH);
ALARM:
tone(9,50,400);
noTone(8);
digitalWrite(7,HIGH);
if (button == LOW) { goto ALARM; }
if (button == HIGH) { goto ALARMOFF; }
}
ALARMOFF:
if ((sensorValue1>600)) {
digitalWrite(piezoPin,LOW);
digitalWrite(7,LOW); }
sensorValue1=1000;
}
Czy mógłby proszę ktoś mi pomóc z tym programem?
Układa składa się z Arduino, lasera diodowego 5mW, fotorezystora, diody i buzzera:
znalazłem taki program:
int sensorPin=A0;
int sensorValue=0;
int piezoPin=9;
void setup()
{
pinMode(sensorPin,INPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(piezoPin,OUTPUT);
digitalWrite(7,HIGH);
digitalWrite(6,LOW);
}
void loop()
{
sensorValue=analogRead(sensorPin);
if(sensorValue<=1000)
{
digitalWrite(piezoPin,HIGH);
{tone(9,3047,400); noTone(8); }
digitalWrite(7,HIGH);
}
else
{
digitalWrite(piezoPin,LOW); digitalWrite(7,LOW);
}
sensorValue=1000;
}
Jednak nie zawsze to działa jak należy, ponieważ kotek czasami na moment przetnie wiązkę i koniec - buzzer juz nie piszczy, a kot czeka. Chciałbym zeby buzzer piszczał póki nie wcisnę przycisku monostabilnego.
Starałem się to jakoś zmodfikować, ale program zacina się przy wartości odczytywanej przez fotorezystor = 600.
Moja przeróbka na przycisk wyłączający buzzer i diode:
int sensorPin1=A0;
int reset=1;
int sensorValue1=0;
int piezoPin=9;
void setup()
{
pinMode(sensorPin1,INPUT);
pinMode(7,OUTPUT);
pinMode(piezoPin,OUTPUT);
pinMode(reset,INPUT);
digitalWrite(7,HIGH);
}
void loop()
{
int ALARM;
int ALARMOFF;
int button=digitalRead(reset);
sensorValue1=analogRead(sensorPin1);
Serial.println(analogRead(sensorPin1)) ;
if(button==HIGH) {Serial.print("przycisk**********"); }
if((sensorValue1<=600)) {
digitalWrite(piezoPin,HIGH);
ALARM:
tone(9,50,400);
noTone(8);
digitalWrite(7,HIGH);
if (button == LOW) { goto ALARM; }
if (button == HIGH) { goto ALARMOFF; }
}
ALARMOFF:
if ((sensorValue1>600)) {
digitalWrite(piezoPin,LOW);
digitalWrite(7,LOW); }
sensorValue1=1000;
}
Czy mógłby proszę ktoś mi pomóc z tym programem?