Arduinoprogram för stigande resp. fallande flank
Postat: 29 november 2014, 12:41:48
Jag håller på med att sätta in lite elektronik på min modelljärnväg. Jag vill styra bommar så att dem går ner när loket passerar första givaren innan bomanläggningen och att bommarna går upp igen när sista vagnen har passerat givaren på andra sidan bomanläggningen. Jag använder IR-moduler (IS471FE) för att detektera och vill använda Arduino NANO V3 för att styra detta plus lite annat som påverkas i samma område. Hur IR-mottagaren sitter monterad framgår av bifogad bild. Bommarna styrs via relä.
Det lär finnas två interruptingångar på en Arduino NANO så det är dem jag vill använda. Två ingångar och två utgångar i inledningsskedet.
Jag behöver alltså en programsnutt som läser givaren på stigande flank i första fallet och på fallande flank i andra fallet.
Hur skriver jag programmet? Jag har inte gjort så mycket programmering ännu men kan det mest grundläggande.
Såhär ser koden ut för tillfället...
void setup()
{
volatile int falling = HIGH;
volatile int rising = HIGH;
int count = 0;
pinMode(2, INPUT); //S3
pinMode(3, INPUT); //S4
pinMode(4, OUTPUT); //R1
attachInterrupt();
}
void loop()
{
if (digitalRead(2) == HIGH, RISING) //S3Givaren vid utfarten från Stationen blir påverkad av Loket/Vagnen/Rälsbussen, vilken som nu går först i tåget//
digitalWrite(4, HIGH); //Relä R1 drar och sätter igång bomfällning//
if (digitalRead(3) == HIGH, FALLING) //S4 fallande flank när sista vagnen lämnar givaren.
digitalWrite(4, LOW); //Reläet R1 faller och bommarna går upp//
}
Det lär finnas två interruptingångar på en Arduino NANO så det är dem jag vill använda. Två ingångar och två utgångar i inledningsskedet.
Jag behöver alltså en programsnutt som läser givaren på stigande flank i första fallet och på fallande flank i andra fallet.
Hur skriver jag programmet? Jag har inte gjort så mycket programmering ännu men kan det mest grundläggande.
Såhär ser koden ut för tillfället...
void setup()
{
volatile int falling = HIGH;
volatile int rising = HIGH;
int count = 0;
pinMode(2, INPUT); //S3
pinMode(3, INPUT); //S4
pinMode(4, OUTPUT); //R1
attachInterrupt();
}
void loop()
{
if (digitalRead(2) == HIGH, RISING) //S3Givaren vid utfarten från Stationen blir påverkad av Loket/Vagnen/Rälsbussen, vilken som nu går först i tåget//
digitalWrite(4, HIGH); //Relä R1 drar och sätter igång bomfällning//
if (digitalRead(3) == HIGH, FALLING) //S4 fallande flank när sista vagnen lämnar givaren.
digitalWrite(4, LOW); //Reläet R1 faller och bommarna går upp//
}