Accueil divertissement Auto Power-down (contrôleur de segment de mémoire) (5 / 7 étapes)

Étape 5: Code d’Arduino

Pour les communications IR j’ai utilisé la bibliothèque IRemote pour Arduino. Pour télécharger depuis github (http://github.com/shirriff/Arduino-IRremote), cliquez sur le lien "Téléchargements" en haut à droite, cliquez sur "Télécharger zip" et obtenir un fichier zip.  Décompressez-le et renommez le répertoire shirriff-Arduino-IRremote-nnn IRremote

Pour le RTC DS1302 j’ai utilisé la bibliothèque suivante pour Arduino : https://github.com/msparks/arduino-ds1302

Pour produire le signal sonore sortie audio que j’utilise la bibliothèque SPI.h Arduino standard. Pour plus d’informations, voir http://arduino.cc/en/Reference/SPI

#include < stdio.h >
#include < string.h >
#include < DS1302.h >

#include < SPI.h >
#include < IRremote.h >

/ * Définir les connexions de broche e/s numériques appropriées pour le module RTC * /
uint8_t CE_PIN = 4 ;
uint8_t IO_PIN = 10 ;
uint8_t SCLK_PIN = 8 ;

#define RTC5vPin 5 / / cette broche servira à fournir + 5v au CCF
#define RTCgndPin 6 / / cette broche servira à fournir GND au CCF

#define PIEZO_PIN 11

/ * Créer des tampons * /
char buf [50] ;
jour de char [10] ;

IRsend irsend ;

/ * Créer un objet RTC DS1302 * /
Rtc DS1302 (CE_PIN, IO_PIN, SCLK_PIN) ;

Codes SAMSUNG TV Power on/off (changer cela pour correspondre à vos codes de télécommande)
unsigned int S_pwr[68]={ 4400,4550,500,1750,500,1750,500,1750,450,650,500,600,500,600,500,650,500,600,500,1750,450,1750,500,1750,500,600,500,600,500,650,500,600,500,600,500,650,500,1750,450,650,500,600,500,600,500,650,500,600,500,600,500,1750,500,600,500,1750,500,1750,500,1750,450,1750,500,1750,500,1750,450};

Son Surround LG (changer cela pour correspondre à vos codes de télécommande)
unsigned int LG_pwr[68]={ 4350,4550,500,600,500,600,500,1750,450,1750,500,600,500,1750,450,600,500,650,450,650,500,600,500,1750,450,1750,450,650,500,1700,500,600,500,650,450,650,450,1800,450,1750,450,1750,450,1750,500,600,500,600,500,600,500,1750,500,600,500,600,500,600,500,650,450,1750,500,1750,450,1750,450};

int calibrationTime = 30 ;         le temps de nous donner le capteur à étalonner (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 = 3000 ;   la durée en millisecondes, que le capteur doit être faible avant que nous assumons tous les mouvement a cessé
override booléen = false ;

Boolean lockLow = true ;
Boolean takeLowTime ;

int pirPin = 3 ;                   La broche numérique connectée à la sortie du capteur PIR
int ledPin = 13 ;                  LED à bord est raccordée à une LED rouge externe

int maxSecs = 300 ;                Temps Max pour aucun mouvement avant nous éteindre la TV
Le modifier selon vos propres besoins (par défaut 5 minutes)

int overrideStartHour = 19 ;       Quelle heure la fenêtre override
int overrideEndHour = 23 ;       Quelle heure pour mettre fin à la fenêtre de remplacement

int currentSecs = 0 ;              Compteur global

Tiges de vert et de YELLO LED
int greenLedPin = 12 ;
int yellowLedPin = 2 ;

int yellowState = 0 ;

void setup() {}
Serial.Begin(9600) ;

pinMode (RTC5vPin, sortie) ;      définit la goupille pour haut rendement
digitalWrite (RTC5vPin, élevé) ;   tourne broche sur 5 (v) au pouvoir RTC
pinMode (RTCgndPin, sortie) ;     Jeux de broches pour la sortie
digitalWrite (RTCgndPin, basse) ;   tourne broche sur LOW (GND) au pouvoir RTC

pinMode (sortie 11) ;            Jeux de Pin 11 pour la sortie
digitalWrite (11, faible) ;          tourner la broche 11 sur LOW (GND) au pouvoir RTC

pinMode (pirPin, entrée) ;         initialiser la goupille de détection PIR État comme entrée
pinMode (ledPin, sortie) ;        initialiser la broche LED embarquée comme entrée
digitalWrite (pirPin, basse) ;       Commencez par aucun mouvement

pinMode(greenLedPin,OUTPUT) ;
digitalWrite (greenLedPin, basse) ;

pinMode(yellowLedPin,OUTPUT) ;
digitalWrite (yellowLedPin, basse) ;
yellowState = 0 ;

/*
Initialisez une nouvelle puce en désactivant la protection contre l’écriture et la compensation des
horloge cesser le drapeau. Ces méthodes ne doivent pas toujours être appelées. Voir le DS1302
Fiche technique pour plus de détails.
ONU-commenter le code ci-dessous à mettre en place une nouvelle puce de CCF. Une fois lancé vous devez
commenter l’article du code à nouveau.
*/

RTC.write_protect(false) ;
RTC.Halt(false) ;
Temps t (2013, 7, 7, 14, 45, 0, 0) ; Créez un nouvel objet de temps pour définir la date et l’heure
RTC.Time(t) ; Définir la date et l’heure sur la puce
RTC.write_protect(true) ;


donner le capteur PIR 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) ;

réinitialiser le compteur global
currentSecs = maxSecs ;

StartupBeep() ;
}

