PWM制御
をテンプレートにして作成
[
凌宮
|
技術
|
一覧
|
検索
|
最新
] [
ソース
]
開始行:
* Pulse Width Modulation(パルス幅変調)制御 [#eb3dc03c]
* モータードライバ: TA8428K [#d0431e69]
- http://akizukidenshi.com/download/ta8428k(s).pdf
|*#|*Name |*Arg |*Func |
|*1|##IN1 ##|##i1 ##|制御用入力端子|
|*2|##IN2 ##|##i2 ##|^ |
|*3|##OUTA ##|##o1 ##|〜1.5A |
|*4|##GND ##|##gnd##|GND |
|*5|##OUTA~##|##o2 ##| |
|*6|##---- ##|##-- ##| |
|*7|##Vcc ##|##vcc##|VCC〜30V |
| | |lx: | |lx: |c
|*Mode|*IN1|*IN2|*OUTA|*OUTA~|
|*制動| H | H | L | L |
|*正転| H | L | H | L |
|*逆転| L | H | L | H |
|*停止| L | L | Z | Z |
|C[10 uF]|水色106|
|C[ 0.1uF]|水色104|
* ハード [#j705136e]
### verilog
;pin ctrl.gnd = driver.gnd = 0V
;pin ctrl.vcc = 5V
;pin driver.vcc = 12V
;C[10 uF](driver.gnd, driver.vcc)
;C[ 0.1uF](driver.gnd, driver.vcc)
;Arduino ctrl
;TA8428K driver
;driver.i1 = ctrl.D3
;driver.i2 = ctrl.D11
;pin driver.o1;
;pin driver.o2;
###
* ソフト [#f78cb14d]
### C
void setup() {
Serial.begin(9600);
pinMode( 3, OUTPUT);
pinMode(11, OUTPUT);
}
int c1 = 3;
int c2 = 11;
int t = 100;
int d = 50;
int command = 0;
void loop() {
if (Serial.available() > 0) {
command = Serial.read();
}
digitalWrite(c1, LOW )
digitalWrite(c2, HIGH)
delay(d);
digitalWrite(c1, LOW)
digitalWrite(c2, LOW)
delay(t-d);
}
###
*** ディーゼル [#x2389d6e]
###
int iAna0 = 0;
int pPwm1 = 3;
int pPwm2 = 11;
int base = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[avesz];
int avelc=0;
int ave=0;
int Ave(int value) {
ave -= avebf[avelc]; avebf[avelc] = value >> avelg;
ave += avebf[avelc];
avelc++;
if (avelc == avesz) avelc = 0;
return ave;
}
void setPwvWidth0311(int r) {
TCCR2B &= B11111000;
switch(r) {
case 1: TCCR2B |= B00000001; break;
case 8: TCCR2B |= B00000010; break;
case 32: TCCR2B |= B00000011; break;
default :
case 64: TCCR2B |= B00000100; break;
case 128: TCCR2B |= B00000101; break;
case 256: TCCR2B |= B00000110; break;
case 1024: TCCR2B |= B00000111; break;
}
}
void setup() {
Serial.begin(9600);
setPwvWidth0311(1024);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode( 8, OUTPUT);
pinMode( 9, INPUT);
pinMode(10, OUTPUT);
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, 0 );
digitalWrite( 8, LOW);
digitalWrite(10, HIGH);
base = analogRead(iAna0)+10;
Serial.print("base == ");
Serial.println(base);
for(int i = 0; i<avesz; i++) {
avebf[i] = 0;
}
}
void loop() {
int sw = digitalRead(9);
int value = analogRead(iAna0);
int ave = Ave(value);
int acc = 0;
if (sw == LOW) {
acc = (1024-ave)/4;
}
else {
acc = (ave - base)/2;
if (acc < 5) acc = 0;
if (acc >254) acc = 254;
}
if (1) {
Serial.print(value);
Serial.print("\t");
Serial.print(ave);
Serial.print("\t");
Serial.println(acc);
}
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
delay(100);
}
###
*** [#g8acfab8]
###
int iAna0 = 1;
int iAna1 = 2;
int pPwm1 = 5;
int pPwm2 = 6;
int pLed1 = 3;
int pLed2 = 9;
int base0 = 0;
int base1 = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[2][avesz];
int avelc[2] = {0,0};
int ave[2] = {0,0};
int Ave(int id, int value) {
if (id > 2) return 0;
ave[id] -= avebf[id][avelc[id]]; avebf[id][avelc[id]...
ave[id] += avebf[id][avelc[id]];
avelc[id]++;
if (avelc[id] == avesz) avelc[id] = 0;
return ave[id];
}
const int vBaseOffset = 10;
void setup() {
Serial.begin(9600);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode(pLed1, OUTPUT);
pinMode(pLed2, OUTPUT);
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
base0 = analogRead(iAna0) + vBaseOffset;
base1 = analogRead(iAna1) + vBaseOffset;
Serial.print("base == ");
Serial.print(base0);
Serial.print(", ");
Serial.println(base1);
for (int i = 0; i < avesz; i++) {
avebf[0][i] = 0;
avebf[1][i] = 0;
}
}
int gSwtchingLock = false;
int gDir = 0;
void loop() {
int value0 = analogRead(iAna0);
int value1 = analogRead(iAna1);
int ave0 = Ave(0, value0);
int ave1 = Ave(1, value1);
int acc = (int)((ave0 - base0) * 0.7);
if (acc < 5) acc = 0;
if (acc > 254) acc = 254;
bool sw = (ave1 - base1) > base1;
if (gSwtchingLock == false && sw == true && acc == 0) {
gDir = 1 - gDir;
gSwtchingLock = true;
}
if (gSwtchingLock == true)
{
Serial.print((gDir == 0) ? "200\t100\t" : "100\t200\t...
Serial.println(gDir);
if (sw == false) gSwtchingLock = false;
return;
}
if (gSwtchingLock) {
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
delay(10);
return;
}
if (true) {
Serial.print(ave0);
Serial.print("\t");
Serial.print(ave1);
Serial.print("\t");
Serial.println(acc);
}
if (gDir == 1) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
analogWrite(pLed1, 0 );
analogWrite(pLed2, acc);
}
else {
analogWrite(pPwm1, acc);
analogWrite(pPwm2, 0);
analogWrite(pLed1, acc);
analogWrite(pLed2, 0);
}
delay(100);
}
###
###
int iAna0 = 0;
int pPwm1 = 3;
int pPwm2 = 11;
int pPower = 7;
int pDir = 9;
int pPowerDir1 = 5;
int pPowerDir2 = 10;
const int PUSHED = LOW;
int base = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[avesz];
int avelc=0;
int ave=0;
class cStatelessToggleButton
{
public:
int vPort;
bool vState;
const int PUSHED = LOW;
void (*vStateChanged)();
private:
int vPushed;
public:
cStatelessToggleButton(int aPort, void (*aStateChange...
: vPort(aPort)
, vStateChanged(aStateChanged)
{
fInit();
}
void fInit() {
vState = false;
vPushed = false;
pinMode(vPort, INPUT_PULLUP);
}
int fUpdate() {
if (digitalRead(vPort) == PUSHED) {
if (vPushed == false) {
vState = !vState;
vPushed = true;
if (vStateChanged != NULL) vStateChanged();
}
} else {
vPushed = false;
if (vStateChanged != NULL) vStateChanged();
}
}
};
void fCtrlStateChanged();
cStatelessToggleButton vPowerButton(pPower, fCtrlStateCha...
cStatelessToggleButton vDirButton (pDir , fCtrlStateCha...
void fCtrlStateChanged() {
analogWrite(pPowerDir1, (vPowerButton.vState && vDirBu...
analogWrite(pPowerDir2, (vPowerButton.vState && !vDirBu...
}
bool neutral = false;
cStatelessToggleButton vNeutralButton (pDir , [](){neut...
int Ave(int value) {
ave -= avebf[avelc]; avebf[avelc] = value >> avelg;
ave += avebf[avelc];
avelc++;
if (avelc == avesz) avelc = 0;
return ave;
}
void setPwvWidth0311(int r) {
TCCR2B &= B11111000;
switch(r) {
case 0: TCCR2B |= B00000000; break;
case 1: TCCR2B |= B00000001; break;
case 8: TCCR2B |= B00000010; break;
case 32: TCCR2B |= B00000011; break;
default :
case 64: TCCR2B |= B00000100; break;
case 128: TCCR2B |= B00000101; break;
case 256: TCCR2B |= B00000110; break;
case 1024: TCCR2B |= B00000111; break;
}
}
void setPwvWidth0506(int r) {
TCCR0B &= B11111000;
switch(r) {
case 0: TCCR0B |= B00000000; break;
case 1: TCCR0B |= B00000001; break;
case 8: TCCR0B |= B00000010; break;
case 64: TCCR0B |= B00000011; break;
default :
case 256: TCCR0B |= B00000100; break;
case 1024: TCCR0B |= B00000101; break;
}
}
void setup() {
Serial.begin(9600);
setPwvWidth0311(256);
//setPwvWidth0506(1);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode(pPowerDir1, OUTPUT);
pinMode(pPowerDir2, OUTPUT);
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
analogWrite(pPowerDir1, 50);
analogWrite(pPowerDir2, 128);
base = analogRead(iAna0)+10;
Serial.print("\nbase == ");
Serial.println(base);
for(int i = 0; i<avesz; i++) {
avebf[i] = 0;
}
}
#define HKS9200
//#define DD51
//#define DD51K
//#define DE15
//#define DF200
//#define KIHA20
//#define KIHA40
//#define KIHA75
//#define KIHA100 //KATO
//#define KIHA120
//#define KIHA181x5
//#define KIHA183
//#define KIHA187x4
//#define KIHA187x6
//#define KTR8000
//#define Renfe592
//#define Sanriku36
#ifdef HKS9200
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
#ifdef DD51
int vIdleMax = 30; int vIdleAcc = 40; int vAccDiv = 4; ...
#endif
#ifdef DD51K
int vIdleMax = 5; int vIdleAcc = 35; int vAccDiv = 3; ...
#endif
#ifdef DE15
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 4; ...
#endif
#ifdef DF200
int vIdleMax = 5; int vIdleAcc = 30; int vAccDiv = 3; ...
#endif
#ifdef KIHA20
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef KIHA40
int vIdleMax = 10; int vIdleAcc = 12; int vAccDiv = 9; ...
#endif
#ifdef KIHA75
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 3; ...
#endif
#ifdef KIHA100
int vIdleMax = 5; int vIdleAcc = 15; int vAccDiv = 4; ...
#endif
#ifdef KIHA120
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
#ifdef KIHA181
int vIdleMax = 30; int vIdleAcc = 10; int vAccDiv = 3; ...
#endif
#ifdef KIHA183
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef KIHA181x5
int vIdleMax = 10; int vIdleAcc = 35; int vAccDiv = 3; ...
#endif
#ifdef KIHA187x4
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 4; ...
#endif
#ifdef KIHA187x6
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 2; ...
#endif
#ifdef KTR8000
int vIdleMax = 8; int vIdleAcc = 12; int vAccDiv = 6; ...
#endif
#ifdef Renfe592
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef Sanriku36
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
class DCar {
bool idlingState;
DCar() {
idlingState = true;
}
void update() {
}
};
bool idlingState = true;
bool enginePower = true;
void loop() {
int value = analogRead(iAna0);
int ave = Ave(value);
int acc = 0;
vPowerButton.fUpdate();
vDirButton .fUpdate();
acc = (ave - base) / vAccDiv;
if (acc > 254) acc = 254;
if (1) {
Serial.print(value);
Serial.print("\t");
Serial.print(acc);
Serial.print("\t");
Serial.println(vPowerButton.vState);
}
if (vPowerButton.vState) {
if (!enginePower) {
enginePower = true;
setPwvWidth0311(1024);
}
}
else {
if (enginePower) {
enginePower = false;
setPwvWidth0311(256);
}
}
if (enginePower) {
if (acc < vIdleMax) { //反転振動
if (idlingState) {
analogWrite(pPwm1, vIdleAcc);
analogWrite(pPwm2, 0 );
} else {
analogWrite(pPwm2, vIdleAcc);
analogWrite(pPwm1, 0 );
}
idlingState = !idlingState;
}
else {
if (vDirButton.vState) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
} else {
analogWrite(pPwm2, 0 );
analogWrite(pPwm1, acc);
}
}
}
else
{
if (acc < vIdleMax) {
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
}
else {
if (vDirButton.vState) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc * 6/5);
} else {
analogWrite(pPwm2, 0 );
analogWrite(pPwm1, acc * 6/5);
}
}
}
delay(vIdleDelay);
}
###
終了行:
* Pulse Width Modulation(パルス幅変調)制御 [#eb3dc03c]
* モータードライバ: TA8428K [#d0431e69]
- http://akizukidenshi.com/download/ta8428k(s).pdf
|*#|*Name |*Arg |*Func |
|*1|##IN1 ##|##i1 ##|制御用入力端子|
|*2|##IN2 ##|##i2 ##|^ |
|*3|##OUTA ##|##o1 ##|〜1.5A |
|*4|##GND ##|##gnd##|GND |
|*5|##OUTA~##|##o2 ##| |
|*6|##---- ##|##-- ##| |
|*7|##Vcc ##|##vcc##|VCC〜30V |
| | |lx: | |lx: |c
|*Mode|*IN1|*IN2|*OUTA|*OUTA~|
|*制動| H | H | L | L |
|*正転| H | L | H | L |
|*逆転| L | H | L | H |
|*停止| L | L | Z | Z |
|C[10 uF]|水色106|
|C[ 0.1uF]|水色104|
* ハード [#j705136e]
### verilog
;pin ctrl.gnd = driver.gnd = 0V
;pin ctrl.vcc = 5V
;pin driver.vcc = 12V
;C[10 uF](driver.gnd, driver.vcc)
;C[ 0.1uF](driver.gnd, driver.vcc)
;Arduino ctrl
;TA8428K driver
;driver.i1 = ctrl.D3
;driver.i2 = ctrl.D11
;pin driver.o1;
;pin driver.o2;
###
* ソフト [#f78cb14d]
### C
void setup() {
Serial.begin(9600);
pinMode( 3, OUTPUT);
pinMode(11, OUTPUT);
}
int c1 = 3;
int c2 = 11;
int t = 100;
int d = 50;
int command = 0;
void loop() {
if (Serial.available() > 0) {
command = Serial.read();
}
digitalWrite(c1, LOW )
digitalWrite(c2, HIGH)
delay(d);
digitalWrite(c1, LOW)
digitalWrite(c2, LOW)
delay(t-d);
}
###
*** ディーゼル [#x2389d6e]
###
int iAna0 = 0;
int pPwm1 = 3;
int pPwm2 = 11;
int base = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[avesz];
int avelc=0;
int ave=0;
int Ave(int value) {
ave -= avebf[avelc]; avebf[avelc] = value >> avelg;
ave += avebf[avelc];
avelc++;
if (avelc == avesz) avelc = 0;
return ave;
}
void setPwvWidth0311(int r) {
TCCR2B &= B11111000;
switch(r) {
case 1: TCCR2B |= B00000001; break;
case 8: TCCR2B |= B00000010; break;
case 32: TCCR2B |= B00000011; break;
default :
case 64: TCCR2B |= B00000100; break;
case 128: TCCR2B |= B00000101; break;
case 256: TCCR2B |= B00000110; break;
case 1024: TCCR2B |= B00000111; break;
}
}
void setup() {
Serial.begin(9600);
setPwvWidth0311(1024);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode( 8, OUTPUT);
pinMode( 9, INPUT);
pinMode(10, OUTPUT);
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, 0 );
digitalWrite( 8, LOW);
digitalWrite(10, HIGH);
base = analogRead(iAna0)+10;
Serial.print("base == ");
Serial.println(base);
for(int i = 0; i<avesz; i++) {
avebf[i] = 0;
}
}
void loop() {
int sw = digitalRead(9);
int value = analogRead(iAna0);
int ave = Ave(value);
int acc = 0;
if (sw == LOW) {
acc = (1024-ave)/4;
}
else {
acc = (ave - base)/2;
if (acc < 5) acc = 0;
if (acc >254) acc = 254;
}
if (1) {
Serial.print(value);
Serial.print("\t");
Serial.print(ave);
Serial.print("\t");
Serial.println(acc);
}
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
delay(100);
}
###
*** [#g8acfab8]
###
int iAna0 = 1;
int iAna1 = 2;
int pPwm1 = 5;
int pPwm2 = 6;
int pLed1 = 3;
int pLed2 = 9;
int base0 = 0;
int base1 = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[2][avesz];
int avelc[2] = {0,0};
int ave[2] = {0,0};
int Ave(int id, int value) {
if (id > 2) return 0;
ave[id] -= avebf[id][avelc[id]]; avebf[id][avelc[id]...
ave[id] += avebf[id][avelc[id]];
avelc[id]++;
if (avelc[id] == avesz) avelc[id] = 0;
return ave[id];
}
const int vBaseOffset = 10;
void setup() {
Serial.begin(9600);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode(pLed1, OUTPUT);
pinMode(pLed2, OUTPUT);
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
base0 = analogRead(iAna0) + vBaseOffset;
base1 = analogRead(iAna1) + vBaseOffset;
Serial.print("base == ");
Serial.print(base0);
Serial.print(", ");
Serial.println(base1);
for (int i = 0; i < avesz; i++) {
avebf[0][i] = 0;
avebf[1][i] = 0;
}
}
int gSwtchingLock = false;
int gDir = 0;
void loop() {
int value0 = analogRead(iAna0);
int value1 = analogRead(iAna1);
int ave0 = Ave(0, value0);
int ave1 = Ave(1, value1);
int acc = (int)((ave0 - base0) * 0.7);
if (acc < 5) acc = 0;
if (acc > 254) acc = 254;
bool sw = (ave1 - base1) > base1;
if (gSwtchingLock == false && sw == true && acc == 0) {
gDir = 1 - gDir;
gSwtchingLock = true;
}
if (gSwtchingLock == true)
{
Serial.print((gDir == 0) ? "200\t100\t" : "100\t200\t...
Serial.println(gDir);
if (sw == false) gSwtchingLock = false;
return;
}
if (gSwtchingLock) {
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
delay(10);
return;
}
if (true) {
Serial.print(ave0);
Serial.print("\t");
Serial.print(ave1);
Serial.print("\t");
Serial.println(acc);
}
if (gDir == 1) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
analogWrite(pLed1, 0 );
analogWrite(pLed2, acc);
}
else {
analogWrite(pPwm1, acc);
analogWrite(pPwm2, 0);
analogWrite(pLed1, acc);
analogWrite(pLed2, 0);
}
delay(100);
}
###
###
int iAna0 = 0;
int pPwm1 = 3;
int pPwm2 = 11;
int pPower = 7;
int pDir = 9;
int pPowerDir1 = 5;
int pPowerDir2 = 10;
const int PUSHED = LOW;
int base = 0;
#define avelg 2
#define avesz (1<<avelg)
int avebf[avesz];
int avelc=0;
int ave=0;
class cStatelessToggleButton
{
public:
int vPort;
bool vState;
const int PUSHED = LOW;
void (*vStateChanged)();
private:
int vPushed;
public:
cStatelessToggleButton(int aPort, void (*aStateChange...
: vPort(aPort)
, vStateChanged(aStateChanged)
{
fInit();
}
void fInit() {
vState = false;
vPushed = false;
pinMode(vPort, INPUT_PULLUP);
}
int fUpdate() {
if (digitalRead(vPort) == PUSHED) {
if (vPushed == false) {
vState = !vState;
vPushed = true;
if (vStateChanged != NULL) vStateChanged();
}
} else {
vPushed = false;
if (vStateChanged != NULL) vStateChanged();
}
}
};
void fCtrlStateChanged();
cStatelessToggleButton vPowerButton(pPower, fCtrlStateCha...
cStatelessToggleButton vDirButton (pDir , fCtrlStateCha...
void fCtrlStateChanged() {
analogWrite(pPowerDir1, (vPowerButton.vState && vDirBu...
analogWrite(pPowerDir2, (vPowerButton.vState && !vDirBu...
}
bool neutral = false;
cStatelessToggleButton vNeutralButton (pDir , [](){neut...
int Ave(int value) {
ave -= avebf[avelc]; avebf[avelc] = value >> avelg;
ave += avebf[avelc];
avelc++;
if (avelc == avesz) avelc = 0;
return ave;
}
void setPwvWidth0311(int r) {
TCCR2B &= B11111000;
switch(r) {
case 0: TCCR2B |= B00000000; break;
case 1: TCCR2B |= B00000001; break;
case 8: TCCR2B |= B00000010; break;
case 32: TCCR2B |= B00000011; break;
default :
case 64: TCCR2B |= B00000100; break;
case 128: TCCR2B |= B00000101; break;
case 256: TCCR2B |= B00000110; break;
case 1024: TCCR2B |= B00000111; break;
}
}
void setPwvWidth0506(int r) {
TCCR0B &= B11111000;
switch(r) {
case 0: TCCR0B |= B00000000; break;
case 1: TCCR0B |= B00000001; break;
case 8: TCCR0B |= B00000010; break;
case 64: TCCR0B |= B00000011; break;
default :
case 256: TCCR0B |= B00000100; break;
case 1024: TCCR0B |= B00000101; break;
}
}
void setup() {
Serial.begin(9600);
setPwvWidth0311(256);
//setPwvWidth0506(1);
pinMode(pPwm1, OUTPUT);
pinMode(pPwm2, OUTPUT);
pinMode(pPowerDir1, OUTPUT);
pinMode(pPowerDir2, OUTPUT);
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
analogWrite(pPowerDir1, 50);
analogWrite(pPowerDir2, 128);
base = analogRead(iAna0)+10;
Serial.print("\nbase == ");
Serial.println(base);
for(int i = 0; i<avesz; i++) {
avebf[i] = 0;
}
}
#define HKS9200
//#define DD51
//#define DD51K
//#define DE15
//#define DF200
//#define KIHA20
//#define KIHA40
//#define KIHA75
//#define KIHA100 //KATO
//#define KIHA120
//#define KIHA181x5
//#define KIHA183
//#define KIHA187x4
//#define KIHA187x6
//#define KTR8000
//#define Renfe592
//#define Sanriku36
#ifdef HKS9200
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
#ifdef DD51
int vIdleMax = 30; int vIdleAcc = 40; int vAccDiv = 4; ...
#endif
#ifdef DD51K
int vIdleMax = 5; int vIdleAcc = 35; int vAccDiv = 3; ...
#endif
#ifdef DE15
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 4; ...
#endif
#ifdef DF200
int vIdleMax = 5; int vIdleAcc = 30; int vAccDiv = 3; ...
#endif
#ifdef KIHA20
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef KIHA40
int vIdleMax = 10; int vIdleAcc = 12; int vAccDiv = 9; ...
#endif
#ifdef KIHA75
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 3; ...
#endif
#ifdef KIHA100
int vIdleMax = 5; int vIdleAcc = 15; int vAccDiv = 4; ...
#endif
#ifdef KIHA120
int vIdleMax = 10; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
#ifdef KIHA181
int vIdleMax = 30; int vIdleAcc = 10; int vAccDiv = 3; ...
#endif
#ifdef KIHA183
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef KIHA181x5
int vIdleMax = 10; int vIdleAcc = 35; int vAccDiv = 3; ...
#endif
#ifdef KIHA187x4
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 4; ...
#endif
#ifdef KIHA187x6
int vIdleMax = 8; int vIdleAcc = 30; int vAccDiv = 2; ...
#endif
#ifdef KTR8000
int vIdleMax = 8; int vIdleAcc = 12; int vAccDiv = 6; ...
#endif
#ifdef Renfe592
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 3; ...
#endif
#ifdef Sanriku36
int vIdleMax = 5; int vIdleAcc = 20; int vAccDiv = 5; ...
#endif
class DCar {
bool idlingState;
DCar() {
idlingState = true;
}
void update() {
}
};
bool idlingState = true;
bool enginePower = true;
void loop() {
int value = analogRead(iAna0);
int ave = Ave(value);
int acc = 0;
vPowerButton.fUpdate();
vDirButton .fUpdate();
acc = (ave - base) / vAccDiv;
if (acc > 254) acc = 254;
if (1) {
Serial.print(value);
Serial.print("\t");
Serial.print(acc);
Serial.print("\t");
Serial.println(vPowerButton.vState);
}
if (vPowerButton.vState) {
if (!enginePower) {
enginePower = true;
setPwvWidth0311(1024);
}
}
else {
if (enginePower) {
enginePower = false;
setPwvWidth0311(256);
}
}
if (enginePower) {
if (acc < vIdleMax) { //反転振動
if (idlingState) {
analogWrite(pPwm1, vIdleAcc);
analogWrite(pPwm2, 0 );
} else {
analogWrite(pPwm2, vIdleAcc);
analogWrite(pPwm1, 0 );
}
idlingState = !idlingState;
}
else {
if (vDirButton.vState) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc);
} else {
analogWrite(pPwm2, 0 );
analogWrite(pPwm1, acc);
}
}
}
else
{
if (acc < vIdleMax) {
analogWrite(pPwm1, 0);
analogWrite(pPwm2, 0);
}
else {
if (vDirButton.vState) {
analogWrite(pPwm1, 0 );
analogWrite(pPwm2, acc * 6/5);
} else {
analogWrite(pPwm2, 0 );
analogWrite(pPwm1, acc * 6/5);
}
}
}
delay(vIdleDelay);
}
###
ページ名:
3doodler-04.jpg
339件
[
詳細
]
3doodler-03.jpg
302件
[
詳細
]
3doodler-02.jpg
305件
[
詳細
]
3doodler-01.jpg
322件
[
詳細
]
3doodler-13.jpg
336件
[
詳細
]
3doodler-11.jpg
149件
[
詳細
]
3doodler-14.jpg
275件
[
詳細
]
3doodler-22.jpg
287件
[
詳細
]
3doodler-21.jpg
267件
[
詳細
]
MerryXmas.jpg
278件
[
詳細
]
Xperia-01.jpg
298件
[
詳細
]
Xperia-02.jpg
329件
[
詳細
]
Xperia-04.jpg
306件
[
詳細
]
Xperia-07.jpg
334件
[
詳細
]
Xperia-06.jpg
316件
[
詳細
]
Xperia-08.jpg
282件
[
詳細
]
Xperia-10.jpg
269件
[
詳細
]
Xperia-15.jpg
273件
[
詳細
]
Melody.zip
181件
[
詳細
]
CSample.lzh
194件
[
詳細
]
Sendv2.limg.lzh
211件
[
詳細
]
HttpServer.2013.0819.0954.zip
229件
[
詳細
]
EasyMacroLens.05.JPG
402件
[
詳細
]
EasyMacroLens.04.JPG
426件
[
詳細
]
EasyMacroLens.03.JPG
417件
[
詳細
]
EasyMacroLens.02.jpg
422件
[
詳細
]
EasyMacroLens.01.jpg
414件
[
詳細
]
01.DeviceManager.png
550件
[
詳細
]
02.DeviceProperty.png
453件
[
詳細
]
03.DeviceDriver.png
442件
[
詳細
]
04.DriverUpdate.png
423件
[
詳細
]
05.LocationSetting.png
425件
[
詳細
]
06.SecurityCheck.png
530件
[
詳細
]
07.Updating.png
397件
[
詳細
]
08.DeviceManager.png
433件
[
詳細
]
00.AdbDevices.png
418件
[
詳細
]
Nexus7-2013-KaifuuNoGi-11.jpg
293件
[
詳細
]
Nexus7-2013-KaifuuNoGi-10.jpg
282件
[
詳細
]
Nexus7-2013-KaifuuNoGi-09.jpg
281件
[
詳細
]
Nexus7-2013-KaifuuNoGi-08.jpg
309件
[
詳細
]
Nexus7-2013-KaifuuNoGi-07.jpg
303件
[
詳細
]
Nexus7-2013-KaifuuNoGi-06.jpg
285件
[
詳細
]
Nexus7-2013-KaifuuNoGi-03.jpg
279件
[
詳細
]
KaifuuNoGi-08.jpg
300件
[
詳細
]
KaifuuNoGi-06.jpg
308件
[
詳細
]
KaifuuNoGi-05.jpg
272件
[
詳細
]
KaifuuNoGi-04.jpg
322件
[
詳細
]
KaifuuNoGi-03.jpg
296件
[
詳細
]
KaifuuNoGi-02.jpg
300件
[
詳細
]
KaifuuNoGi-01.jpg
298件
[
詳細
]
DeviceManager.LeapDevKit.WestBridge.Stop.png
303件
[
詳細
]
DeviceManager.LeapDevKit.WestBridge.png
369件
[
詳細
]
DeviceManager.LeapDevKit.png
385件
[
詳細
]
DeviceManager.LeapDevKit.Off.png
210件
[
詳細
]
junaio_download_qrcode.png
541件
[
詳細
]
junaio_channel_qrcode_LimgNameCard.png
536件
[
詳細
]
TheEyeTribe.07.jpg
317件
[
詳細
]
TheEyeTribe.06.jpg
325件
[
詳細
]
TheEyeTribe.05.jpg
332件
[
詳細
]
TheEyeTribe.04.jpg
322件
[
詳細
]
TheEyeTribe.03.jpg
336件
[
詳細
]
TheEyeTribe.02.jpg
336件
[
詳細
]
TheEyeTribe.01.jpg
340件
[
詳細
]
Hwd14-01.jpg
295件
[
詳細
]
Hwd14-02.jpg
296件
[
詳細
]
Hwd14-03.jpg
300件
[
詳細
]
Hwd14-04.jpg
302件
[
詳細
]
Hwd14-05.jpg
320件
[
詳細
]
Hwd14-06.jpg
315件
[
詳細
]
Decode.zip
176件
[
詳細
]
s-ColorSample-5Y--9.0-01.0-f.JPG
419件
[
詳細
]
filament-color12.jpg
416件
[
詳細
]
s-ColorSample-N---9.5------f.jpg
357件
[
詳細
]
s-ColorSample-N---1.5------f.jpg
376件
[
詳細
]
s-ColorSample-4R--4.5.14.0-f.jpg
363件
[
詳細
]
s-ColorSample-8YR-7.0-13.5-f.jpg
383件
[
詳細
]
s-ColorSample-8Y--8.0-10.0-f.jpg
322件
[
詳細
]
s-ColorSample-8GY-7.0-09.5-f.jpg
356件
[
詳細
]
s-ColorSample-9G--3.5-08.5-f.jpg
358件
[
詳細
]
s-ColorSample-5BG-4.5-10.0-f.jpg
362件
[
詳細
]
s-ColorSample-5B--5.5-08.5-f.jpg
353件
[
詳細
]
s-ColorSample-6PB-3.5-11.5-f.jpg
335件
[
詳細
]
s-ColorSample-1RP-3.5-11.5-f.jpg
372件
[
詳細
]
s-ColorSample-6RP-4.5-12.5-f.jpg
329件
[
詳細
]
s-IMG_6009.JPG
373件
[
詳細
]
s-IMG_6014.JPG
404件
[
詳細
]
Suporter.png
404件
[
詳細
]
Gap1.png
343件
[
詳細
]
Gap3.png
428件
[
詳細
]
s-IMG_6020.JPG
320件
[
詳細
]
s-IMG_6039.JPG
355件
[
詳細
]
s-IMG_6045.JPG
350件
[
詳細
]
s-IMG_6047.JPG
374件
[
詳細
]
s-IMG_6061.JPG
342件
[
詳細
]
s-IMG_6050.JPG
369件
[
詳細
]
s-IMG_6058.JPG
387件
[
詳細
]
s-IMG_6079.JPG
366件
[
詳細
]
s-IMG_5699.JPG
377件
[
詳細
]
s-IMG_5703.JPG
344件
[
詳細
]
s-IMG_5707.JPG
332件
[
詳細
]
s-IMG_5710.JPG
302件
[
詳細
]
s-IMG_5713.JPG
311件
[
詳細
]
s-IMG_5716.JPG
323件
[
詳細
]
s-IMG_5723.JPG
329件
[
詳細
]
s-IMG_5727.JPG
300件
[
詳細
]
s-IMG_5728.JPG
301件
[
詳細
]
s-IMG_5729.JPG
291件
[
詳細
]
s-IMG_5731.JPG
320件
[
詳細
]
s-IMG_5733.JPG
334件
[
詳細
]
s-IMG_5735.JPG
303件
[
詳細
]
s-IMG_5737.JPG
322件
[
詳細
]
s-IMG_5739.JPG
331件
[
詳細
]
s-IMG_5752.JPG
328件
[
詳細
]
s-IMG_5756.JPG
293件
[
詳細
]
s-IMG_5761.JPG
302件
[
詳細
]
s-IMG_5764.JPG
317件
[
詳細
]
s-IMG_5767.JPG
317件
[
詳細
]
s-IMG_5905.JPG
413件
[
詳細
]
s-IMG_5907.JPG
414件
[
詳細
]
s-IMG_5914.JPG
416件
[
詳細
]
s-IMG_5917.JPG
381件
[
詳細
]
s-IMG_5920.JPG
414件
[
詳細
]
s-IMG_5934.JPG
405件
[
詳細
]
s-IMG_5935.JPG
361件
[
詳細
]
s-IMG_5937.JPG
383件
[
詳細
]
s-IMG_5948.JPG
357件
[
詳細
]
s-IMG_5966.JPG
368件
[
詳細
]
s-IMG_5971.JPG
363件
[
詳細
]
10005832_540049732781991_265704328_o[1].jpg
340件
[
詳細
]
s-IMG_5613.JPG
343件
[
詳細
]
Nucleo32.JPG
168件
[
詳細
]
[
凌宮
|
技術
|
一覧
|
検索
|
最新
] [
ソース
]