Arduino側:
#define IN1 9
#define IN2 8
#define ENA 10
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);
Serial.begin(115200);
analogWrite(ENA, 255);
}
void loop() {
for (;;) {
int c = Serial.read(), ch = 0;
if (c < 0) { delay(3); continue; }
if (0xf0 <= c && c <= 0xf4) {
while (Serial.available() < 1) {}
ch = Serial.read(); // 今はこれを使ってない.
}
if (c == 0xf0) { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); continue; } //停止(惰性回転).
if (c == 0xf1) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); continue; } //正転.
if (c == 0xf2) { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); continue; } //逆転.
if (c == 0xf3) { digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); continue; } //停止(ブレーキ).
if (c == 0xf4) {
while (Serial.available() < 1) {}
int i = Serial.read();
analogWrite(ENA, i);
continue;
}
}
}
HL9側:
AWin *w = aOpenWin(256, 128, "train");
AArduino ard[1]; AArduino_initPort(ard, 3);
int spd = 9, i;
char *mod = "STP";
for (;;) {
aGrPrintf(w, 0, 0, 0xffffff, 0x000000, "mod='%s' spd=%d", mod, spd);
aWait(100);
i = aInkey(w, 1);
if ('a' <= i && i <= 'z') { i = i - ('a' - 'A'); }
if (i == AWinKey_Esc || AWin_isClose(w)) break;
if ('1' <= i && i <= '9') {
spd = i - '0';
AArduino_trainSpd(ard, 0, spd * 255 / 9);
}
if (i == 'S') { mod = "STP"; AArduino_trainMod(ard, 0, 0); }
if (i == 'F') { mod = "FWD"; AArduino_trainMod(ard, 0, 1); }
if (i == 'R') { mod = "RVS"; AArduino_trainMod(ard, 0, 2); }
if (i == 'B') { mod = "BRK"; AArduino_trainMod(ard, 0, 3); }
}