Bonjour,
Tout d'abord merci pour la mine d'information qu'on trouve sur ce forum.
Je me me permet ce message car je rencontre un problème dont je ne trouve pas la solution en faisant simplement une recherche (peut-être n'ai-je pas utilisé les bons mots clefs).
J'ai un capteur PIR branché sur un Shield Grove sur une carte Uno, la détection via ce capteur lance un décompte.
J'ai fait mon code que j'ai testé, tout fonctionne quand ma carte Uno est alimentée via USB.
Le décompte ne se lance pas quand on alimente la carte, il attend la détection puis se lance.
Par contre ce que je ne m'explique pas c'est que lorsque j'alimente ma carte via la prise jack (avec un transfo 12V 1A), le décompte se fait immédiatement comme si la détection était active. Hors je ne change rien, je change juste de mode d'alimentation... c'est un grand mystère pour moi.
Et si j'alimente la carte via le jack et que j'appuie sur le bouton reset, alors le fonctionnement est de nouveau normal.
Avez-vous une idée de ce qui peut fausser l'initialisation de la détection ?
#include <TM1637.h>
#include <EEPROM.h>
#define PIR_MOTION_SENSOR 2 // pin detection IR
int pirValue = false;
#define CLK 4 // pins pour l'affichage 4 digits
#define DIO 5
TM1637 tm1637(CLK, DIO);
unsigned long previousMillis = 0;
unsigned long previousMillisLED = 0;
const unsigned long BLINK_INTERVAL = 1000;
int score = 5000; // score de départ
int score_precedent; // score precedent
bool decompte = false;
bool fin = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(pirValue);
// on recupere le score precedent dans l'EEPROM
EEPROM.get(1, score_precedent);
pinMode(PIR_MOTION_SENSOR, INPUT); // detection IR
tm1637.init();
tm1637.set(4); // BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
}
void loop() {
// put your main code here, to run repeatedly:
// Récupére la valeur actuelle de millis()
unsigned long currentMillis = millis();
if (decompte) {
// Affichage du decompte 5000 -1 toutes les secondes
// Si BLINK_INTERVAL ou plus millisecondes se sont écoulés
if(currentMillis - previousMillis >= BLINK_INTERVAL) {
// Garde en mémoire la valeur actuelle de millis()
previousMillis = currentMillis;
// on affiche le score avant de le décrémenter
tm1637.displayNum(score);
score = score-1;
}
} else {
// affichage du score precedent
tm1637.displayNum(score_precedent);
if(currentMillis - previousMillis < BLINK_INTERVAL/2) {
tm1637.set(4); // BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
} else if (currentMillis - previousMillis <= BLINK_INTERVAL) {
tm1637.set(0); // BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
} else {
previousMillis = currentMillis;
}
pirValue = digitalRead(PIR_MOTION_SENSOR);
if (pirValue) {
decompte = true;
Serial.println("Ok");
}
}
}