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
-
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...
-
O problema é o seguinte:
tu aqui:
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.
-
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();
void loop(){
while(digitalRead(irx));
Serial.println("Ó amigo sái da estrada! Lingua");
digitalWrite(Ledpin, HIGH);
}
}
o código de cima assum que só Serial.println("Ó amigo sái da estrada! Lingua");
está dentro do while, logo o 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:
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.
-
:) 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..
-
já corrigi os meus post's para não ficarem com informação errada!
-
assim sendo o meu post anterior fica sem efeito, mas fica aí na mesma.. :)
-
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
-
no ultimo já não tem, mas sim, tens toda a razão, n tinha reparado nisso..
-
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
-
??? servo de rotação continua a controlar a direcção?? n tou a ver.. (nem olhei pró código)
-
o k é k era suposto isso fazer?
-
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? ::)
-
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
}
-
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..
-
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
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);
-
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...
-
Obrigado por partilhares, pode dar jeito ;)
-
estou a usar a biblioteca servotimer2 para controlar 4 servos e até ai td bem, agora quando junto a nunchuk dá isto :
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.
-
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