collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: ServoTimer2 ??? isto não cheira bem...  (Lida 8586 vezes)

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

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
ServoTimer2 ??? isto não cheira bem...
« 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...
« Última modificação: 02 de Abril de 2009, 21:33 por little resources »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Ajuda com Mstimer2.h :S
« Responder #1 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.
« Última modificação: 10 de Março de 2009, 23:12 por metRo_ »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Ajuda com Mstimer2.h :S
« Responder #2 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.
« Última modificação: 10 de Março de 2009, 23:17 por metRo_ »

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com Mstimer2.h :S
« Responder #3 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..



Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:Ajuda com Mstimer2.h :S
« Responder #4 em: 10 de Março de 2009, 23:17 »
já corrigi os meus post's para não ficarem com informação errada!

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com Mstimer2.h :S
« Responder #5 em: 10 de Março de 2009, 23:22 »
assim sendo o meu post anterior fica sem efeito, mas fica aí na mesma.. :)

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Ajuda com Mstimer2.h :S
« Responder #6 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
Tr3s
Daniel Gonçalves

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com Mstimer2.h :S
« Responder #7 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..

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Ajuda com Mstimer2.h :S
« Responder #8 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
Tr3s
Daniel Gonçalves

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com programação :)
« Responder #9 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)

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com programação :)
« Responder #10 em: 23 de Março de 2009, 20:01 »
o k é k era suposto isso fazer?

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com programação :)
« Responder #11 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?  ::)

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com programação :)
« Responder #12 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
}

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:Ajuda com programação :)
« Responder #13 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..

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:Ajuda com programação :)
« Responder #14 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);
« Última modificação: 02 de Abril de 2009, 11:51 por TigPT »