BASIC4MCU | 질문게시판 | 답변 : 답변 : 아두이노 BLDC 가감속 제어
페이지 정보
작성자 master 작성일2020-01-30 09:56 조회38,049회 댓글5건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2020-01-30 오전 9:58:09// by Ok-Hyun Park//#include <TimerOne.h>#include <MsTimer2.h>//int PWM=9,Direction=4,Brake=2;int sw=13;//#define stop 0#define fwd 1#define rev 2//volatile int Duty=0,mode=0;int Slope=5;bool flag=0;//void flash(){if((mode==0)||(mode==2)){if(Duty){Duty--; Timer1.setPwmDuty(PWM,Duty);}}//if(mode==1){ // 정회전digitalWrite(Direction,LOW);if(Duty<1000){Duty++; Timer1.setPwmDuty(PWM,Duty);}}//if(mode==3){ // 역회전digitalWrite(Direction,HIGH);if(Duty<1000){Duty++; Timer1.setPwmDuty(PWM,Duty);}}}//void setup(){pinMode(sw,INPUT_PULLUP);pinMode(Direction,OUTPUT);pinMode(Brake,OUTPUT);Timer1.initialize(); Timer1.pwm(PWM,0);Timer1.setPeriod(50); Timer1.setPwmDuty(PWM,0);MsTimer2:: set(10/Slope,flash); MsTimer2:: start();}//void loop(){if(!digitalRead(sw)){if(flag==0){ flag=1; if(++mode>3)mode=0; delay(50); }}else{if(flag==1){ flag=0; delay(50); }}}
댓글 5
조회수 38,049ppap님의 댓글
ppap 작성일감사합니다 더 열심히 공부하겠습니다
ppap님의 댓글
ppap 작성일
알려주신 언어에서 제가 좀 더 응용해서 스위치2개를 더 넣어서 작동하게 할려고 합니다 지금 스위치 2,3은 가감속 걸리게 했습니다 근데 여기서 스위치1도 가감속이 걸리네요 제가 수정한 언어에서 스위치1이 가감속 걸리는 기능을 뺄려면 어떻게 해야 되나요
스위치1은 동작만 스위치2,3은 가감속만 걸리고 하고 싶습니다
스위치1누름 정회전 스위치 2누름 가감속 걸리면서 멈춤
스위치1누름 역회전 스위치 3누름 가감속 걸리면서 멈춤
#include <TimerOne.h>
#include <MsTimer2.h>
//
int PWM=9,Direction=4,Brake=2;
int sw=8;
int sw2=7;
int sw3=6;
//
#define stop 0
#define fwd 1
#define rev 2
//
volatile int Duty=0,mode=0;
int Slope=5;
bool flag=0;
//
void flash(){
if((mode==0)||(mode==2)){
if(Duty){
Duty--; Timer1.setPwmDuty(PWM,Duty);
}
}
//
if(mode==1){ // 정회전
digitalWrite(Direction,LOW);
if(Duty<1000){
Duty++; Timer1.setPwmDuty(PWM,Duty);
}
}
//
if(mode==3){ // 역회전
digitalWrite(Direction,HIGH);
if(Duty<1000){
Duty++; Timer1.setPwmDuty(PWM,Duty);
}
}
}
//
void setup(){
pinMode(sw,INPUT_PULLUP);
pinMode(sw2,INPUT_PULLUP);
pinMode(sw3,INPUT_PULLUP);
pinMode(Direction,OUTPUT);
pinMode(Brake,OUTPUT);
Timer1.initialize(); Timer1.pwm(PWM,0);
Timer1.setPeriod(50); Timer1.setPwmDuty(PWM,0);
MsTimer2:: set(10/Slope,flash); MsTimer2:: start();
}
//
void loop(){
if(!digitalRead(sw) ){
if(flag==0){ flag=1; if(++mode>3)mode=0;
delay(50); }
}
else if(!digitalRead(sw2)|| !digitalRead(sw3) ){
if(flag==0){ flag=1; mode=2; delay(50); }
}
else{
if(flag==1){ flag=0; delay(50); }
}
}
master님의 댓글
master 작성일가속은 없나요?
master님의 댓글
master 작성일
좋은 영화가 되려면 시나리오가 탄탄해야 한다고 말하죠?
좋은 프로그램이 되려면 알고리즘이 탄탄해야합니다.
모든 경우의 수를 빠짐없이 고려해서 알고리즘을 만들어야합니다.
많은 고민을 해야하고요
이런 훈련은 스스로 해야지 남이 도와줄 수 없는 부분입니다.
ppap님의 댓글
ppap 작성일감사합니다 알고리즘부터 천천히 공부하겠습니다