Olá amigo do lab de garagem gostaria de pedir ajuda para um projeto que vou desenvolver.
é seguinte a mais de um ano desenvolvi um preojeto utilizando o atmega 328 + o módulo bluetooth HC 05 que por sinal deu muito certo até hoje utilizo na minha moto como sistema de segurança e então utilizo este código:

void setup()
{
 pinMode(13,OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);


Serial.begin(9600);
}

void loop()
{delay(1000);
if (Serial.available())
{int c=Serial.read();
  if(c=='y')
 {  
    digitalWrite(13,HIGH);
  Serial.println("Ok, Moto ligada!");
  }
  else if(c=='w')
{  
      digitalWrite(13,LOW);
    Serial.println("Ok, Moto  desligada!");
  }  
  if(c=='b')
  {  
     digitalWrite(12,HIGH);
  Serial.println("Ok, Partida ligada!");
 
  }
  else if(c=='v')
{  
      digitalWrite(12,LOW);
    Serial.println("Ok, led desligado!");
  }  
  if(c=='c')
 {
    
    digitalWrite(11,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='x')
{  
      digitalWrite(11,LOW);
    Serial.println("Ok, led desligado!");
}
   if(c=='d')

 {
       digitalWrite(10,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='z')
{  
      digitalWrite(10,LOW);
    Serial.println("Ok, led desligado!");
}

  if(c=='e')

 {
       digitalWrite(9,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='t')
{  
      digitalWrite(9,LOW);
    Serial.println("Ok, led desligado!");
}
if(c=='k')

 {
       digitalWrite(8,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='o')
{  
      digitalWrite(8,LOW);
    Serial.println("Ok, led desligado!");
}}}
com este código eu só ativo e desativo um temporizador de fora parte deste sistema e outras coisas mais como os piscas da moto dá paritda etc.
Eu quero saber se tem como eu configurar uma porta do arduino como um temporizador neste mesmo código.
ou seja quando eu mandar um pulso para algum pino configurado uma outra porta configurada como saída se ative ou desative num determinado tempo.

Exibições: 660

Responder esta

Respostas a este tópico

valeu amigo Gustavo pela indicação!!

meu sistema é via bluetooth ok amigo!!

teria como você me ajudar a complementar este meu código para este fim que almejo ?

Olá,

Entendi que o seu código já está usando o bluetooth com sucesso mas não vejo a parte do bluetooth.

Para ter um tempo, basta usar o delay(1000) ou o millis() para pegar o timestamp e calcular o atraso.

Acho mais adequado usar o pastebin.com para deixar o seu código mais legível e fácil para quem for te ajudar.

  'Eiju

amigo não sei se você entendeu a forma que eu relatei no inicio do tópico:

eu quero fazer assim:

com este código no Arduíno conectado no módulo blutooth HC05 eu consigo ligar/desligar os as portas que estão configurada aí com meu celular entende?

o que eu quero adicionar neste código é

quando eu mandar um pulso para algum pino configurado uma outra porta configurada como saída se ative ou desative num determinado tempo.

valeu amigo Eiju  por me responder!!

olá amigo parcialmente resolvi o o problema. eis o código que eu queria:


int ledPin = 13;                // LED conectado ao pino digital 13
int value = LOW;                // último valor do LED
long previousMillis = 0;        // último momento que o LED foi atualizado
long interval = 120000;           // tempo de transição entre estados (milisegundos)

void setup()
{
 
    pinMode(ledPin, OUTPUT);      // configura o pino digital como saída

 pinMode(7, INPUT);
digitalWrite(7, HIGH);
}
void loop()
{
 byte debounce = 0;
 if (digitalRead (7) == LOW)
{ unsigned long tempo = millis ();
while(tempo + 500 > millis());
if (digitalRead (7)== LOW) debounce = 1;
}
if (debounce )

digitalWrite (13, HIGH);
 // COLOQUE AQUI o código que precisa rodar todo o tempo

  // veja se é a hora de atualizar o LED; isto é, a diferença
  // entre o tempo atual e o último tempo que piscamos o LED é
  // maior que o tempo de transição entre estados?
  if (millis() - previousMillis > interval) {
    previousMillis = millis();   // lembre-se do último tempo que piscamos o LED

    // se o LED está apagado, acenda-o e vice-versa.
    if (value == HIGH)
      value = LOW;
    else
      value = LOW;

        digitalWrite(ledPin, value);

  }
} este código atendeu minha expectativa.

Agora eu gostaria de pedir ajuda no seguinte aspecto:

eu gostaria de memorizar os status dos comandos que eu envio pro Arduino com o celular.

Ex: no código tá assim:

eu envio "y" ativo a porta "13" do arduino

se eu envio "w" desativo a porta "13" do arduino

eu quero memorizar o ultimo estado da porta se eu desligar o Arduino e ele tiver com a porta 13 ativada com o comando "y" quando eu religar novamente, ele volte com a porta   ativada entendeu amigos.

tem uma forma de fazer isso incluindo a eeprom no programa só que eu não sei como fazer isso por favor me ajudem !

 

Me ajudem gente!!!

Usa a biblioteca EEPROM.h

Na hora que ativar guarda o status, e ao religar leia o status.

Por exemplo:

// Gravar alto Zero é o endereço na EPROM e 1 o valor gravado no byte

EEPROM.write(0,1);

// Gravar baixo

EEPROM.write(0,0);

Para ler:

char b = EEPROM.read(0);

if ( b ){

  digitalWrite(13,HIGH);

}

Veja no site do arduino

https://www.arduino.cc/en/Reference/EEPROM

Olá amigo muito obrigado por me responder:

em primeiro lugar gostaria de pedir desculpas pela minha ignorância  no assunto é que eu não tenho prática com programação estou estudando muito, mais ainda tenho muita dúvida.

Amigo fiz do jeito que você mandou porem não deu certo ou seja não memorizou o ultimo status

eu acho que eu não estou é acertando montar o código.

amigo será que teria com você montar aí pra mim?

Veja como fiz o texte:

abri o monitor serial e digitei "y" que ativa a porta 13, ativou beleza, eu desliguei o Arduino da porta USB e ligue novamente e não voltou ligada. Ou não se testa assim?

Olhe o jeito que montei o código!

#include <EEPROM.h>
int addr = 0;


void setup()
{
 
EEPROM.write(0,1);
EEPROM.write(0,0);

  Serial.begin(9600);
 pinMode(13,OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);


}

void loop()
{


char b= EEPROM.read(0);
if (b){
  digitalWrite(13,HIGH);
}
  {delay(200);
if (Serial.available())
{int c=Serial.read();
  if(c=='y')
 { 
    digitalWrite(13,HIGH);
  Serial.println("Ok, Moto ligada!");
  }
  else if(c=='w')

      digitalWrite(13,LOW);
    Serial.println("Ok, Moto  desligada!");
  } 
  if(c=='b')
  { 
     digitalWrite(12,HIGH);
  Serial.println("Ok, Partida ligada!");
 
  }
  else if(c=='v')

      digitalWrite(12,LOW);
    Serial.println("Ok, led desligado!");
  } 
  if(c=='c')
 {
   
    digitalWrite(11,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='x')

      digitalWrite(11,LOW);
    Serial.println("Ok, led desligado!");
}
   if(c=='d')

 {
       digitalWrite(10,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='z')

      digitalWrite(10,LOW);
    Serial.println("Ok, led desligado!");
}

  if(c=='e')

 {
       digitalWrite(9,HIGH);
  Serial.println("Ok, led ligado!");
 
  }
  else if(c=='t')

      digitalWrite(9,LOW);
    Serial.println("Ok, led desligado!");
}}}}

Não testei. Apenas compilei.

PORTANTO TESTA BEM ANTES DE SAIR COLOCANDO NA TUA MOTO :p

Acho que deve funcionar.

#include <EEPROM.h>
int addr = 0;


void setup()
{
 


  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);

  // Leio na eeprom o último status
  char ultimoStatus =  EEPROM.read(0);
  // Altero o status
  alteraStatus(ultimoStatus);


}

