помогите с программой
- Войдите на сайт для отправки комментариев
Ср, 29/04/2015 - 15:29
Помогите написать программу для автоматического школьного звонка. Имеется плата arduino nano и часы реального времени на ds1307. Нужно чтобы в определенное время включал реле на 2 сек.
#include <Wire.h> #include "RTClib.h" RTC_DS1307 _RTC1; // GND - земля VCC - +5B SDA - A-4 SCL- A-5 DateTime _tRTC1; bool _RTCAlO1 = 0; bool _trgrt1 = 0; bool _trgrt1I = 0; bool _tim1I = 0; bool _tim1O = 0; unsigned long _tim1P = 0UL; void setup() { Wire.begin(); _RTC1.begin(); pinMode(13, OUTPUT); } void loop() {_tRTC1 = _RTC1.now(); if (1) { _RTCAlO1 = (((_tRTC1.year()) == 2016) && ((_tRTC1.month()) == 3) && ((_tRTC1.day()) == 1) && ((_tRTC1.hour()) == 15) && ((_tRTC1.minute()) == 10) && ((_tRTC1.second()) == 20));} else {_RTCAlO1 = 0;} if (_RTCAlO1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; if(_trgrt1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 2000)) _tim1O = 0;}}} digitalWrite(13, _tim1O); } bool _isTimer(unsigned long startTime, unsigned long period ) {unsigned long currentTime;currentTime = millis(); if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));} }в 2016 году первого марта в 15 часов 10 минут 20 секунд светодиод на на 13 пине загорится на 2 секунды
как сделать чтобы светодиод загорался например в 18:50, 18:55, 19:00, 20:00 и т.д.
#include <Wire.h> #include "RTClib.h" RTC_DS1307 _RTC1; // GND - земля VCC - +5B SDA - A-4 SCL- A-5 DateTime _tRTC1; bool _RTCAlO1 = 0; bool _trgrt1 = 0; bool _trgrt1I = 0; bool _tim1I = 0; bool _tim1O = 0; unsigned long _tim1P = 0UL; void setup() { Wire.begin(); _RTC1.begin(); pinMode(13, OUTPUT); } void loop() {_tRTC1 = _RTC1.now(); if (1) { _RTCAlO1 = (((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) && ((_tRTC1.second()) == 40));} else {_RTCAlO1 = 0;} if (_RTCAlO1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; if(_trgrt1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 8000)) _tim1O = 0;}}} digitalWrite(13, _tim1O); } bool _isTimer(unsigned long startTime, unsigned long period ) {unsigned long currentTime;currentTime = millis(); if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));} }Это я понял а как сделать несколько времен когда включается светодиод
#include <Wire.h> #include "RTClib.h" RTC_DS1307 _RTC1; // GND - земля VCC - +5B SDA - A-4 SCL- A-5 DateTime _tRTC1; bool _RTCAlO1 = 0; bool _trgrt1 = 0; bool _trgrt1I = 0; bool _tim1I = 0; bool _tim1O = 0; unsigned long _tim1P = 0UL; void setup() { Wire.begin(); _RTC1.begin(); pinMode(13, OUTPUT); } void loop() {_tRTC1 = _RTC1.now(); if (1) { _RTCAlO1 = (((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) && ((_tRTC1.second()) == 40)) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50);} else {_RTCAlO1 = 0;} if (_RTCAlO1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; if(_trgrt1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 8000)) _tim1O = 0;}}} digitalWrite(13, _tim1O); } bool _isTimer(unsigned long startTime, unsigned long period ) {unsigned long currentTime;currentTime = millis(); if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));} }сделал вот так. Правильно?
#include <Wire.h> #include "RTClib.h" RTC_DS1307 _RTC1; // GND - земля VCC - +5B SDA - A-4 SCL- A-5 DateTime _tRTC1; bool _RTCAlO1 = 0; bool _trgrt1 = 0; bool _trgrt1I = 0; bool _tim1I = 0; bool _tim1O = 0; unsigned long _tim1P = 0UL; void setup() { Wire.begin(); _RTC1.begin(); pinMode(13, OUTPUT); } void loop() {_tRTC1 = _RTC1.now(); if (1) { _RTCAlO1 = (((_tRTC1.hour()) == 11) && ((_tRTC1.minute()) == 02) || ((_tRTC1.hour()) == 11) && ((_tRTC1.minute()) == 03) || ((_tRTC1.hour()) == 11) && ((_tRTC1.minute()) == 04) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50) || ((_tRTC1.hour()) == 18) && ((_tRTC1.minute()) == 50));} else {_RTCAlO1 = 0;} if (_RTCAlO1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; if(_trgrt1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 8000)) _tim1O = 0;}}} digitalWrite(13, _tim1O); } bool _isTimer(unsigned long startTime, unsigned long period ) {unsigned long currentTime;currentTime = millis(); if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));} }в 11:02 и 11:03 светодиод светился а потом нет