Stap 6: Encoders code
Hier is een eenvoudige code voor de linker encoder. Ik urenlang veel verward over dit. maar een lineaire encoder code gevonden die werkt. De code draait de linker motoren totdat het coderingsprogramma (graaf) 500 tot. het ook het afdrukken naar de seriële monitor. Het gewoon hetzelfde voor de andere kant de pinnen en de namen wijzigen, maar ik zal het opnemen van een definitieve code met alles aan het eind.
#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); (SNELHEID = 200); vooruit(); Als (> 10 tellen) 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() { VOID vooruit() {digitalWrite(dirch1,LOW); digitalWrite(dirch2,HIGH); analogWrite(speedch1,SPEED); analogWrite(speedch2,SPEED); als (> 500 tellen) {analogWrite(speedch1,0); analogWrite(speedch2,0); // send data only when you receive data: if (Serial2.available() > 0) { // read the incoming byte: incomingByte = Serial2.read();