Resultados da busca - %E3%80%90%E2%94%83%E6%80%BB%E4%BB%A32%E2%92%8F7%E2%92%8F01705%5B%EF%BC%B1%5D%E3%80%91%E3%80%91%E6%81%92%E8%BE%BE%E5%A8%B1%E4%B9%902%E6%8F%90%E7%8E%B0%E5%A5%BD%E4%B9%85%E5%88%B0
#include <Servo.h>
//Cria objeto para controlar o servo base
Servo servo_base;
//Cria objeto para controlar o servo inclinacao
Servo servo_inclinacao;
int pino_x = A4; //Pino ligado ao X do joystick
int pino_y = A5; //Pino ligado ao Y do joystick
int val_x; //Armazena o valor do eixo X
int val_y; //Armazena o valor do eixo Y
void setup()
{
//Define a porta a ser ligada ao servo base
servo_base.attach(7);
//Define a porta a ser ligada ao servo inclinacao
servo_inclinacao.attach(8);
}
void loop()
{
//Recebe o valor do joystick, eixo X
val_x = analogRead(pino_x);
//Converte o valor lido para um valor entre 1 e 180 graus
val_x = map(val_x, 0, 1023, 1, 180);
//Move o servo base para a posicao definida pelo joystick
servo_base.write(val_x);
//Recebe o valor do joystick, eixo Y
val_y = analogRead(pino_y);
//Converte o valor lido para um valor entre 1 e 180 graus
val_y = map(val_y, 0, 1023, 1, 180);
//Move o servo inclinacao para a posicao definida pelo joystick
servo_inclinacao.write(val_y);
//Aguarda a movimentacao do servo e reinicia a leitura
delay(15);
}
tem como fazer isso que tu falou nele?…
ntrados na internet consegui bastante coisa..más vamos a duvida..tenho as seguintes situações..
Segue abaixo o que aparece nos display 16x2
Monitoramento (0,0)
00:00:00 (1,0)I
Temperatura (0,0)
28º C (1,0)
I
Acionamento (0,0)
Liga - -(ou desliga) (0,1)
Do jeito acima já funciona, más queria uma configuração diferente, igual ao esquema abaixo;
Tela - botão do lado iria para o tempo, botão do lado - temperatura - botão do lado - luninosidade
monitoramento -> Tempo 00:00:00 -> Temperatura 28ºC -> Luninosidade 600.
Agora, botão abaixo
Acionamento - Liga/Desliga
Acredito que seja isso..se aluem puder dá uma mão agradeceria.
Segue o codigo que já fiz.
#include <LiquidCrystal.h> #include <Limits.h>
const int temperatura = 0; int contador=0; const int BtAcima = 3; const int BtAbaixo = 6; const int BtDireito = 4; const int BtEsquerdo = 5; boolean troca = false ; boolean troca1 = false ; boolean troca2 = false ; boolean troca3 = false; const int sensorTemp = 0; int valorSensorTemp = 0; int menorValorTemp = INT_MAX; int seg=0,min=0,hor=0;
//inicia o display e seleciona as entradas e saidas LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() { lcd.begin(16, 2); lcd.print("ATIVANDO... "); lcd.setCursor(0, 1); lcd.print("PAINEL SOLAR"); delay(5000); lcd.setCursor(0, 1); lcd.print(" "); lcd.clear(); lcd.setCursor(0, 0); lcd.print("MONITORAMENTO."); pinMode(BtAcima, INPUT); pinMode(BtAbaixo, INPUT); pinMode(BtDireito, INPUT); pinMode(BtEsquerdo, INPUT); pinMode(A5, OUTPUT); pinMode(A4, OUTPUT); pinMode(A3, OUTPUT); pinMode(A2,OUTPUT); }
void loop() {
int estado =0; int estado2 =0; int estado3 =0; int estado4 =0; //faz a leitura do estado dos botoes estado = digitalRead(BtAcima); estado2 = digitalRead(BtAbaixo); estado3 = digitalRead(BtDireito); estado4 = digitalRead(BtEsquerdo); //controle da sequencia do menu if (estado == HIGH) { delay(250); contador=contador+1; } if (estado2 == HIGH) { delay(250); contador=contador-1; } if (contador<0){ contador=3; }
static unsigned long ult_tempo = 0; int tempo = millis(); if(tempo - ult_tempo >= 1000) { ult_tempo = tempo; seg++; } if(seg>=60) { seg = 0; min++; }
if(min>=60) { min = 0; hor++; } if(hor>=24) { hor=0; min=0; } //menu switch(contador){ case 0: if (estado3 == HIGH & troca==false ){ delay(150); troca=true; }else { delay(150); if(troca==true & estado3==HIGH){ troca=false; } }
lcd.setCursor(0, 0); lcd.print("MONITORAMENTO"); lcd.setCursor(0,1); lcd.print("TF: "); lcd.print(hor); lcd.print(":"); lcd.print(min); lcd.print(":"); lcd.print(seg); lcd.print(" "); delay(1000); break;
case 1: if (estado3 == HIGH & troca1==false ){ delay(150); troca1=true; }else{ delay(150); if(troca1==true & estado3==HIGH){ troca1=false; } } menorValorTemp = INT_MAX; //Inicializando com o maior valor int possível for (int i = 1; i <= 8; i++) { //Lendo o valor do sensor de temperatura. valorSensorTemp = analogRead(sensorTemp); //Transformando valor lido no sensor de temperatura em graus celsius aproximados. valorSensorTemp *= 0.54 ; //Mantendo sempre a menor temperatura lida if (valorSensorTemp < menorValorTemp) { menorValorTemp = valorSensorTemp; } delay(150); } lcd.clear(); //limpa o display do LCD. lcd.print("Temp: "); //imprime a string no display do LCD. lcd.print(menorValorTemp); lcd.write(B11011111); //Simbolo de graus celsius lcd.print("C"); break; case 2: if (estado3 == HIGH & troca2==false ){ delay(150); troca2=true; }else{ delay(150); if(troca2==true & estado3==HIGH){ troca2=false; } }
lcd.setCursor(0, 0); lcd.print("CONTROLE "); lcd.setCursor(0,1); if (troca2==1){ lcd.print("ATIVADO "); digitalWrite(A5,HIGH); }else{ lcd.print("DESATIVADO "); digitalWrite(A5,LOW); } break;
case 3: if (estado4 == HIGH & troca3==false ){ delay(150); troca3=true; }else{ delay(150); if(troca3==true & estado4==HIGH){ troca3=false; } }
lcd.setCursor(0, 0); lcd.print("DEMANDA "); lcd.setCursor(0,1); if (troca3==1){ lcd.print("LIGADO "); digitalWrite(A2,HIGH); } // if (troca3==1{ else{
lcd.print("DESLIGADO "); digitalWrite(A2,LOW); } break;
default: contador=0; }
}
…
ude <Keypad.h>#include <LiquidCrystal.h> const byte Coluna = 3;const byte Linha = 4; int i=0;char Teclas[Linha][Coluna] = {{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};byte Pino_linha[Linha] = {6, 12, 13, 9};byte Pino_coluna[Coluna] = {8, 7, 10}; LiquidCrystal lcd(1, 11, 5, 4, 3, 2);Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna ); #define bombaUm A5 // pino que aciona a bomba1 e a válvula1 #define botaoliga A3 // Pino para botão de Ligar o sistema #define EPO A4 // Botaão para Emergencia ESP #define botao_prgm1 A0 // Pino para botão de carga do protudo 1 #define hallsensor1 0 // The pin location of the sensor float Calc1 = 0; // Variavel para contagem de pulsos do sensor1 de fluxo
unsigned int debounceDelay = 5; // Tempo de debounce unsigned int Flagbotaoliga; // Variavel para indicar se o botão de liga foi acionado unsigned int FlagEPO; // Variavel para indicar se o botão de emergencia foi acionado
void setup(){ {
lcd.begin(16, 2); pinMode(hallsensor1, INPUT_PULLUP); // Initializes digital pin 2 as an input pinMode (bombaUm, OUTPUT); // pino que aciona a bomba1 e a válvula1 como saida pinMode (botao_prgm1, INPUT_PULLUP); // pino do botão de carga de 900ml1 como entrada e PULL_UP pinMode (botaoliga, INPUT_PULLUP); // pino do botão de liga como entrada e PULL_UP pinMode (EPO, INPUT_PULLUP); // pino do botão de Emergencia como entrada e PULL_UP Flagbotaoliga = 0; // Indicador de botaão de liga, como desligado digitalWrite (bombaUm, HIGH);
} void loop(){ char teclaPressionada = keypad.getKey(); if (teclaPressionada != NO_KEY)} { lcd.setCursor(i, 0); lcd.print(teclaPressionada); i++; }}
// ================= botaoliga deboucing ==================={ {if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado delay(debounceDelay); // delay para evitar bounce(ruído eletrico) if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado Flagbotaoliga = 1; // Indicador de botão de liga, como ligado FlagEPO = 0; // Indicativo de emergencia desligado lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha lcd.print ("Ligado "); // Informa sistema ligado lcd.setCursor(0,1); // Posiciona cursor na 10a. posição da 2a linha lcd.print (" "); // Limpa a área while(!digitalRead(botaoliga)) // Espera pela liberação do switch delayMicroseconds(1); // delay de 1u segundos } if(!digitalRead(EPO)) // Se botão de ligar está pressionado { // Faça delay(debounceDelay); // delay para evitar bounce(ruído eletrico) if(!digitalRead(EPO)) // Se botão de emergencia está pressionado { FlagEPO = 1; // Indicativo de emergencia ligado digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1 Flagbotaoliga = 0; // Indicador de botão de liga, como desligado lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha lcd.print ("Deslig. "); // Informa sistema desligado lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha lcd.print (""); // Limpa a área while(!digitalRead(EPO)) // Espera pela liberação do switch delayMicroseconds(1); // delay de 1u segundos } if (Flagbotaoliga == 1) // Se o botão de liga foi acionado { // Faça if ((Flagbotaoprgm2 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm2 ou prgm3 { // Faça if(!digitalRead(botao_prgm1)) // Se o botão de carga de 500ml1 está pressionado { if (Calc1 < 356 * teclaPressionada ) // Se a quantidade envasada for menor que 900ml { // Faça Flagbotaoprgm1 = 1; // Indicador de botão de progm1, como ligado digitalWrite (bombaUm,LOW); // Liga bomba 1 e Valvula 1 if(pulseIn(hallsensor1, LOW)) // Se pulso do sensor1 de fluxo for low Calc1++; // Incremente contador de quantidade lcd.setCursor(0,2); lcd.print(Calc1); lcd.setCursor(10,1); lcd.print(Calc1*3.0303); } else // Se a quantidade envasada for maior que 500ml { // Faça Flagbotaoliga = 0; // Indicador de botão de liga, como desligado digitalWrite (bombaUm,HIGH); lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha lcd.print (Calc1*3.0303); // Mostra contador lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha lcd.print ("Deslig."); // Informa sistema desligado Calc1 = 0; // Zera variavel contadora Flagbotaoprgm1 = 0; // Indicador de botão de progm1, como desligado } } else // Se o botão de carga de 500ml1 não está pressionado { if (Flagbotaoprgm1 == 1) // Se indicador de botão de progm1 estiver ligado { // Faça digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1 lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha lcd.print (Calc1*3.0303); // Mostra contador } } } } }
…
Adicionado por Lucas Feil ao 21:42 em 22 março 2016
ea industrial que não foi muito longe pois existe muitos obstáculos para a rede mas também fiz e em uma area residencial consegui da a volta no meu quarteirão tranquilo sem perda de dados o ponto mais longe foi de 200 metros de um Esp32LoRa da Heltec do outro
Mas isto eu fiz configurando um como Receptor e outro como Transmissor, mas eu queria utiliza-los como os 2 sendo Receptor e Transmissor para fazer uma comunicação de mão dupla os 2 mandam informações e os 2 recebe informações
Tentei simplesmente misturar os 2 programas o do Receptor com Transmissor mas parece que não estou conseguindo configura-lo... Fiquei ate na duvida se e possível mesmo fazer com mão dupla ?
Alguém teria alguma ideia de como fazer ?
PROGRAMA DO RECEPTOR
/* This is a simple example show the Heltec.LoRa recived data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make the OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft- ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin: OLED_SDA -- GPIO4 OLED_SCL -- GPIO15 OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China 成都惠利特自动化科技有限公司 www.heltec.cn
This project is also available on GitHub: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series */ #include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6 String rssi = "RSSI --"; String packSize = "--"; String packet ;
void LoRaData() { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10); Heltec.display->drawString(0 , 15 , "Recebido " + packSize + " bytes"); Heltec.display->drawStringMaxWidth(0 , 26 , 128, packet); Heltec.display->drawString(0, 0, rssi); Heltec.display->display(); }
void cbk(int packetSize) { packet = ""; packSize = String(packetSize, DEC); for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); } rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ; LoRaData();
}
void setup() {
Serial.begin(115200); //WIFI Kit series V1 not support Vext control Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500); Heltec.display->clear();
Heltec.display->drawString(0, 0, "CNCTEX.Lora Iniciado!"); Heltec.display->drawString(0, 10, "Espere o dado recebido ..."); Heltec.display->display(); delay(1000); //LoRa.onReceive(cbk); LoRa.receive(); }
void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { cbk(packetSize); } }
PROGRAMA DO TRANSMISSOR
/* This is a simple example show the Heltec.LoRa sended data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make the OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft- ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin: OLED_SDA -- GPIO4 OLED_SCL -- GPIO15 OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China 成都惠利特自动化科技有限公司 https://heltec.org
this project also realess in GitHub: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series */
#include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6
unsigned int counter = 0; String rssi = "RSSI --"; String packSize = "--"; String packet ;
void setup() { //WIFI Kit series V1 not support Vext control Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500); Heltec.display->clear();
Heltec.display->drawString(0, 0, "CNCTEX.Lora Iniciado!"); Heltec.display->display(); delay(1000); } void loop() { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, "Sending packet: "); Heltec.display->drawString(90, 0, String(counter)); Heltec.display->display();
// send packet LoRa.beginPacket(); /* LoRa.setTxPower(txPower,RFOUT_pin); txPower -- 0 ~ 20 RFOUT_pin could be RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO - RF_PACONFIG_PASELECT_PABOOST -- LoRa single output via PABOOST, maximum output 20dBm - RF_PACONFIG_PASELECT_RFO -- LoRa single output via RFO_HF / RFO_LF, maximum output 14dBm */ LoRa.setTxPower(14, RF_PACONFIG_PASELECT_PABOOST); LoRa.print("Hello "); LoRa.print(counter); LoRa.endPacket();
counter++; digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(10); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW delay(10); // wait for a second }// =========================================================== //
RESOLVIDO
Eu mudei o código para facilitar, ao invés de mandar informações escrita no display fiz ele apenas com 2 botoes e 2 leds um acedendo um lede do outro
Um liga o led do outro com um interruptor que eu fiz pelo software usando um micro swith
lembrando os botoes tem que esta cons resistores pro pull down
PROGRAMA DO TRANSMISSOR RECEPTOR (so passar esse programa no 2 microcontrolador)
/*This is a simple example show the Heltec.LoRa sended data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make theOLED correctly operation, you should output a high-low-high(1-0-1) signal by soft-ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin:OLED_SDA -- GPIO4OLED_SCL -- GPIO15OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China成都惠利特自动化科技有限公司https://heltec.org
this project also realess in GitHub:https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series*/
#include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6
#define botao 36#define led 12
boolean status_Botao = LOW;boolean statusAnt_Botao = LOW;boolean sinal = 0;String packSize = "--";String packet ;
void cbk(int packetSize) { // recebe e converte dos dados recebidos em texto para facilitar o manuzeiopacket = "";packSize = String(packetSize, DEC);for (int i = 0; i < packetSize; i++) {packet += (char) LoRa.read();}}
void setup() {
pinMode (botao, INPUT);pinMode (led , OUTPUT);
//WIFI Kit series V1 not support Vext controlHeltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);LoRa.receive();}void loop() {
status_Botao = digitalRead (botao);delay(5);if (status_Botao == HIGH) statusAnt_Botao = HIGH;if (status_Botao == LOW && statusAnt_Botao == HIGH) {sinal = !sinal;statusAnt_Botao = LOW;LoRa.beginPacket(); // liga o envioLoRa.setTxPower(14, RF_PACONFIG_PASELECT_PABOOST);LoRa.print(sinal);LoRa.endPacket(); // deliga o envio}
// LoRa.onReceive(cbk);
int packetSize = LoRa.parsePacket();if (packetSize) {cbk(packetSize);}
if (packet == "1") {digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)//delay(10); // wait for a second}
if (packet == "0") {digitalWrite(led, LOW); // turn the LED off by making the voltage LOW//delay(10);}}…
Adicionado por Vitor S Costa ao 10:11 em 30 julho 2020
desativada a interrupção do dimmer também funciona:
Exemplo: if (bufferSerial == "A"){detachInterrupt(0);irsend.send(1,0x2FD48B7,32); attachInterrupt(0, zero_crosss_int, RISING); enviou =1; delay(5);} // código NEC(1) TV para ligar
A conexão serial com a placa é feita pelo modulo BT HC-05.
Grato pelo interesse.
#include <IRLib.h>#include <IRLibMatch.h>#include <IRLibRData.h>#include <IRLibTimer.h>
//definições dimmerint ZERO = 2; // pino de interrupção do zero crossint AC_LOAD = 10; // Output para o Triacvolatile int dimming = 100; // Dimming level (0-128) 0 = ON, 128 = OFFString ValorDimmer;
//definições do Receptor IRIRsend irsend; //instância para enviar IR const int led = 8; // pino do led de indicação de envio IR const int ledIR = 3; //pino do emissor IR
//variaveis do temporizador para temperaturaint savedTime;int totalTime = 0;
//variaveis leitura serialString bufferSerial = "";int numero; //contador para alterar a potencia do dimmerint enviou; //flag para indicar que foi enviado codigo IR
void setup(){Serial.begin(9600);
//irpinMode(led, OUTPUT); // saida led pinMode(ledIR ,OUTPUT); // saída do infravermelho
//dimmerpinMode(ZERO, INPUT);pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as outputattachInterrupt(0, zero_crosss_int, RISING); //zero-crossing - interrupçãonumero = dimming; //inicializa a leitura da serial com o mesmo valor do dimming
//inicia temporizador que atualiza temperaturasavedTime = millis();delay(100);
}
void loop(){ //atualiza temperatura no intervalo de "totaltime" int passedTime = millis() - savedTime; if (passedTime > totalTime) { //temperatura LM35 int sum=0; for (int i = 0; i < 50; i++) sum += analogRead(A5); int media = (sum * 0.48875855) / 50; savedTime = millis(); // totalTime = 5000; //Seta para 5seg } bufferSerial = ""; while (Serial.available()>0) { enviou = 0; char c = Serial.read(); // Lê byte do buffer serial; bufferSerial.concat(c); // Concatena valores delay(5); if (c == '@') break; // se leu o caracter @ sai do loop. Este caracter é enviado pela rotina do celular }
if (bufferSerial.length()>0 && bufferSerial.length()<2 && !enviou) { //verifica se informação que chegou esta entre 1 e 2 caracteres (para futuras implementações)
digitalWrite(led, HIGH); //acende o led indicador de envio de IR / comando
if (bufferSerial == "A"){irsend.send(1,0x2FD48B7,32); enviou =1; delay(5);} // código NEC(1) TV para ligar if (bufferSerial == "B"){irsend.send(1,0x2FD7887,32); enviou =1; delay(5);} // código NEC(1) TV para diminuir o volume if (bufferSerial == "C"){irsend.send(1,0x2FD58A7,32); enviou =1; delay(5);}// código NEC(1) TV para aumentar o volume if (bufferSerial == "D"){irsend.send(1,0x2FDA857,32); enviou =1; delay(5);}// código NEC(1) TV para timer if (bufferSerial == "E"){irsend.send(1,0x2FD08F7,32); enviou =1; delay(5);}// código NEC(1) TV para mute if (bufferSerial == "M"){irsend.send(7,0x34347887,32);enviou =1; delay(5);} // código NECx(7) HTLG para ligar/desligar if (bufferSerial == "N"){irsend.send(7,0x34346897,32);enviou =1; delay(5);} // código NECx(7) HTLG para baixar o volume if (bufferSerial == "O"){irsend.send(7,0x3434e817,32);enviou =1; delay(5);}// código NECx(7) HTLG para aumentar o volume if (bufferSerial == "P"){irsend.send(7,0x343451AE,32);enviou =1; delay(5);}// código NECx(7) HTLG para selecionar o source if (bufferSerial == "Q"){irsend.send(7,0x343459A6,32);enviou =1; delay(5);}// código NECx(7) HTLG para abrir o deck if (bufferSerial == "R"){irsend.send(7,0x343415EA,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção - if (bufferSerial == "S"){irsend.send(7,0x3434956A,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção + if (bufferSerial == "T"){irsend.send(7,0x343455AA,32);enviou =1; delay(5);}// código NECx(7) HTLG como enter if (bufferSerial == "U"){irsend.send(7,0x343420DF,32);enviou =1; delay(5);}// código NECx(7) HTLG como play if (bufferSerial == "V"){irsend.send(7,0x3434F20D,32);enviou =1; delay(5);}// código NECx(7) HTLG como pause if (bufferSerial == "X"){irsend.send(7,0x3434609F,32);enviou =1; delay(5);} // código NECx(7) HTLG como skip - if (bufferSerial == "Y"){irsend.send(7,0x3434E01F,32);enviou =1; delay(5);}// código NECx(7) HTLG como skip + }
//se o comando possui mais de 2 caracteres então é para o dimmer if (bufferSerial.length()>2){ bufferSerial.trim(); //elimina possiveis espaços if (bufferSerial.substring(0,2) == "#L") numero = numero+5; //incrementa contador do dimmer para diminuir potencia if (bufferSerial.substring(0,2) == "#H") numero = numero-5; //decrementa contador do dimmer para aumentar potencia if (numero >= 15 && numero <= 128) //se contador estiver abaixo ou acima dos limites do dimmer mantém a ultima leitura dimming=numero; else dimming=dimming; } digitalWrite(led, LOW); //apaga o led indicador de envio de IR / comando }
// função disparada pelo zero-crossingvoid zero_crosss_int() {int dimtime = (65*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Off cycledigitalWrite(AC_LOAD, HIGH); // triac firingdelayMicroseconds(8.33); // triac On propogation delay 10ms for 60Hz use 8.33)digitalWrite(AC_LOAD, LOW); // triac Off}…
Adicionado por Fernando Souza ao 10:53 em 10 novembro 2014
em C e em clipper tudo pra DOS, dai veio o mundo gráfico, as linguagens como Delphi e VB revolucionaram a cena e criando a programação voltada a objetos, dai perdi o tesão e resolvi pular fora do mundo da programação, indo pra o nascente mundo da computação gráfica.
Dai veio a eletrônica, depois os microcontroladores, iniciando pelo PIC e ai eu descobri o Arduino, me apaixonei pela produtividade e larguei todo o resto.
Porem, você não larga seus costumes e hábitos.
Um dos lances curiosos de quem vem do mundo PIC e acredito outros microcontroladores é o uso frequente das interrupções.
Eu nunca as aprendi a usa-las.
Resolvo tudo com lógica de programação.
Mas é engraçado ver gente que não sai do mundo pic pra o arduino dizendo que aqui não há interrupções, o que é um erro pois há sim, só que assim como no meu caso, muitos preferem não utiliza-las.
Quando vejo exemplos como esses é como vejo que toda a coisa são apenas ferramentas, quem realmente faz a diferença somos nós.
AO MAURIOCIO MATTA:
Cara, aqui no Lab não é comum darmos respostas prontas, aqui estimulamos a galera a pensar, mas no seu caso vou abrir uma excessão, visto que até mesmo grandes mestres ficaram um pouco confusos com seu problema, mas na próxima tente só usar um pouco de raciocino pois a resposta já tava dada.
A solução: Tudo que fiz, foi pegar seu código, encapsular ele dentro de uma função, a qual chamei de seucodigo() e só deixei ela funcionar se o botão2 estivesse em zero fechando o laço loop geral.
A questão de criar a função foi apenas didática, apenas pra organizar o código, você poderia ter feito o mesmo apenas colocando o condicional IF antes de todo processo, tá aqui o código:
Testa ele ai, pois tô sem arduino agora pra testar e informa se funcionou ok.
// Teste leds + Teclado// Configurando os pinos: //LEDSconst int leD6 = 8; // the number of the LED pinconst int leD5 = 9; // the number of the LED pinconst int leD4 = 10; // the number of the LED pinconst int leD3 = 11; // the number of the LED pinconst int leD2 = 12; // the number of the LED pinconst int leD1 = 13; //Botoesconst int K4 = A0; // the number of the pushbutton pin const int K3 = A1; // the number of the pushbutton pin const int K2 = A2; // the number of the pushbutton pin const int K1 = A3; // the number of the pushbutton pin const int K5 = A4;const int K6 = A5; //Energia Botoesconst int tecl = A6; // the number of the pushbutton pin // variables will change:int ledstate = LOW; // variable for reading the pushbutton statusunsigned long previousMillis = 0; //timer dos ledsunsigned long TleD6; // quarda millis (tempo) do ledunsigned long TleD5; unsigned long TleD4; unsigned long TleD3; unsigned long TleD2; unsigned long TleD1; const long tempoled =10000; void setup() { pinMode(2, INPUT_PULLUP); // Seta o pino 2 como entrada pullup pinMode(leD1, OUTPUT); pinMode(leD2, OUTPUT); pinMode(leD3, OUTPUT); pinMode(leD4, OUTPUT); pinMode(leD5, OUTPUT); pinMode(leD6, OUTPUT); pinMode(K1, INPUT); digitalWrite(K1, HIGH); pinMode(K2, INPUT); digitalWrite(K2, HIGH); pinMode(K3, INPUT); digitalWrite(K3, HIGH); pinMode(K4, INPUT); digitalWrite(K4, HIGH); pinMode(K5, INPUT); digitalWrite(K5, HIGH); pinMode(K6, INPUT); digitalWrite(K6, HIGH); // habilita pullup pinMode(tecl, OUTPUT); digitalWrite(tecl, LOW); //para usar o tecladinho } void loop() { if(digitalRead(2)==0){ // Somente funciona qualquer coisa se o pino 2 estiver em 0 seucodigo(); } }
void seucodigo(){
if (digitalRead(K1) == LOW) { digitalWrite(leD1, HIGH); TleD1 = millis(); } else if (TleD1 + tempoled < millis()) { // turn LED off: digitalWrite(leD1, LOW); } if (digitalRead(K2) == LOW) { digitalWrite(leD2, HIGH); TleD2 = millis(); } else if (TleD2 + tempoled < millis()) { // turn LED off: digitalWrite(leD2, LOW); } if (digitalRead(K3) == LOW) { digitalWrite(leD3, HIGH); TleD3 = millis(); } else if (TleD3 + tempoled < millis()) { // turn LED off: digitalWrite(leD3, LOW); } if (digitalRead(K4) == LOW) { digitalWrite(leD4, HIGH); TleD4 = millis(); } else if (TleD4 + tempoled < millis()) { // turn LED off: digitalWrite(leD4, LOW); } if (digitalRead(K5) == LOW) { digitalWrite(leD5, HIGH); TleD5 = millis(); } else if (TleD5 + tempoled < millis()) { // turn LED off: digitalWrite(leD5, LOW); } if (digitalRead(K6) == LOW) { digitalWrite(leD6, HIGH); TleD6 = millis(); } else if (TleD6 + tempoled < millis()) { // turn LED off: digitalWrite(leD6, LOW); } unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= 500) { previousMillis = currentMillis; if (ledstate == LOW) ledstate = HIGH; else ledstate = LOW; }}…
Adicionado por Weider Duarte ao 15:32 em 30 julho 2015