LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: dio123 em 21 de Agosto de 2022, 15:33
-
Boa tarde,
No mpu6050 estou a calcular a inclinação roll e pitch e obter os resultados em graus.
Só que agora reparei que por exemplo se os valores forem positivos funciona bem. Se for negativo ( tipo -1) detecta logo e não devia.
Porque ao definir set_titl = 10 , queria que a minha margem fosse -10 negativos até 10 graus positivos fora disso é lançar um alarme.
com um if estou a ver que não vai.
if ((pitch> set_titl) || (roll> set_titl) && (ignition_state == ignition_OFF) ){
printf("movimento detectado\r\n");
}
-
Partilha a definição das variáveis (roll, pitch e set_titl) e já agora qual a plataforma que estás a usar, se dispara com -1, parece-me que deve haver aí um conflito de signed/unsigned
-
Mete um ABS, e o teu if fica assim:
if ((abs(pitch)> set_titl) || (abs(roll)> set_titl) && (ignition_state == ignition_OFF) ){
printf("movimento detectado\r\n");
}
Se calhar tambem deves querer utilizar >= e não >, talvez.
E concordo com o jm_araujo, cheira-me a confusão de signed e unsigneds.
-
boa tarde,
Todas as variáveis estão como signed int, no entanto com o abs(pitch) e abs(roll )no if, mais uns ajuste no codigo ficou a funcionar bem.
set_titl=20 só "dispara" se estiver depois do intervalo -20 a +20.
obrigado pela ajuda
-
Olá 🙂
Era fixe nós sabermos aonde vais aplicar !!
-
É para um alarme gsm para o carro, nesta questão era o sensor inclinação que ao armar o alarme gravo a inclinação frontal e lateral depois a diferença entre o guardado e o atual tem de ser inferior ao definido set_titl.
-
Por curiosidade testei o MPU com servos fez todos os movimentos mas nunca consegui que numa posição estável os servos ficassem imóveis .
Talvez por serem servos digitais
https://youtube.com/shorts/_GAGvEsw4jo?feature=share