// Separei essa função para poder chamar fora do método loop
// no caso chamei no método setup
void alteraStatus(char  c) {
  if (c == 'y')
  {
    digitalWrite(13, HIGH);
    Serial.println("Ok, Moto ligada!");
  }
  else if (c == 'w')
  {
    digitalWrite(13, LOW);
    Serial.println("Ok, Moto  desligada!");
  }
  if (c == 'b')
  {
    digitalWrite(12, HIGH);
    Serial.println("Ok, Partida ligada!");

  }
  else if (c == 'v')
  {
    digitalWrite(12, LOW);
    Serial.println("Ok, led desligado!");
  }
  if (c == 'c')
  {

    digitalWrite(11, HIGH);
    Serial.println("Ok, led ligado!");

  }
  else if (c == 'x')
  {
    digitalWrite(11, LOW);
    Serial.println("Ok, led desligado!");
  }
  if (c == 'd')

  {
    digitalWrite(10, HIGH);
    Serial.println("Ok, led ligado!");

  }
  else if (c == 'z')
  {
    digitalWrite(10, LOW);
    Serial.println("Ok, led desligado!");
  }

  if (c == 'e')

  {
    digitalWrite(9, HIGH);
    Serial.println("Ok, led ligado!");

  }
  else if (c == 't')
  {
    digitalWrite(9, LOW);
    Serial.println("Ok, led desligado!");
  }

 
}

void loop()
{

  delay(200);
  if (Serial.available())
  {
    // Pega o código da serial
    char c = Serial.read();
    // Altera o status
    alteraStatus(c);
    // Grava na eeprom
    EEPROM.write(0, c);
  }

}

Olá boa noite amigo.

gostaria de lhe informar que o código ficou perfeito, ou seja melhor que eu imaginava

tou muito grato meu amigo, realmente o mundo precisa de mais pessoas igual a você

muito obrigado!!

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço