Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // основной микроконтроллер моей деревни =)
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <DS1302.h>
- LiquidCrystal_I2C lcd(0x3F,20,4);
- DS1302 rtc(10, 9, 8);
- int relay_1 = 2;
- int relay_2 = 3;
- int relay_3 = 4;
- int btn_pin = A1;
- int btn_accuracy = 3; // значение кнопки бывает +-1 . 3 с запасом
- int relays_pins[3] = {2,3,4}; // пины реле
- bool relays_state[3] = {false,false,false}; // состояния реле
- int waiters[4] = {0,10,0,60}; // counter,max,counter,max..
- bool inmenu = false;
- bool antikrot = false; // включен ли анти крот
- void setup() {
- Serial.begin(9600);
- lcd.init(); // Инициализация дисплея
- lcd.backlight(); // Подключение подсветки
- //lcd.setCursor(0,0); // Установка курсора в начало первой строки
- //lcd.print("Hello"); // Набор текста на первой строке
- //lcd.setCursor(0,1); // Установка курсора в начало второй строки
- //lcd.print("Toha."); // Набор текста на второй строке
- printline("hello",0);
- printline(" toha.",1);
- for (int i=0; i<=sizeof(relays_pins)-1; i++){ //выключаем все реле
- digitalWrite(relays_pins[i], HIGH);
- pinMode(relays_pins[i], OUTPUT); }
- /*rtc.writeProtect(false); // init time
- rtc.halt(false);
- // Make a new time object to set the date and time.
- // Sunday, September 22, 2013 at 01:38:50.
- Time t(2020, 3, 4, 22, 50, 50, Time::kSunday);
- // Set the time and date on the chip.
- rtc.time(t);*/
- //EEPROM.write(0, 30); // set temperature_tostart
- //EEPROM.write(3, 5); // set hysteresis
- }
- void loop() {
- //checktime();
- checkbuttons();
- checkradio();
- if (!inmenu)
- updatewaiters();
- delay(1000);
- }
- void updatewaiters(){
- for (int i=0; i<=(sizeof(waiters)/2)-1; i=i+2){
- waiters[i] = waiters[i] + 1;
- if (waiters[i] > waiters[i+1]){
- waiters[i] = 0;
- managewaiters(i);
- }
- }
- }
- void managewaiters(int id){
- switch (id)
- {
- case 0: // led monitor
- lcd.noBacklight();
- break;
- case 2:
- anti_krot();
- break;
- default:
- break;
- }
- }
- void checkradio(){
- if (digitalRead(11) == HIGH) // B
- relaymanager(1);
- if (digitalRead(12) == HIGH) // D unused
- Serial.println("RADIO");
- if (digitalRead(7) == HIGH) // C unused
- Serial.println("RADIO");
- if (digitalRead(6) == HIGH) // A
- relaymanager(0);
- }
- void checkbuttons(){
- int btn_val = analogRead(btn_pin) - 15; // для истории. при подключении радиомодуля, значения кнопок увеличились. хз.
- //msg(btn_val);
- if (btn_val > 400-btn_accuracy && btn_val < 400+btn_accuracy)
- relaymanager(0);
- if (btn_val > 200-btn_accuracy && btn_val < 200+btn_accuracy)
- relaymanager(1);
- //if (btn_val > 30-btn_accuracy && btn_val < 30+btn_accuracy)
- //if (btn_val > 85-btn_accuracy && btn_val < 85+btn_accuracy)
- if (btn_val > 0-btn_accuracy && btn_val < 0+btn_accuracy){
- if (!antikrot){
- antikrot = true;
- printline("anti_krot", 0);
- printline("turned on", 1);
- }
- else{
- antikrot = false;
- printline("anti_krot", 0);
- printline("turned off", 1);
- }
- }
- }
- void checktime(){
- Time t = rtc.time();
- //Serial.println(t.hr);
- //Serial.println(t.min);
- Serial.println(t.sec);
- }
- void radio(){
- if (digitalRead(5) == HIGH){ // тупо читать пины
- }
- }
- void relaymanager(int id){
- if (relays_state[id]){
- digitalWrite(relays_pins[id], HIGH);
- relays_state[id] = false;
- printline("relay id:"+String(id), 0);
- printline("turned off", 1);
- }
- else{
- digitalWrite(relays_pins[id], LOW);
- relays_state[id] = true;
- printline("relay id:"+String(id), 0);
- printline("turned on", 1);
- }
- }
- void printline(String str, int line) {
- waiters[0] = 1;
- lcd.backlight();
- lcd.setCursor(0, line);
- lcd.print(" "); // clear line
- lcd.setCursor(0, line);
- lcd.print(str);
- }
- void anti_krot(){
- if (!antikrot)
- return;
- for (int i=1; i<=5; i++){
- digitalWrite(relays_pins[2], LOW);
- delay(200);
- digitalWrite(relays_pins[2], HIGH);
- delay(200);
- }
- digitalWrite(relays_pins[2], LOW);
- delay(5000);
- digitalWrite(relays_pins[2], HIGH);
- }
- void menu(){ // хз надо ли это меню
- inmenu = true;
- }
- void msg(int str){
- //String m = " "+str;
- Serial.println(str);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement