Étape 6: Code d’encodeurs
Voici un simple code pour le codeur de gauche. J’ai passer de nombreuses heures de confus là-dessus. mais trouver un code Codeur linéaire. Le code fait tourner les moteurs gauche jusqu'à ce que l’encodeur (comte) atteigne 500. Il également imprimer dans le moniteur de la série. Il la même chose pour l’autre côté juste nécessaire de changer les goupilles et les noms, mais je vais inclure un code final avec tout à la fin.
#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) ; (VITESSE = 200) ; mémoire ; Si (compter 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)) {count ++ ; int incomingByte = 0; // for incoming serial data< int led = 13; else {count--; void setup() { Serial2.begin(9600); // change to the serial port /2/3 pinMode(led, OUTPUT); }
void loop() { mémoire de Sub {digitalWrite(dirch1,LOW) ; digitalWrite(dirch2,HIGH) ; analogWrite(speedch1,SPEED) ; analogWrite(speedch2,SPEED) ; si (comptez 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();