Paso 6: Código codificadores
Aquí es un código simple para el codificador de izquierda. Paso muchas horas de confusión sobre esto. pero un código de codificador lineal que funciona. El código hace girar los motores izquierdos hasta el codificador (cuenta) 500. también imprime en el monitor serial. Lo mismo para el otro lado sólo tienes que cambiar los pernos y los nombres, pero voy a incluir un código final con todo al final.
#define encoderA 2 #define encoderB 3 // Only use one interrupt in this example volatile int count;
int speedch1 = 9; // left front int speedch2 = 10; // left back int speedch3 = 11; // right front int speedch4 = 12; // right back // direction pins int dirch1 = 44; // left front int dirch2 = 45; // left back int dirch3 = 42; // right front int dirch4 = 43; // right back
int curch1 = A1; // left front int curch2 = A2; // left back int curch3 = A3; // right front int curch4 = A4; // right back int TIME; //time the command is for int SPEED;// 0 - 255 motor speed
void setup() { Serial.begin(9600); count=0; pinMode(dirch1,OUTPUT); pinMode(dirch2,OUTPUT); pinMode(dirch3,OUTPUT); pinMode(dirch4,OUTPUT);
pinMode(speedch1,OUTPUT); pinMode(speedch2,OUTPUT); pinMode(speedch3,OUTPUT); pinMode(speedch4,OUTPUT); pinMode(encoderA, INPUT); pinMode(encoderB, INPUT); attachInterrupt(0, handleEncoder, CHANGE);
}
void loop() { delay(1000); (SPEED = 200); forward(); if (count > 10) Serial.println(count); }
void handleEncoder() { if(digitalRead(encoderA) == digitalRead(encoderB)) { count++; } else { count--; } Delay(1000); (VELOCIDAD = 200); Forward(); Si (recuento > 10) Serial.println(count); } void forward() { digitalWrite(dirch1,LOW); digitalWrite(dirch2,HIGH); analogWrite(speedch1,SPEED); analogWrite(speedch2,SPEED); if (count > 500){ analogWrite(speedch1,0); analogWrite(speedch2,0); } }
void handleEncoder() {if(digitalRead(encoderA) == digitalRead(encoderB)) {cuenta ++; int incomingByte = 0; // for incoming serial data< int led = 13; Else {cuenta--; void setup() { Serial2.begin(9600); // change to the serial port /2/3 pinMode(led, OUTPUT); }
void loop() { void forward() {digitalWrite(dirch1,LOW); digitalWrite(dirch2,HIGH); analogWrite(speedch1,SPEED); analogWrite(speedch2,SPEED); si (recuento > 500) {analogWrite(speedch1,0); analogWrite(speedch2,0); // send data only when you receive data: if (Serial2.available() > 0) { // read the incoming byte: incomingByte = Serial2.read();