LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: Mardune em 06 de Maio de 2011, 16:04
-
Boa tarde a todos,
Estou fazendo um código para um sumô de robô e estou com problemas em fazer determinadas ações:
1 - quero que o robô vá para frente ate que o sensor de linha frente passe para o estado HIGH;
2 - Quando ele ficar em HIGH, deverá desligar o motorFrente ligar o motorTras;
3 - Quando o sensor de linha tras passe para o estado HIGH, deverá fazer a função 1.
Obs: Consigo fazer que ele faça somente usando o sensor de linha frente, nao consigo fazer com os dois sensores. Agradeço a ajuda de todos.
Segue código:
int SIN__F_0 = 0;
int SIN__T_1 = 1;
int M____F_6 = 6;
int M____T_7 = 7;
void setup ()
{
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pararMotores();
delay(1000); //TEMPO PARA O INICIO DA LUTA
digitalWrite(M____T_7, HIGH); // da um tombo para tras
delay(1000);
pararMotores();
} //fim void setup
void loop()
{
SIN__F_0 = digitalRead(SIN__F_0);
SIN__T_1 = digitalRead(SIN__T_1);
if ((SIN__F_0 == LOW) && (SIN__T_1 == LOW))
{
motorFrente();
//delay(1000);
}
else if ((SIN__F_0 == HIGH) && (SIN__T_1 == LOW))
{
//pararMotores();
//delay(1000);
motorTras();
//delay(1000);
}
else //if ((SIN__F_0 == LOW) && (SIN__T_1 == LOW))
{
//pararMotores;
motorFrente();
} //delay(5000);
}
void pararMotores() {
digitalWrite(M____T_7, LOW);
digitalWrite(M____F_6, LOW);
}
void motorFrente() {
digitalWrite(M____T_7, LOW);
digitalWrite(M____F_6, HIGH);
}
void motorTras() {
digitalWrite(M____T_7, HIGH);
digitalWrite(M____F_6, LOW);
}
-
os pinos 0 e 1 são de comunicação, é melhor trocares para não haver conflitos...
qual ou quais os sensores que estas a usar?
-
Estou a usar sensores do tipo IR, eles enviam nivel alto para as portas... vou mudar as portas agora no código...
Posso te add no msn?
Obrigado.
-
E provavelmente aconselho a mudar os && para &, o & é bitwise e o && penso que seja lógico, o que dá valores diferentes, e estas 4 variaveis podem ser char's, porque usar int's é um desperdicio de memória nesta aplicação.
int SIN__F_0 = 0;
int SIN__T_1 = 1;
int M____F_6 = 6;
int M____T_7 = 7;
Então o SIN__F_0 inicialmente é 0 e o SIN__T_1 é 1, logo na primeira vez o código le que estão os dois sensores a 0, o que acontece?
Acontece que nunca mais lês o pino 1, e quando leres 1 vais só ler o pino 1, aconselho a usar #define para declares pinos que são usados em digital Reads e Writes para poupar RAM e usar variaveis para os resultados das leituras e assim.
SIN__F_0 = digitalRead(SIN__F_0);
SIN__T_1 = digitalRead(SIN__T_1);