Pages: [1]   Go Down
Author Topic: [RESOLVIDO] - Dúvida código servos e LCD  (Read 1446 times)
0 Members and 1 Guest are viewing this topic.
SC, Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 6
KISS! Keep it simple, Stupid!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Beleza gente!

Seguinte, estava montando um projeto de uma espécie de "controle" para um insetorobô, simples. No Robô, existem 2 servos de 9g (1.3kg.cm) e um sensor ultrassônico (HC-SR04 - 4 pinos). No "controle" são 4 pushbuttons, a [acronym]Arduino[/acronym] Uno R3, LCD 16x2, potenciômetro para contraste e só.

O problema é o seguinte. Fiz o código para que o sonar mostrasse a distancia no LCD, perfeito, funciona. Consegui até remover o ruído do servo da leitura (usando jumpers daqueles "premium"), apenas um problema (provavelmente resolvível por código, não sei como) de o LCD não apagar a casa das centenas qdo passa para dezenas de cm, inclusive peço uma força para isso tbém.

Para a locomoção do bichin, fiz as funções de locomoção (frente, virar direita, ré-esquerda e centralizar servo) e associei casa uma a uma leitura de HIGH de um pushbutton (por função). Mas, quando aperto o PushButton, nada acontece. Usei os pushbuttons no exato mesmo lugar no mesmo layout de montagem para acender LEDs, como prova de conceito, mas agora, necas de pitibirica de funfar... Quem sabe alguém pelas fotos tem uma ideia e pode me dar uma luz nessa.

Código: http://pastebin.com/mEYKv1Zj

Foto geral, que mostra o robô, "controle" e o LCD-que-não-apaga-a-centena:



Foto que mostra a conexão dos pushbuttons, para vcs verem se a ligação está correta:



Abraços e valeu a ajuda!!!
« Last Edit: March 13, 2012, 12:55:11 pm by tuliobaars » Logged

KISS! Keep it simple, Stupid!

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu dei só uma olhadinha no seu código.

O botão não funcionar, pode ser por causa do delay(1000) que tem no seu código e ele passar pelo digitalread só depois. o arduino não consegue fazer 2 coisas ao mesmo tempo, portanto pode ser que vc está apertando o botão muito rápido e ele não pega no digitalread.

Olhe este exemplo para usar millis() ao invés de delay: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Eu não entendi o problema que você está tendo no LCD direito.
Logged

SC, Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 6
KISS! Keep it simple, Stupid!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bem, este do millis()... qual é a diferença da função delay()?

E o LCD é o seguinte: Se meço 345cm, tranquilo. Se diminuo a distância, para, por exemplo, 50cm, o 5 do 345 fica e aparece 505. Não sei se expressei bem, mas, ele mantém um dígito da leitura anterior se ele tiver uma dimensão maior (dezenas para centenas, ex).

Valeu, Abs
Logged

KISS! Keep it simple, Stupid!

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bem, este do millis()... qual é a diferença da função delay()?
a diferença é que vc pode fazer outra coisa enquanto aguarda. o delay "trava" seu arduino por 1 segundo. é 1 segundo sem fazer nada. olha o exemplo que te mandei, coloque em um arduino e leia o código para entender exatamente o que ele faz.

E o LCD é o seguinte: Se meço 345cm, tranquilo. Se diminuo a distância, para, por exemplo, 50cm, o 5 do 345 fica e aparece 505. Não sei se expressei bem, mas, ele mantém um dígito da leitura anterior se ele tiver uma dimensão maior (dezenas para centenas, ex).
entendi.

vc vai precisar limpar a linha antes de escrever alguma coisa. uma opção meio tosca é esta aí embaixo.
Code:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distancia:");
lcd.setCursor(0, 1);
lcd.print(distancia);

outra opção é vc depois do lcd.print(distancia) colocar um outro lcd.print("     "). a mais limpa seria vc implementar um contador byte e contar quantos caracteres vc está escrevendo e limpar o resto da linha. enfim, é só programar mesmo.
Logged

SC, Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 6
KISS! Keep it simple, Stupid!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

"while reading a button press" o que é a preguiça, estava justamente ali... Bem, desculpe quanto a isso!

Pois, quanto ao LCD, o César Osaka do LAB de Garagem me sugeriu isso:
Code:
  lcd.setCursor(0, 1);
  if (distancia < 100)
    lcd.print(" ");
  if (distancia < 10)
    lcd.print(" ");
  lcd.print(distancia);

Que também acabou não funcionando. O lcd.clear também não funfou, nem printando espaço vazio. Quanto delay, não acho que seja necessário, afinal eu usava isso quando apenas lia da serial, sem o LCD. Acabou herdando do código antigo (falar de herança em C... vixe!!, haha)

No mais, obrigado pela ajuda!

Abraço
Logged

KISS! Keep it simple, Stupid!

SC, Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 6
KISS! Keep it simple, Stupid!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

RESOLVIDO -

Em relação ao botão, o Cesar Osaka do LDG (Lab de Garagem) mostrou que meu circuito estava errado, eu estava fazendo o curto do botão do lado errado. Enfim, erro de iniciante. Este foi o layout que usei para que o BugBot respondesse corretamente:



Quanto ao LCD, o seguinte código, de autoria do Cesar Osaka, ajudou:

lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(distancia);

E na simulação pelo Simulino:



Para quem não conhece, o Simulino é uma ferramente para simulação de Arduino dentro do ambiente Proteus, desenvolvido aí pelo Cesar.

Obrigado a todos!
Logged

KISS! Keep it simple, Stupid!

Pages: [1]   Go Up
Jump to: