collapse

* Posts Recentes

strobe lights por Hugu
[Hoje às 00:27]


Esquema electrico de uma tv-box android? por Hugu
[Ontem às 19:58]


Silkscreen com efeitos natalícios p/ Eaglecad? por Hugu
[Ontem às 17:53]


Circuito de proteção para ferro de soldar. por vasco
[Ontem às 15:27]


Caixa de música por Hugu
[16 de Novembro de 2019, 20:26]


Robot Extreme - Lisboa Games Week 2019 por guilhermexbot
[15 de Outubro de 2019, 15:21]


tecnologias web para servidor num MCU por jm_araujo
[09 de Outubro de 2019, 14:47]


Limitador de corrente simples por jm_araujo
[08 de Outubro de 2019, 10:29]


Assemblagem de PCBs - JLCPCB por jm_araujo
[06 de Outubro de 2019, 13:46]


"Arduino vs PIC" por jm_araujo
[06 de Outubro de 2019, 13:42]

Autor Tópico: Ajuda a programar arduino  (Lida 5166 vezes)

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

Offline The Wolfman

  • Mini Robot
  • *
  • Mensagens: 60
Re: Ajuda a programar arduino
« Responder #15 em: 04 de Maio de 2010, 23:53 »
Bem, por hoje fico assim. Amanhã vou testar :D
Código: [Seleccione]
int duration_frt;                         
int distance_frt;                         
int srf_frt = 4;

int duration_esq;
int distance_esq;
int srf_esq = 5;

int duration_dir;
int distance_dir;
int srf_dir = 6;

int ldr = 0;
int valor_ldr = 5;
int led_ldr = 13;

int motor_esq[] = {2, 3};
int motor_dir[] = {7,8};
int i;

int led_vitima = 12;

void setup(){
Serial.begin(9600);

for(i = 0; i < 2; i++){
  pinMode(motor_esq[i], OUTPUT);
  pinMode(motor_dir[i], OUTPUT);
}

}

void loop(){
  pinMode(srf_frt, OUTPUT);
  digitalWrite(srf_frt, LOW);         
  delayMicroseconds(2);
  digitalWrite(srf_frt, HIGH);         
  delayMicroseconds(10);
  digitalWrite(srf_frt, LOW);           
  pinMode(srf_frt, INPUT);
  duration_frt = pulseIn(srf_frt, HIGH);   
  distance_frt = duration_frt/58;

  pinMode(srf_esq, OUTPUT);
  digitalWrite(srf_esq, LOW);
  delayMicroseconds(2);
  digitalWrite(srf_esq, HIGH);
  delayMicroseconds(10);
  digitalWrite(srf_esq, LOW);
  pinMode(srf_esq, INPUT);
  duration_esq = pulseIn(srf_esq, HIGH);
  distance_esq = duration_esq/58;

  pinMode(srf_dir, OUTPUT);
  digitalWrite(srf_dir, LOW);
  delayMicroseconds(2);
  digitalWrite(srf_dir, HIGH);
  delayMicroseconds(10);
  digitalWrite(srf_dir, LOW);
  pinMode(srf_dir, INPUT);
  duration_dir = pulseIn(srf_dir, HIGH);
  distance_dir = duration_dir/58;

  digitalWrite(motor_esq[0], HIGH); 
  digitalWrite(motor_esq[1], LOW);
 
  digitalWrite(motor_dir[0], HIGH);
  digitalWrite(motor_dir[1], LOW);
 
  ldr = analogRead(valor_ldr);
  digitalWrite(led_ldr, HIGH);
  digitalWrite(led_vitima, LOW);
 
  if (ldr > 500)
{
  pinMode(led_vitima, OUTPUT);
  digitalWrite(led_vitima, HIGH); 
}

  if (distance_frt <= 4)
{
  digitalWrite(motor_esq[0], LOW);
  digitalWrite(motor_esq[1], LOW);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], LOW);
 
  delay(1000);
 
  digitalWrite(motor_esq[0], LOW); 
  digitalWrite(motor_esq[1], HIGH);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], HIGH);

  delay(1000);

  digitalWrite(motor_esq[0], LOW);
  digitalWrite(motor_esq[1], HIGH);
 
  digitalWrite(motor_dir[0], HIGH);
  digitalWrite(motor_dir[1], LOW);

  delay(1000);
}

  if (distance_frt && distance_esq <= 4)       

  digitalWrite(motor_esq[0], LOW);
  digitalWrite(motor_esq[1], LOW);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], LOW);
 
  delay(1000);
 
  digitalWrite(motor_esq[0], LOW); 
  digitalWrite(motor_esq[1], HIGH);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], HIGH);

  delay(1000);
 
  digitalWrite(motor_esq[0], HIGH);
  digitalWrite(motor_esq[1], LOW);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], HIGH);

  delay(1000);
}

  if (distance_frt && distance_dir <= 4)

  digitalWrite(motor_esq[0], LOW);
  digitalWrite(motor_esq[1], LOW);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], LOW);
 
  delay(1000);
 
  digitalWrite(motor_esq[0], LOW); 
  digitalWrite(motor_esq[1], HIGH);
 
  digitalWrite(motor_dir[0], LOW);
  digitalWrite(motor_dir[1], HIGH);

  delay(1000);
 
  digitalWrite(motor_esq[0], LOW);
  digitalWrite(motor_esq[1], HIGH);
 
  digitalWrite(motor_dir[0], HIGH);
  digitalWrite(motor_dir[1], LOW);

  delay(1000);
}
 
  Serial.println(distance_frt);
 
  delay(100);                           
}

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.348
    • Tiago Rodrigues
Re: Ajuda a programar arduino
« Responder #16 em: 11 de Maio de 2010, 19:40 »
Como o é que o projecto ficou?

Fotos da versão final para o pessoal e um pequeno resumo do que aprenderam!? ;D

Offline The Wolfman

  • Mini Robot
  • *
  • Mensagens: 60
Re: Ajuda a programar arduino
« Responder #17 em: 11 de Maio de 2010, 21:16 »
Sim, eu não me esqueci ;)

Eu tratei da programação ao inicio, mas um colega meu depois começou a inventar (pelo que vi dos testes dele, já misturava whiles dentro de if's) LOOL!

O que interessa é que tendo em conta os nossos contratempos, conseguimos meter o motor a funcionar.

Contratempos esses:
-2 Reguladores 7805 queimados;
-2 Pontes H SN754410NE;
-1 Picaxe 28X1;
-1 pololu TB66FNG12 (ainda estou para descobrir como aquilo se queimou --');
-1 Mini metal gearmotor 100:1 com as engrenagens rebentadas;
-Uma carrada de LED's queimados;

Especialmente devido a contratempos como ter de estar a trocar de chassis de um dia para o outro, não vou postar aqui ainda o código, visto que não está ainda tudo funcional :s

De qualquer maneira, o meu trabalho foi dos 3 melhores da escola!!!

Um amigo meu vai-me passar as fotografias TODAS do desenvolvimento do projecto e eu depois posto :D

Queria deixar aqui um agradecimento especial ao TigPT e ao Fifas porque são uns bacanos e a ajuda deles foi muito preciosa, sem a ajuda destas duas pessoas, não conseguiríamos alcançar os nossos objectivos!