Étape 2: Le Code
* //////////////////////////////////////////////////
* sortie de //making sens du capteur PIR de parallaxe
* //////////////////////////////////////////////////
*
* Broche de sortie commutateurs une LED selon l’état des capteurs.
* Détermine le début et la fin des séquences de mouvement continu.
*
* Kristian Gohlke / web.de krigo (_) / http://filformat.net
* 3. Septembre 2006
*
* kr1 (fente) 2006
* publié sous une licence creative commons "Attribution-NonCommercial-ShareAlike 2.0" licence
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* Le capteur PIR de parallaxe est un module de détecteur de mouvement infrarouge numérique facile à utiliser.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* La broche de sortie de sensor´s va à haute si le mouvement est présent.
* Toutefois, même si le mouvement est présent il va à bas la de temps en temps,
* qui ne pourrait donner l’impression, aucun mouvement n’est présent.
* Ce programme aborde cette question en ignorant les phases de faible inférieurs à un moment donné,
* en supposant que mouvement continu est présent au cours de ces phases.
*
*/
/////////////////////////////
VARS
#include
#include
#include « util.h »
#include « wave.h »
Carte de AF_Wave ;
Fichier f ;
Wavefile vague ;
int calibrationTime = 30 ; le temps de nous donner la sonde pour calibrer lui-même (10 à 60 secondes selon la fiche technique)
unsigned long int lowIn ; le temps quand le capteur génère une impulsion faible
unsigned long int pause = 5000 ; la durée en millisecondes, que le capteur doit être faible avant que nous assumons tous les mouvement a cessé
Boolean lockLow = true ;
Boolean takeLowTime ;
int pirPin = 6 ; la broche numérique connectée à la sortie du capteur PIR
int ledPin = 13 ;
/////////////////////////////
PROGRAMME D’INSTALLATION
void setup() {}
Serial.Begin(9600) ;
pinMode (pirPin, entrée) ;
pinMode (ledPin, sortie) ;
pinMode (sortie 2) ;
pinMode (3, sortie) ;
pinMode (sortie 4) ;
pinMode (5, sortie) ;
digitalWrite (pirPin, basse) ;
donner le capteur quelque temps à étalonner
Serial.Print ("calibrage capteur") ;
pour (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(".") ;
Delay(1000) ;
}
Serial.println ("terminé") ;
Serial.println ("capteur actif") ;
Delay(50) ;
Si (! card.init_card()) {}
retour ;
}
Si (! card.open_partition()) {}
retour ;
}
Si (! card.open_filesys()) {}
retour ;
}
Si (! card.open_rootdir()) {}
retour ;
}
}
////////////////////////////
BOUCLE
void loop() {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, HIGH) ; le voyant lumineux visualise l’état de broche de sortie de capteurs
{if(lockLow)}
lockLow = false ; Veillez à ce que nous attendons d’une transition vers le bas avant que n’importe quelle autre sortie faite
Serial.println("---") ;
Serial.Print ("mouvement détecté à") ;
Serial.Print(Millis()/1000) ;
Serial.println (« sec ») ;
Delay(50) ;
}
takeLowTime = true ;
}
if(digitalRead(pirPin) == faible) {}
digitalWrite (ledPin, basse) ; le voyant lumineux visualise l’état de broche de sortie de capteurs
{if(takeLowTime)}
lowIn = millis() ; économiser le temps de la transition entre la haute et basse
takeLowTime = false ; Veillez à ce que cela se fait uniquement au début d’une phase de faible
}
Si (! lockLow & & millis() - lowIn > pause) {//if le capteur est faible pour plus de la pause donnée, nous partons du principe qu’aucun mouvement plus ne va se passer
lockLow = true ; s’assure que ce bloc de code est exécuté uniquement à nouveau après qu’une nouvelle séquence de mouvement a été détectée
Serial.Print ("requête s’est terminée à ») ; sortie
Serial.Print((Millis() - pause) / 1000) ;
Serial.println (« sec ») ;
Delay(50) ;
}
Switch(digitalRead(pirPin) == HIGH) {}
cas 1 :
playcomplete("03SURF~1.wav") ;
}
}}
void playcomplete(char *name) {}
playfile(Name) ;
tandis que (wave.isplaying) ;
Card.close_file(f) ;
}
void playfile(char *name) {}
arrêter n’importe quel fichier déjà jouer
Si {(wave.isplaying)
Wave.Stop() ;
Card.close_file(f) ;
}
f = card.open_file(name) ;
Si (f & & wave.create(f)) {}
Wave.Play() ;
}
}