#include <PIDController.h>
volatile long int encoder_pos = 0;
PIDController pos_pid;
int motor_value = 255;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), encoder, RISING);
pos_pid.begin();
pos_pid.tune(20, 0, 200);
pos_pid.limit(-255, 255);
}
void loop() {
pos_pid.setpoint((int)(((float)analogRead(A0)/1023) * 374.0 *1));
motor_value = pos_pid.compute(encoder_pos);
if(motor_value > 0){
MotorCounterClockwise(motor_value);
}else{
MotorClockwise(abs(motor_value));
}
Serial.println(encoder_pos);
delay(2);
}
void encoder(){
if(digitalRead(3) == HIGH){
encoder_pos++;
}else{
encoder_pos--;
}
}
void MotorClockwise(int power){
if(power > 50){
analogWrite(9, power);
digitalWrite(10, LOW);
}else{
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
}
void MotorCounterClockwise(int power){
if(power > 50){
analogWrite(10, power);
digitalWrite(9, LOW);
}else{
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
}
'아두이노' 카테고리의 다른 글
엔코딩모터 control (0) | 2019.08.15 |
---|---|
엔코딩모터 (0) | 2019.08.01 |
interrupt문을사용한 정지(컷팅기) (0) | 2019.07.26 |
컷팅기수정본 (0) | 2019.07.24 |
커터기수정분(운전중 정지 버턴작동) (0) | 2019.07.23 |