Merhaba Arkadaşlar Arduino ile DTMF Kod Çözücü yaptım fakat başaramadığım yazılımla ilgili bir sorum olacak. Telefondan bastığım tuşa karşılık gelen Led yanıyor.Fakat Tekrardan ledi kapatmak için tekrardan telefondaki aynı tuşa basmam gerekli. Benim Yapmak istediğim Led yandıktan 2 sn sonra sönmesi .Aslında bunuda yaptım. Yanlız 1. led yandıkdan ve 2 sn sonra söndükten sonra telefonda 2. tuşa bastığımda 2. led yanma esnasında 1. ledde yanıp hemen sönüyor. Anlayamadığım nasıl bir kod eklemeliyimki telefonda bir tuşa basdığımda o led yanıp 2 sn sonra söndükten sonra farklı bir numarayı tuşladığımda diğer ledin yanıp sönme esnasında eski ledin yanmaması yani led çıkışları sıfırlanmalı. Çok uğraşdım fakat olmadı. Şimdiden Yardımlarınız için Teşekkürederim. Devreme ait Program Kodları Aşağıdadır.
/* --------------------------------------------- * DTMF HOME CONTROL V1.0 Rev0.0 * Controle de dispositivos através de telefone * Arduino-ce * Comunidade Cearense de Hardware Livre *http://groups.google.com/group/arduino-ce?hl=pt-br *http://arduino-ce.blogspot.com * março de 2011 ---------------------------------------------*/
int bit01 = 0; int bit02 = 0; int bit03 = 0; int bit04 = 0; int bitStd= 0;
int RELE1_STATE = LOW; // Estado do Relé LOW (Desligado) int RELE2_STATE = LOW; int RELE3_STATE = LOW; int RELE4_STATE = LOW; int RELE5_STATE = LOW; int RELE6_STATE = LOW; int RELE7_STATE = LOW; int RELE8_STATE = LOW; int RELE9_STATE = LOW; int RELE10_STATE = LOW; int RELE11_STATE = LOW; int RELE12_STATE = LOW;
void setup() { Serial.begin(9600); // Iniciamos a Serial com Baudrate 9600 pinMode(RELE1, OUTPUT); // Definimos o pino do Relé como Saída pinMode(RELE2, OUTPUT); pinMode(RELE3, OUTPUT); pinMode(RELE4, OUTPUT); pinMode(RELE5, OUTPUT); pinMode(RELE6, OUTPUT); pinMode(RELE7, OUTPUT); pinMode(RELE8, OUTPUT); pinMode(RELE9, OUTPUT); pinMode(RELE10, OUTPUT); pinMode(RELE11, OUTPUT); pinMode(RELE12, OUTPUT); Serial.println("Aguardando tecla de comando..."); // Exibimos a mensagem no terminal... }
void loop(){
bitStd = digitalRead(pinBitStd); //Lê o estado do pino STD e armazena em 'bitStd'
if (bitStd == HIGH) {//Se estiver em nível alto fará as leituras //dos bits dos pinos Q3, Q2, Q1 e Q0
Telefondan bastığım tuşa karşılık gelen Led yanıyor.Fakat Tekrardan ledi kapatmak için tekrardan telefondaki aynı tuşa basmam gerekli. Benim Yapmak istediğim Led yandıktan 2 sn sonra sönmesi .Aslında bunuda yaptım. Yanlız 1. led yandıkdan ve 2 sn sonra söndükten sonra telefonda 2. tuşa bastığımda 2. led yanma esnasında 1. ledde yanıp hemen sönüyor. Anlayamadığım nasıl bir kod eklemeliyimki telefonda bir tuşa basdığımda o led yanıp 2 sn sonra söndükten sonra farklı bir numarayı tuşladığımda diğer ledin yanıp sönme esnasında eski ledin yanmaması yani led çıkışları sıfırlanmalı. Çok uğraşdım fakat olmadı. Şimdiden Yardımlarınız için Teşekkürederim. Devreme ait Program Kodları Aşağıdadır.
/* ---------------------------------------------
* DTMF HOME CONTROL V1.0 Rev0.0
* Controle de dispositivos através de telefone
* Arduino-ce
* Comunidade Cearense de Hardware Livre
*http://groups.google.com/group/arduino-ce?hl=pt-br
*http://arduino-ce.blogspot.com
* março de 2011
---------------------------------------------*/
#define RELE1 2 // Conectado ao fio branco do módulo Relé(Figura4)
#define RELE2 3
#define RELE3 4
#define RELE4 5
#define RELE5 6
#define RELE6 7
#define RELE7 8
#define RELE8 9
#define RELE9 10
#define RELE10 11 // 0
#define RELE11 12 // *
#define RELE12 13 // #
#define pinBit01 A0 // Q0
#define pinBit02 A1 // Q1
#define pinBit03 A2 // Q2
#define pinBit04 A3 // Q3
#define pinBitStd A4 // STD
int tecla = 0;
int bit01 = 0;
int bit02 = 0;
int bit03 = 0;
int bit04 = 0;
int bitStd= 0;
int RELE1_STATE = LOW; // Estado do Relé LOW (Desligado)
int RELE2_STATE = LOW;
int RELE3_STATE = LOW;
int RELE4_STATE = LOW;
int RELE5_STATE = LOW;
int RELE6_STATE = LOW;
int RELE7_STATE = LOW;
int RELE8_STATE = LOW;
int RELE9_STATE = LOW;
int RELE10_STATE = LOW;
int RELE11_STATE = LOW;
int RELE12_STATE = LOW;
void setup() {
Serial.begin(9600); // Iniciamos a Serial com Baudrate 9600
pinMode(RELE1, OUTPUT); // Definimos o pino do Relé como Saída
pinMode(RELE2, OUTPUT);
pinMode(RELE3, OUTPUT);
pinMode(RELE4, OUTPUT);
pinMode(RELE5, OUTPUT);
pinMode(RELE6, OUTPUT);
pinMode(RELE7, OUTPUT);
pinMode(RELE8, OUTPUT);
pinMode(RELE9, OUTPUT);
pinMode(RELE10, OUTPUT);
pinMode(RELE11, OUTPUT);
pinMode(RELE12, OUTPUT);
Serial.println("Aguardando tecla de comando..."); // Exibimos a mensagem no terminal...
}
void loop(){
bitStd = digitalRead(pinBitStd); //Lê o estado do pino STD e armazena em 'bitStd'
if (bitStd == HIGH) {//Se estiver em nível alto fará as leituras
//dos bits dos pinos Q3, Q2, Q1 e Q0
bit01 = digitalRead(pinBit01);
bit02 = digitalRead(pinBit02);
bit03 = digitalRead(pinBit03);
bit04 = digitalRead(pinBit04);
tecla = (bit04 * 8) + (bit03 * 4) + (bit02 * 2) + (bit01 * 1);//Conversão binária para
//decimal (ver Vídeo1)
Serial.print("Recebido: "); // Exibe a mensagem
switch (tecla){ // Seleciona a tecla pressionada
case 1: // Tecla 1
Serial.println("1");
/* COMANDO PARA RELE1 */
RELE1_STATE = !RELE1_STATE; // Guarda o estado INVERTIDO do Relé.
break;
case 2: // Tecla 2
Serial.println("2");
RELE2_STATE = !RELE2_STATE;
break;
case 3: // Tecla 3
Serial.println("3");
RELE3_STATE = !RELE3_STATE;
break;
case 4: // Tecla 4
Serial.println("4");
RELE4_STATE = !RELE4_STATE;
break;
case 5: // Tecla 5
Serial.println("5");
RELE5_STATE = !RELE5_STATE;
break;
case 6: // Tecla 6
Serial.println("6");
RELE6_STATE = !RELE6_STATE;
break;
case 7: // Tecla 7
Serial.println("7");
RELE7_STATE = !RELE7_STATE;
break;
case 8: // Tecla 8
Serial.println("8");
RELE8_STATE = !RELE8_STATE;
break;
case 9: // Tecla 9
Serial.println("9");
RELE9_STATE = !RELE9_STATE;
break;
case 10: // Tecla 0
Serial.println("0");
RELE10_STATE = !RELE10_STATE;
break;
case 11: // Tecla *
Serial.println("*");
RELE11_STATE = !RELE11_STATE;
break;
case 12: // Tecla #
Serial.println("#");
RELE12_STATE = !RELE12_STATE;
break;
}
digitalWrite(RELE1, RELE1_STATE);//Liga ou desliga o Relé1 conforme o estado (HIGH/ LOW)
digitalWrite(RELE2, RELE2_STATE);
digitalWrite(RELE3, RELE3_STATE);
digitalWrite(RELE4, RELE4_STATE);
digitalWrite(RELE5, RELE5_STATE);
digitalWrite(RELE6, RELE6_STATE);
digitalWrite(RELE7, RELE7_STATE);
digitalWrite(RELE8, RELE8_STATE);
digitalWrite(RELE9, RELE9_STATE);
digitalWrite(RELE10, RELE10_STATE);
digitalWrite(RELE11, RELE11_STATE);
digitalWrite(RELE12, RELE12_STATE);
// Zeram-se todas as variáveis
tecla = 0;
bit01 = 0;
bit02 = 0;
bit03 = 0;
bit04 = 0;
bitStd= 0;
delay (500); // Aguarda 500 milissegundos
} // Sai do switch
} // Volta pro loop...
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.