collapse

* Posts Recentes

Potênciometro 4.7 ou 5 KOhm com switch por Hugu
[Hoje às 00:02]


é preciso ter cuidado com ESD? por Hugu
[Ontem às 18:50]


Valores de alcance de ponta de prova por vasco
[Ontem às 14:28]


Como reproteger as pontas de cobre do ferros de soldar? por vasco
[16 de Dezembro de 2018, 18:53]


Bibliotecas para arduino e drivers de stepper - o problema da 'distracção' por SerraCabo
[14 de Dezembro de 2018, 12:12]


Zener BZW04-105? por brunus
[11 de Dezembro de 2018, 17:34]


Artigo 11, 13 e os restantes por jm_araujo
[10 de Dezembro de 2018, 11:05]


Compra Colectiva Mouser N3-2018 (limite 25 Nov) por Hugu
[10 de Dezembro de 2018, 01:07]


Ajuda para reparar Luzes de LED de Natal por brunus
[09 de Dezembro de 2018, 00:59]


Usar steppers de 5 pontas como se fossem de 4 pontas por SerraCabo
[08 de Dezembro de 2018, 21:18]

Autor Tópico: Dúvida lógica para controle de pinos.  (Lida 1066 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Mardune

  • Mini Robot
  • *
  • Mensagens: 3
Dúvida lógica para controle de pinos.
« em: 06 de Maio de 2011, 16:04 »
Boa tarde a todos,

Estou fazendo um código para um sumô de robô e estou com problemas em fazer determinadas ações:

1 - quero que o robô vá para frente ate que o sensor de linha frente passe para o estado HIGH;

2 - Quando ele ficar em HIGH, deverá desligar o motorFrente ligar o motorTras;

3 - Quando o sensor de linha tras passe para o estado HIGH, deverá fazer a função 1.

Obs: Consigo fazer que ele faça somente usando o sensor de linha frente, nao consigo fazer com os dois sensores. Agradeço a ajuda de todos.

Segue código:


int SIN__F_0   = 0;
int SIN__T_1   = 1;
int M____F_6   = 6;
int M____T_7   = 7;

void setup ()
{
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

  pararMotores(); 

  delay(1000); //TEMPO PARA O INICIO DA LUTA

  digitalWrite(M____T_7, HIGH);      // da um tombo para tras
  delay(1000);
  pararMotores();

}                                 //fim void setup


void loop()

{

  SIN__F_0   = digitalRead(SIN__F_0);
  SIN__T_1   = digitalRead(SIN__T_1);   

  if ((SIN__F_0 == LOW) && (SIN__T_1 == LOW))
  {
      motorFrente();
      //delay(1000);
  }
   
   else if ((SIN__F_0 == HIGH) && (SIN__T_1 == LOW))
   {
      //pararMotores();
      //delay(1000);
      motorTras();
      //delay(1000);   
   }
    else //if ((SIN__F_0 == LOW) && (SIN__T_1 == LOW))
    {
        //pararMotores;
       motorFrente();
    }  //delay(5000);

}

void pararMotores() {
  digitalWrite(M____T_7, LOW);
  digitalWrite(M____F_6, LOW);     
}

void motorFrente() {
  digitalWrite(M____T_7, LOW);
  digitalWrite(M____F_6, HIGH);
}

void motorTras()  {
  digitalWrite(M____T_7, HIGH);
  digitalWrite(M____F_6, LOW);
}   
« Última modificação: 15 de Janeiro de 2012, 16:43 por Psycop »

Offline CBX

  • Mini Robot
  • *
  • Mensagens: 1.315
Re: Dúvida lógica para controle de pinos.
« Responder #1 em: 06 de Maio de 2011, 18:05 »
os pinos 0 e 1 são de comunicação, é melhor trocares para não haver conflitos...

qual ou quais os sensores que estas a usar?

Offline Mardune

  • Mini Robot
  • *
  • Mensagens: 3
Re: Dúvida lógica para controle de pinos.
« Responder #2 em: 06 de Maio de 2011, 18:50 »
Estou a usar sensores do tipo IR, eles enviam nivel alto para as portas... vou mudar as portas agora no código...
Posso te add no msn?

Obrigado.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.586
  • Helpdesk do sitio
Re: Dúvida lógica para controle de pinos.
« Responder #3 em: 06 de Maio de 2011, 21:35 »
E provavelmente aconselho a mudar os && para &, o & é bitwise e o && penso que seja lógico, o que dá valores diferentes, e estas 4 variaveis podem ser char's, porque usar int's é um desperdicio de memória nesta aplicação.

Código: [Seleccione]
int SIN__F_0   = 0;
int SIN__T_1   = 1;
int M____F_6   = 6;
int M____T_7   = 7;

Então o SIN__F_0 inicialmente é 0 e o SIN__T_1 é 1, logo na primeira vez o código le que estão os dois sensores a 0, o que acontece?
Acontece que nunca mais lês o pino 1, e quando leres 1 vais só ler o pino 1, aconselho a usar #define para declares pinos que são usados em digital Reads e Writes para poupar RAM e usar variaveis para os resultados das leituras e assim.
Código: [Seleccione]
SIN__F_0   = digitalRead(SIN__F_0);
  SIN__T_1   = digitalRead(SIN__T_1);   
« Última modificação: 06 de Maio de 2011, 21:38 por senso »
Avr fanboy