void StartupBeep() {}
Tone(PIEZO_PIN,4978,2000) ;
Delay(100) ;
noTone(PIEZO_PIN) ;
}

////////////////////////////
BOUCLE
void loop() {}
/ * Obtenir l’heure actuelle et la date de la puce * /
Temps t = rtc.time() ;

/ * Nom du jour de la semaine * /
memset (jour, 0, sizeof(day)) ;  / * effacer tampon jour * /

/ * Format de l’heure et la date et l’insérer dans la mémoire tampon temporaire * /
snprintf (buf, sizeof(buf), "%s 04D-02d-% 02d % 02d: % 02d: % 02d",
jour,
t.YR, t.mon, t.date,
t.hr, t.min, t.sec) ;

/ * La chaîne mise en forme à la série d’impression afin que nous pouvons voir le temps * /
Serial.Print(BUF) ;
Serial.Print ("-") ;
Serial.Print ("(hr:") ;
Serial.Print(t.hr) ;
Serial.Print(")") ;
Si (t.hr > = overrideStartHour & & t.hr < = overrideEndHour) {}
Substituez = true ;
Serial.println("Disabled") ;
} else {}
Serial.println("enabled") ;
Substituez = false ;
}

Si (remplacer)
{
digitalWrite (greenLedPin, HIGH) ;
}
d’autre
{
digitalWrite (greenLedPin, basse) ;
}

Si (! substituer) {}
currentSecs = (currentSecs - 1) ;
Serial.println(currentSecs) ;


Si (currentSecs < = 30) {}
Si (yellowState == 1) {}
digitalWrite (yellowLedPin, HIGH) ;
yellowState = 0 ;
noTone(PIEZO_PIN) ;
}
d’autre
{
digitalWrite (yellowLedPin, basse) ;
yellowState = 1 ;
Si (currentSecs > = 25) {}
Serial.println("Beeping!") ;
Tone(PIEZO_PIN,4978,1000) ;
}
}
}

Si (currentSecs < = 0) {}
temps Max pour aucun mouvement atteint, éteindre le téléviseur !
Serial.println ("ainsi off TV!") ;
toggleSamsungTV() ;
}
}
detectmotion() ;

