IR code wijzigt

Arduino specifieke Software
Berichten: 4
Geregistreerd: 15 Jul 2017, 09:23

IR code wijzigt

Berichtdoor jannemanneke » 15 Jul 2017, 09:36

Ik heb een schets gemaakt voor een bewegingsmelder die ik met een afstandbediening wil aan- en uitschakelen.
Ik kan hem aan en uitzetten maar zo gauw er een keer een beweging gedetecteerd is en de afstandbediening gebruikt wordt komen andere codes terug van de IR dan voorheen.
Kom er niet achter waar dat aan ligt.
Ben beginner en heb nog veel te leren maar hoop toch dat iemand me verder kan helpen. Zou fijn zijn als ik er ook uitleg bij krijg waar ik van kan leren.


// IR
#include <IRremote.h>
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN); // Geef de functie door dat pin 6 wordt gebruikt voor lezen IR-led
decode_results results;



// Motion PIR
int calibrationTime = 30; // Variabele voor calibratie PIR MOET STAAN OP 30
long unsigned int lowIn; //De tijd dat sensor een lage impuls afgeeft
long unsigned int pause = 5000; //aantal milliseconden dat sensor laag moet afgeven waarna veronderstald wordt dat er geen beweging meer plaatsvindt MOET STAAN OP 5000
boolean lockLow = true;
boolean takeLowTime;
boolean Afstandbediening = false;
int pirPin = 3; // De digitale PIN aangesloten op de output van de PIR sensor
// Afstandbediening staat standaard uit


// LED instellingen
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
#define COMMON_ANODE
void setColor(int red, int green, int blue)
{
#ifdef COMMON_ANODE // definitie van de COMMON ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}

void setup() {
// zet de IR-ontvanger aan
irrecv.enableIRIn(); // Start the receiver

// SETUP voor LED

pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);

// SETUP voor PIR
Serial.begin(9600);
pinMode(pirPin, INPUT);
digitalWrite(pirPin, LOW);

//give the sensor some time to calibrate
Serial.print("calibrating sensor ");

for (int i = 0; i < calibrationTime; i++) {
delay (500);
setColor(0, 0, 255); // blue
Serial.print(".");
delay(500);
setColor(0, 0, 0); // UIT
}
setColor(255, 255, 0); // yellow

Serial.println(" klaar");
Serial.println("SENSOR Klaar voor meting, zet afstandbediening aan");
setColor(0, 255, 0); // groen
delay(50);
}


void loop()
{
if (irrecv.decode(&results))
/* IR signaal gedetecteerd? zo ja print waarde en het bijbehorende signaal,
roep de functie op met translateIR() en daar wordt aan de hand van de switch(waarde)
en case bepaald welke knop bij die waarde hoort.*/
{
// Serial.println(irrecv.decode(&results)); //verwijder commentaar om ruwe data te zien

translateIR();
irrecv.resume(); // ontvang de nieuwe IR code
}

{

if (Afstandbediening) {
// setColor(0, 0, 255); // blue
/* if (irrecv.decode(&results))
{
translateIR();
irrecv.resume(); // ontvang de nieuwe IR code
}
*/
if (digitalRead(pirPin) == HIGH) {
setColor(255, 0, 0); // red //De LED toont de status van de Pin
if (lockLow) {
//Zorgt ervoor dat we wachten op een overgang naar LOW voordat er nog meer output wordt ingelezen
lockLow = false;
Serial.println("---");
Serial.print("Beweging gedetecteerd op ");
Serial.print(millis() / 1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if (digitalRead(pirPin) == LOW) {


if (takeLowTime) {
lowIn = millis(); //Slaat de tijd op van het moment dat pirPin op laag komt
takeLowTime = false; //Zorg ervoor dat dit pas in het begin van een LOW-fase wordt gedaan
setColor(80, 0, 80); // purple De LED wordt paars op het moment dat pirPin LOW is
}
//Als de Sensor voor een bepaalde periode LAAG is nemen we aan
//dat er geen beweging meer plaats gaat vinden
if (!lockLow && millis() - lowIn > pause) {
setColor(0, 255, 0); // green
// Zorgt ervoor dat dit blok code pas opnieuw wordt uitgevoerd
// ALS nieuwe bewegingsreeks is gedetecteerd
lockLow = true;
Serial.print("beweging beëindigd op "); //output
Serial.print((millis() - pause) / 1000);
Serial.println(" sec");
delay(500);
}
}
}
}
}




// Functie(s)
void translateIR() // actie aan de hand van de waarde van de IR-code betekent maak de functie translateIR() met void translateIR()
{

switch (results.value)

{
case 0xFFA25D:
Serial.println(" CH- ");
Afstandbediening = true;
break;

case 0xFF629D:
Serial.println(" CH ");
Afstandbediening = false;
break;

default:
Serial.println(" other button ");
}
delay(500);
}//END translateIR

Advertisement

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten