//serial protocol #define FRENTE 'f' #define PARAR 's' // Quantidade de pulsos necessários para os movimentos #define PULSOS_FRENTE 62 //pnio 2 - 75 //PINOS int pino_encoder = 2; //Pino ligado ao pino D0 do sensor optico // Motor Direito int pino_B_IA = 5; int pino_B_IB = 6; int PWM = 190; // Modifica a intensidade do motor volatile byte pulsos; // Variável para contar pulsos char instruction; // Armazena o comando int i = 0; void setup() { // Abre a comunicação serial com BaudRate = 9600 Serial.begin(9600); //Pino do sensor optico como entrada pinMode(pino_encoder, INPUT); // Observando o prototipo de frente (mais distante do arduino) // é o lado direito. Configura Motor com o saida. pinMode( pino_B_IB, OUTPUT ); pinMode( pino_B_IA, OUTPUT ); // Configura estado inicial = parado. digitalWrite( pino_B_IB, LOW ); digitalWrite( pino_B_IA, LOW ); //Interrupcao 0 - pino digital 3 //Aciona o contador a cada pulso pulsos = 0; delay(500); } //Incrementa pulsos à cada borda de descida void contador() { pulsos++; } // Implementação do softbreak + pausa e reset da contagem de pulsos void Pausa(){ detachInterrupt(0); digitalWrite( pino_B_IB, LOW ); digitalWrite( pino_B_IA, LOW ); pulsos = 0; delay(1000); attachInterrupt(0, contador, FALLING); } // Implementação do movimento para frente void MoverFrente(){ Pausa(); //Necessária para reiniciar contagem while(pulsos < PULSOS_FRENTE){ Serial.println(pulsos); i++; digitalWrite( pino_B_IB, HIGH ); // direcao = frente analogWrite( pino_B_IA, 255-PWM ); // PWM = rapido } Serial.println(pulsos); Pausa(); Serial.println(i); i=0; } void comunicacao(){ if (Serial.available() > 0) { instruction = Serial.read(); Serial.println(instruction); switch (instruction) { case FRENTE: MoverFrente(); //Serial.write("OK"); break; case PARAR: Pausa(); //Serial.write("OK"); break; default: break; } Serial.write("OK"); } } void loop() { comunicacao(); }