Problem med trckknapp-detektering i arduino
Postat: 4 oktober 2017, 23:13:31
Hej!
Jag håller på med ett litet larm med en pirsensor för arduino och den fungerar bra i stort sett. Det är dock lite småproblem med knappdetektering.
Jag har programmerat den så att den larmar (d.v.s blinkar med en röd lysdiod och tjuter med en passiv pulserande summer) tills man trycker på en grön tryckknapp. När detta utförs återställs larmet men man ska bara behöva trycka en gång. Jag måste hålla in knappen för att det ska fungera i nuläget så jag sitter och funderar på vad jag eventuellt kan ha gjort fel.
Har någon nåt förslag?
Jag håller på med ett litet larm med en pirsensor för arduino och den fungerar bra i stort sett. Det är dock lite småproblem med knappdetektering.
Jag har programmerat den så att den larmar (d.v.s blinkar med en röd lysdiod och tjuter med en passiv pulserande summer) tills man trycker på en grön tryckknapp. När detta utförs återställs larmet men man ska bara behöva trycka en gång. Jag måste hålla in knappen för att det ska fungera i nuläget så jag sitter och funderar på vad jag eventuellt kan ha gjort fel.
Har någon nåt förslag?
Kod: Markera allt
/* Ett litet larm med rörelsedetektor
*/
const int ledPin = 10; //Röd larmande lysdiod på digitalport 10
const int siren = 13; //En passiv summer för Arduino på digitalport 13
const int ButtonPin = 11; //Grön tryckknapp för att återställa larm på digitalport 11
const int PirDetektor = 12; //En PirSensor för Arduino på digitalport 12
const int ledKalPin = 9; //Grön lysdiod som lyser när kalibreringen av PirDetektorn är slutförd
int lysdiodStat = LOW; // lysdiodStat used to set the LED
int alarmStat = LOW; //Bestämmer statuset på larmet
int KnappStat = LOW; //Bestämmer status på Återställningsknappen
int PirStat = LOW; //Bestämmer statis på PirSensorn
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
long interval = 140; // interval at which to blink (milliseconds)
int kalTid = 10; //Bestämmer kalibreringstid i sek för PirDetektorn
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(siren, OUTPUT);
pinMode(PirDetektor, LOW);
pinMode(ledKalPin, OUTPUT);
//Kalibrering av PirDetektorn
for (int i=0; i < kalTid; i++)
{
delay(1000);
}
digitalWrite(ledKalPin, HIGH); //Tänder den gröna lysdioden för att visa att nu är kalibreringen slutförd och PirDetektorn redo...
}
void loop()
{
PirStat = digitalRead(PirDetektor); //Läser in status från PirDetektorn
if (PirStat == HIGH)
{
alarmStat = HIGH; //Aktiverar larmet
}
if (KnappStat == HIGH)
{
alarmStat = LOW; //Återställer larmet efter detekterad knapptryckning.
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (alarmStat == HIGH)
{
if (digitalRead(ledPin) == LOW)
{
digitalWrite(ledPin, HIGH);
tone(siren, 1000);
KnappStat = digitalRead(ButtonPin);
}
else
{
digitalWrite(ledPin, LOW);
noTone(siren);
}
}
else
{
digitalWrite(ledPin, LOW); // Stänger av den larmande lysdioden
noTone(siren); //Stänger av siŕenen
//Vid återställt larm nollställs även PirDetektorns och återställningsknappens status
KnappStat = LOW;
PirStat = LOW;
}
}
}