Ir ao conteúdo
  • Cadastre-se

Arduino Controle da função for


Ir à solução Resolvido por eu100,

Posts recomendados

Pessoal, estou fazendo um exercício de controle de um carrinho por meio de um IRremote. Apanhando muito, mas estou indo bem. Preciso que, ao soltar a tecla acelerar, ele pare de acelerar e continue estável nesse ponto de aceleração. O mesmo vale para a tecla "desacelerar". Alguém pode me ajudar nessa questão, por favor?

#include <IRremote.h>

# define ligar 16236607

# define desligar 16203967

# define frente 16220287

# define tras 16187647

# define LD 16195807

# define LE 16228447

# define acelerar 16212127

# define desacelerar 16244767

//# define bloquear

#define pinSensor 2

#define ledLigar 3

#define ledFrente 4

#define ledTras 5

#define ledLD 6

#define ledLE 7

#define ledAceleraDesacelera 9

IRrecv irrecv(pinSensor);

decode_results resultado;

void setup() {

Serial.begin(9600);

irrecv.enableIRIn(); // Inicializar receptor infravermelho

pinMode(ledLigar, OUTPUT);

pinMode(ledFrente, OUTPUT);

pinMode(ledTras, OUTPUT);

pinMode(ledLD, OUTPUT);

pinMode(ledLE, OUTPUT);

pinMode(ledAceleraDesacelera, OUTPUT);

pinMode(pinSensor, INPUT);

// ligar_aparelho();

}

void loop(){

if (irrecv.decode(&resultado)) // se algum código for recebido

{

Serial.println(resultado.value, DEC);

delay(10);

irrecv.resume();

}

if (resultado.value == ligar)

{digitalWrite (ledLigar,HIGH);

}

if (resultado.value == desligar)

{digitalWrite (ledLigar,LOW);

}

if (resultado.value == frente)

{digitalWrite (ledFrente,HIGH);

}

if (resultado.value == tras)

{digitalWrite (ledTras,HIGH);

}

if (resultado.value == LD)

{digitalWrite (ledLD,HIGH);

}

if (resultado.value == LE)

{digitalWrite (ledLE,HIGH);

}

if (resultado.value == acelerar) {for (int aceleracao = 0; aceleracao <= 255;aceleracao ++)

{

analogWrite (ledAceleraDesacelera, aceleracao);

delay (10);

}

}

if (resultado.value == desacelerar ) {for (int desaceleracao = 255; desaceleracao >=0;desaceleracao --)

{

analogWrite (ledAceleraDesacelera, desaceleracao);

delay (10);

}}

return;

}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Que tal algo como...

unsigned char aceleracao; //255 max
if (resultado.value == acelerar)
{
aceleracao++; if (aceleracao==0) aceleracao=255;
analogWrite (ledAceleraDesacelera, aceleracao);
delay (10);
}

if (resultado.value == desacelerar )
{
aceleracao--; if (aceleracao==255) aceleracao=0;
analogWrite (ledAceleraDesacelera, aceleracao);
delay (10);
}

 

 ... e o mais legal: você mesmo solucionou.

4 horas atrás, eu100 disse:

if não precisa de chaves?

Precisa de parênteses e você precisa entender os conceitos básicos de c. Dúvida estranha pra quem autosolucionou uma questão complexa 😑

🙃

Link para o comentário
Compartilhar em outros sites

  • mês depois...
  • Solução
Em 14/05/2023 às 12:30, .if disse:

Que tal algo como...

unsigned char aceleracao; //255 max
if (resultado.value == acelerar)
{
aceleracao++; if (aceleracao==0) aceleracao=255;
analogWrite (ledAceleraDesacelera, aceleracao);
delay (10);
}

if (resultado.value == desacelerar )
{
aceleracao--; if (aceleracao==255) aceleracao=0;
analogWrite (ledAceleraDesacelera, aceleracao);
delay (10);
}

 

Prezado If, brigadão mesmo. Caiu como uma luva. Aprimorei sua sugestão substituindo a variável char por  byte e a tornando universal e colocando um incremento de +=5. Ficou formidável, veja:

#include <IRremote.h>

# define acelerar  16212127   
# define desacelerar  16244767    
#define pinSensor 2
#define ledAceleraDesacelera 6

byte aceleracao; 
  
IRrecv irrecv(pinSensor);
decode_results resultado;
void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();  // Inicializar receptor infravermelho
  pinMode(ledAceleraDesacelera, OUTPUT);
  pinMode(pinSensor, INPUT);
  

  }

void loop() {
if (irrecv.decode(&resultado))              // se algum código for recebido
  {delay(10);
  irrecv.resume();


if (resultado.value == acelerar)
{
aceleracao+=5; if (aceleracao==4) aceleracao=255;
delay (10);
}

if (resultado.value == desacelerar )
{
aceleracao-=5; if (aceleracao==251) aceleracao=0;
delay (10);
}

Serial.println ("A aceleracao e:");
Serial.println (aceleracao);}
analogWrite (ledAceleraDesacelera,aceleracao);

}

 

Agora, só fiquei curioso com uma coisa: o if não precisa de chaves?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!