Delay(1000) ;
}

void check_time() {}
/ * Obtenir l’heure actuelle et la date de la puce * /
Temps t = rtc.time() ;

/ * Nom du jour de la semaine * /
memset (jour, 0, sizeof(day)) ;  / * effacer tampon jour * /

/ * Format de l’heure et la date et l’insérer dans la mémoire tampon temporaire * /
snprintf (buf, sizeof(buf), "%s 04D-02d-% 02d % 02d: % 02d: % 02d",
jour,
t.YR, t.mon, t.date,
t.hr, t.min, t.sec) ;

/ * La chaîne mise en forme à la série d’impression afin que nous pouvons voir le temps * /
Serial.Print(BUF) ;
Serial.Print ("-") ;
Si (t.hr > overrideStartHour & & t.hr < overrideEndHour) {}
Substituez = true ;
Serial.println("Disabled") ;
} else {}
Serial.println("enabled") ;
Substituez = false ;
}
}

void detectmotion() {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, HIGH) ;   le voyant lumineux visualise l’état de broche de sortie de capteurs
currentSecs = maxSecs ;
digitalWrite (yellowLedPin, basse) ;
yellowState = 0 ;
{if(lockLow)}
fait en sorte de que nous attendre pour une transition vers le bas avant n’importe quelle autre sortie est faite :
lockLow = false ;
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 le capteur est faible plus la pause donnée,
Nous partons du principe qu’aucun mouvement plus ne va se passer
Si (! lockLow & & millis() - lowIn > pause) {}
fait bien sûr ce bloc de code est exécuté uniquement après
une nouvelle séquence de mouvement a été détectée
lockLow = true ;
Serial.Print ("requête s’est terminée à ») ;      sortie
Serial.Print((Millis() - pause) / 1000) ;
Serial.println (« sec ») ;
Delay(50) ;
}
}
}

void toggleSamsungTV() {}
éteindre la TV avec le diffuseur infrarouge
répéter la transmission 3 fois pour être sûr !
pour (int i = 0; i < 3; i ++) {}
irsend.sendRaw(S_pwr,68,38) ;
Serial.println ("envoyé SAMSUNG POWER ON/OFF") ;
irsend.sendRaw(LG_pwr,68,38) ;
Serial.println ("envoyé LG POWER ON/OFF") ;
Delay(40) ;
}
réinitialiser le compteur global
currentSecs = maxSecs ;
}

Articles Liés

MIDI DIY base contrôleur (batterie) - TOWER OF POWER

MIDI DIY base contrôleur (batterie) - TOWER OF POWER

Voici les instructions étape par étape dans la fabrication de votre propre Tower of Power !!! La Tower of Power est un nouveau contrôleur MIDI basé dans lequel vous êtes en mesure d'effectuer vos échantillons de tambour comme le Bop It! jamais voulu
Un contrôleur d’arrosage qui peut être mis en réseau Accueil

Un contrôleur d’arrosage qui peut être mis en réseau Accueil

Quelques semaines auparavant, j'ai publié un module de contrôleur peu grand qui fourni 6 relais de pouvoir être piloté depuis un ordinateur via un réseau.  Après que j'ai publié, je suis arrivé à penser que la même conception de base, avec quelques c
Stores de fenêtre automatique contrôleur (PICAXE)

Stores de fenêtre automatique contrôleur (PICAXE)

veulent construire un motorisé stores contrôleur pour environ $15,00 ? Voici comment. J'aime avoir des plantes en pot et les regarder grandir, mais en s'assurant qu'ils obtenir assez de lumière peut être un défi. J'ai une bibliothèque en face de la f
Contrôleur DJ USB bricolage

Contrôleur DJ USB bricolage

Beaucoup de gens se lancent dans DJing ces jours-ci, que ce soit comme un moyen d'expression de soi ou un moyen de gagner de l'argent supplémentaire. J'aime DJing puisqu'il fournit une expérience plus intéressante, impliquée et interactive-écoute de
Convertir un jouet secouru un contrôleur MIDI

Convertir un jouet secouru un contrôleur MIDI

dans ce Instructable, je vous guidera dans le processus de conversion de jouet d'enfant secouru faire du bruit en un instrument de musique vraiment utile à l'aide de MIDI ! Prenez un moment pour juste coup d'oeil sur les titres des étapes de ce Instr
Connecter votre Guitar Hero ou Rock Band contrôleur à Frets on Fire

Connecter votre Guitar Hero ou Rock Band contrôleur à Frets on Fire

cela va vous apprendre comment connecter votre contrôleur de guitare usb à votre ordinateur en utilisant Xpadder pour une utilisation avec Frets on Fire.Étape 1: matériaux Pour ce projet, vous aurez besoin :-A contrôleur de guitare usb (Xplorer 360 X
Contrôleur de Time-lapse Panorama Arduino

Contrôleur de Time-lapse Panorama Arduino

Contrôleur de panorama pour caméras GoProLe contrôleur tournera votre GoPro sur un angle fixe pour une durée définie ou vous tournera GoPro pour une rotation complète pour une durée définie.Ce projet est basé sur l'original instructable par Tyler Win
Web activé étude paresseux contrôleur de feux

Web activé étude paresseux contrôleur de feux

Ce Instructable est une écriture de mon premier projet jamais d'Arduino.Comme c'est généralement le cas avec les ingénieurs de l'amateur, j'ai pensé longuement et sérieusement à venir avec un projet qui a été non seulement cool, mais a une certaine v
Contrôleur de moteur pas à pas Quad

Contrôleur de moteur pas à pas Quad

ce projet a débuté l'an dernier, il y avait un article de vulgarisation scientifique d'un professeur de collège qui a fait une « imprimante 3D ». Je me souviens avoir pensé à moi "holy crap... J'en veux un. » Bien sûr, à ce moment-là 2300 $ était bea
ESP8266 Contrôleur d’Irrigation

ESP8266 Contrôleur d’Irrigation

J'utilise actuellement un contrôleur Orbit pour contrôler mon système d'irrigation abrite trois zone. Il s'agit d'une unité de mesure qui a un système très détaillé qui inclut la planification des événements d'arrosage à un calendrier, l'heure et la
Contrôleur LED DMX-512 avec affichage LED

Contrôleur LED DMX-512 avec affichage LED

Compact, facile à assembler, contrôleur LED sorties que TTL PWM des signaux pour les LED rouges, vert et bleu. Le PWM des signaux de contrôle LED Drivers (cartes de sortie, règlement MOSFET/résistance basée ou régulateurs de courants constants), qui
Plugduino - Arduino base contrôleur de prise 120 Volt

Plugduino - Arduino base contrôleur de prise 120 Volt

Donnez votre Arduino 120 volts coup de pied au cul !L'Arduino est un outil formidable pour n'importe qui intéressé par microcontrôleur programmation d'apprentissage, mais après le clignotement des LEDs, ce qui est prévu ? Ce projet permet à votre Ard
Contrôleur émulateur ZSNES

Contrôleur émulateur ZSNES

Bonjour, ceci est mon premier publié instructable (donc pardonner une de mes erreurs de débutant...)avec cela, je vais vous montrer comment faire un contrôleur pour votre émulateur zsnes Super-NES (ou tout autre émulateur qui utilise les mêmes bouton
Chargement d’un NDA contrôleur portable!!!

Chargement d’un NDA contrôleur portable!!!

je viens de terminer mon propre téléphone portable les contrôleur NES et c'est la chose plus cool jamais!!! La seule chose qui manque est un cool charge dock, donc je l'ai pris sur mon auto pour faire un.Étape 1: pièces La base est une paix spéciale