collapse

* Links de Robótica

* Posts Recentes

URGENTE - display de 7 segmentos com backpack por helderjsd
[Hoje às 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[Ontem às 10:20]


Palavras Cruzadas por Njay
[Ontem às 02:24]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


Apresentação por TigPT
[17 de Setembro de 2017, 07:31]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]


Preparar bancada de testes por jm_araujo
[14 de Setembro de 2017, 10:24]


Mitos: mudança da ilumação tradicional p/ iluminação a LEDs? por LVirtual
[14 de Setembro de 2017, 07:46]

Autor Tópico: Sensor + Servo  (Lida 2377 vezes)

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

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Sensor + Servo
« em: 01 de Junho de 2010, 23:07 »
boas pessoal eu fiz este codigo para um mini projecto que estou a desenvolver...

Código: [Seleccione]

const int servo = 11;
const int sensor = 5;
const int x = 100;
int angulo;
int valor;

void setup () {
  pinMode(servo, OUTPUT);
  pinMode(sensor, INPUT);
  Serial.begin(9600);
 
}

void movimento(int servo, int angulo) {
 
  valor = (angulo * 10) + 600;
  digitalWrite(servo, HIGH);
  delayMicroseconds(valor);
  digitalWrite(servo, LOW);
}

void loop () {
  int analogValue = analogRead(sensor);
  if (analogValue > x) {
      for (angulo=10; angulo<=170; angulo++)
  {
    movimento(servo, angulo);
    delay(5);
  }
  for (angulo=170; angulo>=10; angulo--)
  {
    movimento(servo, angulo);
  }
  }
  else {
  digitalWrite(servo, LOW);
  }
 
  Serial.println(analogValue, DEC);
 

   
 
 

Resumidamente no código está

Se o sensor detectar algo aciona o servo dos 10 aos 170º e volta dos 170º ao 10º e depois espera outra leitura do sensor

O que é gostava de saber é como posso fazer com que o servo so possa ser acionado uma vês, mesmo que o sensor detecte alguma coisa. basicamente o que eu quero é para o loop ate voltar a clicar num botao...  :)

Quem poder ajudar ficaria agradecido  ;D

Offline Arknum

  • Mini Robot
  • *
  • Mensagens: 84
Re: Sensor + Servo
« Responder #1 em: 01 de Junho de 2010, 23:41 »
Não sei se é isto que queres, e a minha programação não é das melhores mas acho que assim funciona

Código: [Seleccione]
void loop () {
 int analogValue = analogRead(sensor);
  if (analogValue > x && input(PIN_x)=1{ \\assim só entra se o valor do sensor for maior que x e se pressionares o botão
   
for (angulo=10; angulo<=170; angulo++)  {
    movimento(servo, angulo);
    delay(5);  }  for (angulo=170; angulo>=10; angulo--)  {
    movimento(servo, angulo);
  } 

else {
  digitalWrite(servo, LOW); 
}   
Serial.println(analogValue, DEC); 
}


Espero ter dado alguma ajuda
Visitem os Açores vale a pena.

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Sensor + Servo
« Responder #2 em: 02 de Junho de 2010, 00:10 »
E a função input() está declarada onde? E estás a fazer uma atribuição dentro do if(), o que não faz sentido...

ATENÇÂO: Corrigi apenas erros de sintaxe, não faço ideia se isto vai funcionar ou nao...

Código: [Seleccione]
void loop () {
  int analogValue = analogRead(sensor);
  if (analogValue > x && digitalRead(PIN_x) == HIGH){ // Assumindo que quando pressionas o botao, ele faz o PIN_x ir a HIGH
   
    for (angulo=10; angulo<=170; angulo++)  {
      movimento(servo, angulo);
      delay(5);  }  for (angulo=170; angulo>=10; angulo--)  {
      movimento(servo, angulo);
    }
  } else {
    digitalWrite(servo, LOW);
  }   
  Serial.println(analogValue, DEC);
}

Agora, para aquilo que queres... Basta teres uma variável que define se queres fazer o varrimento do Servo ou não...
Vê lá se consegues perceber pelo código...

Citar

const int servo = 11;
const int sensor = 5;
const int butPin = 10;
const int x = 100;
int angulo;
int valor;

boolean enableServo = true;

void setup () {
  pinMode(servo, OUTPUT);
  pinMode(sensor, INPUT);
  pinMode(butPin, INPUT);
  Serial.begin(9600);
 
}

void movimento(int servo, int angulo) {
 
  valor = (angulo * 10) + 600;
  digitalWrite(servo, HIGH);
  delayMicroseconds(valor);
  digitalWrite(servo, LOW);
}

void loop () {
  if(enableServo){ // Se o servo tiver luz verde para rodar...
    // ... vamos ler o sensor e etc...
    int analogValue = analogRead(sensor);
    if (analogValue > x) {
      for (angulo=10; angulo<=170; angulo++)
      {
        movimento(servo, angulo);
        delay(5);
      }
      for (angulo=170; angulo>=10; angulo--)
      {
        movimento(servo, angulo);
      }
    } else {
      digitalWrite(servo, LOW);
    }
    Serial.println(analogValue, DEC);
    
    // IMPORTANTE > Passar esta variável a falso
    // Assim, no próximo ciclo, já não vai ler o sensor
    enableServo = false;
  }else{
    // Se o servo tiver luz vermelha, vai observar um botão
    if(digitalRead(butPin) == HIGH) enableServo = true;
  }
}

Offline RicardoSantos

  • Mini Robot
  • *
  • Mensagens: 65
Re: Sensor + Servo
« Responder #3 em: 02 de Junho de 2010, 00:50 »
Faltam uns ( )

Código: [Seleccione]
  if (analogValue > x && (digitalRead(PIN_x) == HIGH)){ // Assumindo que quando pressionas o botao, ele faz o PIN_x ir a HIGH
 

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Sensor + Servo
« Responder #4 em: 02 de Junho de 2010, 13:59 »
Faltam uns ( )

Código: [Seleccione]
  if (analogValue > x && (digitalRead(PIN_x) == HIGH)){ // Assumindo que quando pressionas o botao, ele faz o PIN_x ir a HIGH
 

Desculpa lá, mas não faltam...
Código: [Seleccione]
  if (analogValue > x && digitalRead(PIN_x) == HIGH){ // Assumindo que quando pressionas o botao, ele faz o PIN_x ir a HIGH
 
Isto tem tudo para funcionar... Podes pôr os (), mas não são necessários.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.389
  • Helpdesk do sitio
Re: Sensor + Servo
« Responder #5 em: 02 de Junho de 2010, 14:28 »
Cuidados com as predecências das funções, que podem dar chatices..
Código: [Seleccione]
if ((analogValue > x) && (digitalRead(PIN_x) == HIGH)){ // Assumindo que quando pressionas o botao, ele faz o PIN_x ir a HIGH
 

Eu faria assim para não existirem duvidas nem problemas.
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Sensor + Servo
« Responder #6 em: 02 de Junho de 2010, 14:49 »
Tenho a ideia que as prioridades são iguais às do Processing, por ordem decrescente:
// Multiplicative: * / %
// Additive: + -
// Relational: < > <= >=
// Equality: == !=
// Logical AND: &&
// Logical OR: ||
// Assignment: = += -= *= /= %=

Logo, nao precisas dos parênteses, mas se ficam mais seguros com eles, tudo bem...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.389
  • Helpdesk do sitio
Re: Sensor + Servo
« Responder #7 em: 02 de Junho de 2010, 14:50 »
É uma questão de hábito e se não fazem nada o gcc trata de os mandar para o lixo não é por eles que o programa cresce.
Avr fanboy

Offline RicardoSantos

  • Mini Robot
  • *
  • Mensagens: 65
Re: Sensor + Servo
« Responder #8 em: 02 de Junho de 2010, 16:19 »
Pois realmente tens razão :-[ Peço desculpa  :-\

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Sensor + Servo
« Responder #9 em: 02 de Junho de 2010, 19:37 »
Obrigado a todos...

Microbyte, era mesmo isso, não me tava a lembrar dos boolean...  ;)