Circuito montado e funcionando
código fonte:
#include <EEPROM.h> //inicio da Classe Lampada class Lampada { private: //atributos int _pin_rele; int _pin_sensor_tensao; int _pin_sensor_corrente; int _address_eeprom; String _descricao; //metodos privados int _le_eeprom(); void _grava_eeprom(); int _tem_tensao(); int _tem_corrente(); public: Lampada(int pin_rele, int pin_sensor_tensao, int pin_sensor_corrente, int address_eeprom); void ligar(); void desligar(); void inverter(); int esta_ligada(); int esta_danificada(); void set_descricao(String descricao); String get_descricao(); String to_string(); }; Lampada::Lampada(int pin_rele, int pin_sensor_tensao, int pin_sensor_corrente, int address_eeprom) { _pin_rele = pin_rele; _pin_sensor_tensao = pin_sensor_tensao; _pin_sensor_corrente = pin_sensor_corrente; _address_eeprom = address_eeprom; pinMode(_pin_rele, OUTPUT); //quando o pino for menor ou igual a zero, significa que não será usado sensor de tensão if (_pin_sensor_tensao > 0) { pinMode(_pin_sensor_tensao, INPUT); } //quando o pino for menor ou igual a zero, significa que não há sensor de corrente if (_pin_sensor_corrente > 0) { pinMode(_pin_sensor_corrente, INPUT); } digitalWrite(_pin_rele, _le_eeprom() ); } int Lampada::_le_eeprom() { return EEPROM.read(_address_eeprom); } void Lampada::_grava_eeprom() { EEPROM.write(_address_eeprom, digitalRead(_pin_rele)); } void Lampada::inverter() { digitalWrite(_pin_rele, !digitalRead(_pin_rele)); _grava_eeprom(); } int Lampada::_tem_corrente() { if ( _pin_sensor_corrente <= 0 ) { return HIGH; } //caso não tenha sensor de corrente return digitalRead(_pin_sensor_corrente); } int Lampada::_tem_tensao() { //caso não tenha sensor de tensão if ( _pin_sensor_tensao <= 0 ) { return HIGH; } for (int i=0;i<4;i++) { if (!digitalRead(_pin_sensor_tensao)) { return HIGH; } delay(1); } return LOW; } void Lampada::ligar() { if (!esta_ligada()) { inverter(); } } void Lampada::desligar() { if (esta_ligada()) { inverter(); } } int Lampada::esta_ligada() { return ( _tem_tensao() && _tem_corrente() ); } int Lampada::esta_danificada() { return ( _tem_tensao() && !_tem_corrente() ); } String Lampada::get_descricao() { return _descricao; } void Lampada::set_descricao(String descricao) { _descricao = descricao; } String Lampada::to_string(){ String str = _descricao; if (esta_danificada()) {str += " - danificada."; return str;} str += esta_ligada() ? " - ligada." : " - desligada."; return str; } //fim da classe Lampada const int PINO_RELE = 8; const int PINO_SENSOR_TENSAO = 7; const int PINO_SENSOR_CORRENTE = 6; const int ADDRESS_EEPROM = 0; Lampada *lampada_01; void setup() { Serial.begin(9600); lampada_01 = new Lampada(PINO_RELE, PINO_SENSOR_TENSAO, PINO_SENSOR_CORRENTE, ADDRESS_EEPROM); lampada_01->set_descricao("lampada 01"); } void loop() { char tecla = Serial.read(); if (tecla == '1') { lampada_01->ligar(); } else if (tecla == '2') { lampada_01->desligar(); } else if (tecla == '3') { lampada_01->inverter(); } Serial.println(lampada_01->to_string()); }
Este comentário foi removido por um administrador do blog.
ResponderExcluir