LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: amando96 em 10 de Março de 2009, 21:23

Título: ServoTimer2 ??? isto não cheira bem...
Enviado por: amando96 em 10 de Março de 2009, 21:23
bem instalei a biblioteca servotimer2, e quando estou a upload para o  I/O board diz-me isto:

hardware\libraries\ServoTimer2\ServoTimer2.o: In function `__vector_9':


D:\got\Arduino\Arduino-0012/hardware\libraries\ServoTimer2/ServoTimer2.cpp:24: multiple definition of `__vector_9'


hardware\libraries\MsTimer2\MsTimer2.o:C:\Users\Amando xD\Documents\Arduino\arduino-0015-win\arduino-0015/hardware\libraries\MsTimer2/MsTimer2.cpp:145: first defined here


Couldn't determine program size: C:\Users\Amando xD\Documents\Arduino\arduino-0015-win\arduino-0015\hardware/tools/avr/bin/avr-size: 'C:\Users\Amando xD\Documents\Arduino\arduino-0015-win\arduino-0015\examples\Digital\Button\applet\Button.hex': No such file


avrdude: can't open input file C:\Users\Amando xD\Documents\Arduino\arduino-0015-win\arduino-0015\examples\Digital\Button\applet\Button.hex: No such file or directory
avrdude: write to file 'C:\Users\Amando xD\Documents\Arduino\arduino-0015-win\arduino-0015\examples\Digital\Button\applet\Button.hex' failed



ppfffr o que é que isto significa??? preciso mesmo desta biblioteca...
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: metRo_ em 10 de Março de 2009, 22:32
O problema é o seguinte:

tu aqui:
Código: [Seleccione]
void loop(){
  while(digitalRead(irx));   
  Serial.println("Ó amigo sái da estrada! Lingua");
  digitalWrite(Ledpin, HIGH);
}

Escreves a frase uma vez, correcto. O que se passa com o led é que está fora do while e como está dentro do loop vai estar sempre ligado.
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: metRo_ em 10 de Março de 2009, 22:49
Não sei se percebes-te muito bem o que fizes-te por isso vou tentar explicar. Eu prefiro organizar o código de outra maneira e então quando uso if e while por exemplo ponho tudo dentro {} para saber o que pertence a quê até porque se não colocares as {} ele só assume unicamente a linha seguinte como estando dentro do while();

Código: [Seleccione]
void loop(){
  while(digitalRead(irx));   
  Serial.println("Ó amigo sái da estrada! Lingua");
  digitalWrite(Ledpin, HIGH);
}
}

o código de cima assum que só
Código: [Seleccione]
Serial.println("Ó amigo sái da estrada! Lingua"); está dentro do while, logo o
Código: [Seleccione]
digitalWrite(Ledpin, HIGH); está fora por isso está sempre ligado.

Assim se colocares as {} ele vai executar todas as acções que está dentro delas:

Código: [Seleccione]
void loop(){
  while(digitalRead(irx)){   
   Serial.println("Ó amigo sái da estrada! Lingua");
   digitalWrite(Ledpin, HIGH);
  }
}

Então agora bastava colocar digitalWrite(Ledpin, LOW); para ele desligar.
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: ricardo-reis em 10 de Março de 2009, 22:55
:) n é por uma questão de preferencia, metro..

é só pk, se n abrires a chaveta (e consequentemente a fechares), os compiladores assumem unicamente a linha seguinte como fazendo parte da condição.

ou seja, neste primeiro exemplo, se a condição fosse respeitada, iria ser impresso x, y e z (em cada linha), caso contrário n escrevia nenhum deles:

if(condição){
  println("x");
  println("y");
  println("z");
}

se n usasses a chaveta e imaginando que a condição era respeitada, iria escrever todos, se a condição n fosse respeitada passaria a escrever só os dois ultimos, pk o compilador assume apenas o primeiro (o x) como resultado da condição..


Título: Re:Ajuda com Mstimer2.h :S
Enviado por: metRo_ em 10 de Março de 2009, 23:17
já corrigi os meus post's para não ficarem com informação errada!
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: ricardo-reis em 10 de Março de 2009, 23:22
assim sendo o meu post anterior fica sem efeito, mas fica aí na mesma.. :)
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: tr3s em 11 de Março de 2009, 16:04
Atenção que o While tem um ; à frente e portanto mesmo que a condição seja verdadeira ele ignora a proxima linha de código, isto é, enquanto a condição do While for verdadeira não faz mais nada! :D
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: ricardo-reis em 11 de Março de 2009, 16:08
no ultimo já não tem, mas sim, tens toda a razão, n tinha reparado nisso..
Título: Re:Ajuda com Mstimer2.h :S
Enviado por: tr3s em 11 de Março de 2009, 16:17
no ultimo já não tem, mas sim, tens toda a razão, n tinha reparado nisso..

Pois certo certo! Mas queria referir-me ao meu código  :D
Título: Re:Ajuda com programação :)
Enviado por: ricardo-reis em 22 de Março de 2009, 03:32
??? servo de rotação continua a controlar a direcção?? n tou a ver.. (nem olhei pró código)
Título: Re:Ajuda com programação :)
Enviado por: ricardo-reis em 23 de Março de 2009, 20:01
o k é k era suposto isso fazer?
Título: Re:Ajuda com programação :)
Enviado por: ricardo-reis em 23 de Março de 2009, 20:39
e que tal dar atenção ao k no outro dia eu mais uns quantos te explicámos sobre chavetas e condições ou ciclos?  ::)
Título: Re:Ajuda com programação :)
Enviado por: ricardo-reis em 01 de Abril de 2009, 14:32
os leds andam sp com uma resistencia às costas, lembra-te disso.. :)

vou-te fazer um pseudocodigo do que tu queres, o mais simples que me é possível:

condições para os movimentos:

if ( !botão_ligado ){
    anda_pra_frente;
}
else {
    anda_pra_tras;
    vira_a_direita;
}


funções citadas:

void anda_pra_frente(){
    // aqui pões o código que usas para andar pá frente
}
void anda_pa_tras(){
    // aqui pões o código que usas para andar pa trás
    delay(2000);
}
void vira_a_direita(){
    // aqui pões o código que usas para virar à direita
}
Título: Re:Ajuda com programação :)
Enviado por: ricardo-reis em 01 de Abril de 2009, 14:40
se reparares na minha resposta, na função de andar pa trás tens um delay, o k faz com k ele ande o tempo que predefines no delay pa trás.. pra virar à direita vês o tempo k ele demora a virar o necessário e podes fazer o mesmo que na função de andar pa trás..
Título: Re:Ajuda com programação :)
Enviado por: amando96 em 01 de Abril de 2009, 21:52
se reparares na minha resposta, na função de andar pa trás tens um delay, o k faz com k ele ande o tempo que predefines no delay pa trás.. pra virar à direita vês o tempo k ele demora a virar o necessário e podes fazer o mesmo que na função de andar pa trás..
obrigadíssimo! eu pensei que o delay fosse so para não overload o sitema...

bem chegei a isso :D

Código: [Seleccione]
for(pos = 0; pos>=0; pos-=1)     
myservo.write(pos);             
for(pos = 180; pos>=180; pos-=1)     
myservo2.write(pos);             
delay(500);
for(pos = 180; pos>=180; pos-=1)     
myservo.write(pos);             
for(pos = 180; pos>=180; pos-=1)     
myservo2.write(pos);
delay(1500);
Título: Re:ServoTimer2 ??? isto não cheira bem...
Enviado por: amando96 em 02 de Abril de 2009, 22:15
never mind lol xD encontrei uma biblioteca que dá para controlar 12 servos com o duemillanove, e 45 com o arduino mega!!!

http://www.arduino.cc/playground/Code/MegaServo (http://www.arduino.cc/playground/Code/MegaServo)

para quem quiser dar uma vista de olhos, e n consegui instalar o servotimer2... n sei porque... esta foi logo...
Título: Re:ServoTimer2 ??? isto não cheira bem...
Enviado por: TigPT em 02 de Abril de 2009, 23:39
Obrigado por partilhares, pode dar jeito ;)
Título: ServoTimer2 briga com wire?
Enviado por: silva_p em 12 de Abril de 2009, 22:46
estou a usar a biblioteca servotimer2 para controlar 4 servos e até ai td bem, agora quando junto a nunchuk dá isto :
Código: [Seleccione]
hardware\libraries\Wire/Wire.h: In function 'void loop()':


hardware\libraries\Wire/Wire.h:30: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t* loop()::TwoWire::rxBuffer'


hardware\libraries\Wire/Wire.h:31: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::rxBufferIndex'


hardware\libraries\Wire/Wire.h:32: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::rxBufferLength'


hardware\libraries\Wire/Wire.h:34: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::txAddress'


hardware\libraries\Wire/Wire.h:35: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t* loop()::TwoWire::txBuffer'


hardware\libraries\Wire/Wire.h:36: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::txBufferIndex'


hardware\libraries\Wire/Wire.h:37: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::txBufferLength'


hardware\libraries\Wire/Wire.h:39: error: local class 'class loop()::TwoWire' shall not have static data member 'uint8_t loop()::TwoWire::transmitting'


hardware\libraries\Wire/Wire.h:40: error: local class 'class loop()::TwoWire' shall not have static data member 'void (* loop()::TwoWire::user_onRequest)()'


hardware\libraries\Wire/Wire.h:41: error: local class 'class loop()::TwoWire' shall not have static data member 'void (* loop()::TwoWire::user_onReceive)(int)'

isot é acerca da biblioteca wire.h que é usada para lar os dados da nunchuk, será que as duas bibliotecas são incompativeis? a servotimer2 e a wire?
pk em separado ambas funcionam bem.
Título: Re:ServoTimer2 ??? isto não cheira bem...
Enviado por: amando96 em 13 de Abril de 2009, 10:16
aconselho

MegaServo, podes controlar servos em todos os pinos! e talvez seja compativel com a wire.
eu tenho por ai um link vou ver se encontro