Olá, estou com dúvida em duas coisas: Como organizo o programa, e como faço "caso o sensor identifique a linha quero que ele faça os motores funcionarem.". Mais claramente como coloco no programa do sensor que ele execute a função de fazer os motores funcionarem. Ou eu não coloco dentro do programa dos sensores?

int objeto = 0;

void setup()
{
pinMode(7, INPUT); //Pino ligado ao coletor do fototransistor
Serial.begin(9600);
}

void loop()
{
objeto = digitalRead(7);
if (objeto == 0)
{
Serial.println("Objeto : Detectado");
}
else
{
Serial.println("Objeto : Ausente !");
}
}

Exibições: 475

As respostas para este tópico estão encerradas.

Respostas a este tópico

Acho que vc está fazendo a pergunta errada. Primeiro vc tem que aprender a usar os motores, independente de seguir linha ou não vc sabe usar os motores? Se não sabe comece por aí. E o sensor? Sabe exatamente como ele funciona? Esse é o segundo passo. Uma vez que vc domina esses conhecimentos, o resto é lógica de programação.

E pra dominar a programação e a lógica envolvida só conheço um jeito: programando.

Pra dúvidas mais específicas é bem mais fácil de ajudar e tenho certeza que muitos aqui ajudariam com o maior prazer.

Abraços,

Francesco

Obrigado por responder, entendo como usar os motores e também entendo sobre os sensores, eu estava pesquisando sobre erros no meu programa e já modifiquei boa parte dele, agora já entendo um pouco mais sobre programação. O problema é que necessito desse projeto pronto em pouco tempo, então estou estudando partes especificas, não tudo sobre programação.

Nesse caso eu diria teu problema tem dois aspectos: o algoritmo e o programa. Em geral a parte complicada é o algoritmo, dúvidas sobre programação são bem mais simples de resolver.

O algoritmo depende muito do hardware disponível. Esse programa só mostra um sensor, é só com um que vc pretende seguir a linha? Até é possível, mas muito mais complicado do que se vc tivesse dois sensores, um do lado outro, assim vc teria uma indicação de direção, coisa que só com um sensor é bem mais difícil conseguir.

Com dois sensores o algoritmo seria mais simples, mas tb é comum o uso de três sensores juntos pra essa aplicação. Nesse caso o algoritmo seria também diferente.

Agora, se vc quer o projeto pronto, tenho certeza que pode achar bastante coisa pronta pesquisando no google, aliás deve ter algum material aqui no Lab de Garagem mesmo.

Eu irei usar três sensores, dois para seguir a linha e um para identificar a linha prata. Mas estou com um erro que procurei, mas não achei como resolver. É este:

sketch_apr07a:5: error: expected constructor, destructor, or type conversion before 'void'
sketch_apr07a:11: error: expected ',' or ';' before 'void'
sketch_apr07a:31: error: expected unqualified-id before '{' token
sketch_apr07a:68: error: expected unqualified-id before '{' token

E este é o meu programa, poderia indicar o que está de errado, e se há algo mais de errado? Estou usando o Arduino UNO Rev 3 e sensores TCRT5000

int motor_esq_A = 6;
int motor_esq_B = 11;
int motor_dir_A = 9;
int motor_dir_B = 10;
int fot1 = A0;
int linha = 0;
int fot2 = A1;
int fot3 = A2

void setup()

{
// Setup motores
pinMode(motor_esq_A, OUTPUT);
pinMode(motor_esq_B, OUTPUT);
pinMode(motor_dir_A, OUTPUT);
pinMode(motor_dir_B, OUTPUT);
}

void sensoresq()
{
pinMode(A0, INPUT);
Serial.begin(9600);
}
void sensordir()
{
pinMode(A1, INPUT);
Serial.begin(9600);
}
{
pinMode(A2, INPUT); //Pino ligado ao coletor do fototransistor
Serial.begin(9600);
}
void loop()
{
frente();
}

void parar()
{
digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, LOW);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, LOW);
}
void frente()
{
digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, HIGH);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, HIGH);
}
void esquerda()
{
digitalWrite(motor_esq_A, HIGH);
digitalWrite(motor_esq_B, HIGH);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, LOW);
}
void direita()
{
digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, LOW);
digitalWrite(motor_dir_A, HIGH);
digitalWrite(motor_dir_B, HIGH);
}
{
linha = digitalRead(A0);
if (linha == 0)
{
Serial.println("Linha : Detectado");
}
else
{
Serial.println("Linha : Ausente !");
}
if (linha == 0)
{
void esquerda()

digitalWrite(motor_esq_A, HIGH);
digitalWrite(motor_esq_B, HIGH);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, LOW);
}
else
{
void frente()

digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, HIGH);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, HIGH);
}
}

{
linha = digitalRead(A1);
if (linha == 0)
{
Serial.println("Linha : Detectado");
}
else
{
Serial.println("Linha : Ausente !");
}
if (linha == 0)
{
void direita()
digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, LOW);
digitalWrite(motor_dir_A, HIGH);
digitalWrite(motor_dir_B, HIGH);
}
else
{
void frente()
digitalWrite(motor_esq_A, LOW);
digitalWrite(motor_esq_B, HIGH);
digitalWrite(motor_dir_A, LOW);
digitalWrite(motor_dir_B, HIGH);
}
}
{
linha = digitalRead(A2);
if (linha == 0)
{
Serial.println("Linha : Detectado");
}
else
{
Serial.println("Linha : Ausente !");
}
}

Alguem pode me ajudar??

Oi Daniel,

Olhando o código, vi que tem vários erros nos blocos de comandos. Tem blocos que estão "perdidos no espaço" sem estar associados a nenhuma função. Por exemplo o bloco logo abaixo da função sensordir() está completamente solto no código. A mesma coisa no bloco abaixo da função direita(), todas aquelas linhas até o fim do programa estão erradas, com funções sendo declaradas dentro de bloco de comandos e o bloco em si não está associado com nenhuma função.

Uma boa maneira de evitar esse tipo de erro é fazendo a indentação correta do programa. É uma coisa simples mas essencial, sem indentação o programa fica quase que ilegível e muito sujeito a erros. Indentação são aqueles espaços colocados no início da linha, isso organiza o código e evita erros nos blocos de comandos. É muito simples de fazer. Cada vez que vc abre chaves ( { ) vc passa a por mais dois espaços em cada linha, até fechar as chaves ( } ). Assim o código fica parecendo uma escadinha e vc consegue ver bem rapidamente o que está dentro do que. Sem isso é muito difícil programar. Isso não é frescura, é essencial.

E lembre-se: não existe bloco de comandos que não esteja dentro de alguma função.

Outra coisa, não adianta fazer funções que nunca são chamadas. Pra que alguma função seja executada ela tem que ser chamada. As únicas exceções são as funções setup() e loop(), essas vc não chama diretamente, mas todas as outras precisam ser chamadas.

Mais uma dica, não adianta muito ter 3 sensores se vc não usa as medidas deles em conjunto. Se vc só considera as medidas individualmente não é diferente de ter apenas um sensor. Pra vc chegar a alguma conclusão sobre a posição do robô em relação às linhas que ele está seguindo vc precisa comparar as medidas dos 3 sensores, pra isso o melhor seria fazer a leitura dos três ao mesmo tempo, na mesma função e depois comparar os valores obtidos no 3 sensores.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço