Boa tarde Pessoal,

Estou com uma certa dificuldade em relação ao meu código, Bom vou tentar explicar..A lógica funciona assim, se o sensor LDR imprimir um valor menor que 850 na porta serial vai acender um led significando que eu tenho um crédito, e se eu apertar um botão liga uma porta digital irá ligar um rele e apaga o led gastando meu crédito, O grande problema é se o sensor LDR imprimir mais de uma vez o valor menor que 850 na porta serial eu teria mais créditos e eu poderia ligar o rele de acordo com a quantidade de credito inserida e o led só apagaria quando não tivesse mais crédito algum vou postar o código aqui mesmo pois é pequeno.. obrigado, um abraço.

#define LDR 0// Define o sensor ldr na porta analogica zero
#define rele 7 // o rele sera ligado na porta 7

int val;// variável que vai gravar os valores obtidos pelo LDR
int credito; //variavel que verifica se tem credito

void setup() {
Serial.begin(9600);
pinMode(rele, OUTPUT); //define o pino do rele
digitalWrite(rele, HIGH); // logica inversa rele desligado
pinMode(8, OUTPUT); // define led de credito
digitalWrite(8,0);// deixa o led credito apagado
pinMode(9,INPUT);//define botão produto como entrada
digitalWrite(9,1);// botão produto não esta pressionado
}

void loop(){
val= analogRead(LDR); // ler os valores obtidos pelo ldr
Serial.println(val); // escreve na porta serial o valor do sensor LDR

if (val <= 850) // se o valor do ldr for menor igual a 850
{
digitalWrite(8,1); //se o valor do ldr for menor igual a 850 vai ligar o led do credito
}
int leitura = digitalRead(9);//define a variavel leitura com o valor do pino de entrada 1 ou 0
int dadoled = digitalRead(8);

Serial.println(dadoled);
if ((dadoled != 0) && (leitura == 0))// se tiver crédito e pressionar o botão do produto
{
digitalWrite(rele, LOW);// liga o motor do produto por 160 milisegundos
delay(0160);
digitalWrite(rele, HIGH);// deslida o motor do produto
digitalWrite(8,0);

}
delay(0050); // verifica novamente em 0050 milisegundos.
}

Exibições: 356

Responder esta

Respostas a este tópico

Oi LH, boa tarde.
sou somente um voluntário neste forum.
Me sinto muito bem quando consigo ajudar um amigo daqui a resolver sua dificuldade.


Mas ao fazer isto fico sempre em dúvida sobre se este amigo, quer simplesmente resolver a sua
dúvida ou quer aprender, para que na próxima oportunidade entenda como resolver a dificuldade.

Portanto tenho tentado aprimorar meu método de ajuda.


Se você quer somente resolver este problema, vou estudar o seu código e tentar resolver.

Mas se você quiser aprender , vou dar umas dicas rápidas e eficientes:


Ao escrever um código, tenha sempre em mente que ele seguirá a seqüência lógica que
você definiu. Ele não entenderá um texto descritivo.

Então, como ensinam os mestres da computação,
primeiro precisamos saber qual o resultado queremos e como obte-lo.

Se um código segue uma seqüência lógica, então vamos escrever a idéia em uma forma lógica.

E o melhor método para fazer isto é desenhar um fluxograma (flowchart) da nossa idéia.
Com um flowchart escrito, fica muito fácil escrever um código, e se necessário, ´debuga-lo".


A outra dica você já fez: Escreva uma descrição resumida da necessidade de cada linha.

Mais uma dica, mas esta não consigo avaliar se você fez ou não, é "identar" o código.
Ou seja criar parágrafos para as linhas de acordo com a dependência dela para funções

ou comandos de decisões.


Como você postou o seu código na área de texto do forum, e esta área tem a características de perder a formatação original do texto, não consigo perceber a identação. Esta área perde também caracteres do código.


Você mesmo pode fazer um pequeno teste de perda de caractere.
Tente porta um texto qualquer e escreva nele o sinal de "shift left". (Duplo "menor que").
Ao postar, ele desaparecerá' do seu texto.

Poste seu código aqui em arquivo anexado ou em sites como o www.pastebin.com, e poste o link aqui

Rui

 

Olá Rui, boa tarde..

Primeiramente quero agradecer e te parabenizar pelas postagem que você faz, sempre muito diretas e de fácil entendimento. Agora em relação ao meu código se possível eu gostaria de resolver meu problema para em seguida eu poder estudar as alterações e dai sim poder entender o funcionamento das condições. Pois eu sou formado em Redes de Computadores e estou migrando aos poucos para o desenvolvimento.

Obrigado. 

tente também ser mais claro no seu pedido de ajuda. Li 2x seu texto e não consegui perceber claramente o que vc quer.

Teu problema é o que?

1) vc não está conseguindo que os créditos aumentem a cada vez que o LDR resultar em leitura menor que 850? Isso ocorre porque vc apenas declarou no início do sketch uma variável onde os créditos deverão ser armazenados, mas não incluiu no seu código nenhum trecho que manipule tais créditos (nem pra aumentar nem pra diminuir)

2) sobre a questão de aumentar crédito quando a leitura do ldr for menor que 850, não entendi se pode ou se não pode ir aumentando os créditos a cada loop. Perceba que se não houver uma devida tratativa na codificação, cada loop que resulte numa leitura de ldr abaixo de 850 irá resultar em aumento de crédito muito rápido. Isso é pra acontecer mesmo ou vc quer impedir que os aumentos em crédito ocorram sucessivamente a cada loop?

Boa tarde IMHugo,

Muito obrigado pela sua atenção, realmente eu tive uma certa dificuldade ao descrever meu problema.. Mas vamos la, Como eu disse anteriormente estou adentrando aos poucos na área de desenvolvimento. 

Faz assim esquece meu código rsrsrs, meu objetivo é o seguinte, toda vez que uma moeda de 1 Real passar na frente de um sensor LDR a porta serial imprime um valor menor do que 850, eu preciso de uma estrutura que conte quantas vezes o sensor ficou menor do que 850 e armazene esse valor em uma variavel pois caso seja inserido 3 moedas, ou seja se o sensor LDR for menor do que 850 3x essa variável receberá o valor 3 (que são os créditos). O restante do código eu consigo terminar, se você conseguir me ajudar com essa estrutura ficarei muito agradecido. Obrigado, um abraço.

ahhhhh, agora sim ficou claro.

Oi LH,

É assim sua necessidade?

       Inicio

        Se o sensor LDR menor que 850 

                Credito +1

                Se credito >0

                   liga LED Porta 8  = Crédito

       Se Liga LED Porta 8  Ligado e botão apertado :

                liga rele

                tempo 160ms

                desliga Rele

                crédito-1

       tempo 50ms

Reinicia

Rui

Showw de bola Rui !!!!

Funcionou!!

valeu um abraço!!

# RESOLVIDO #

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço