プログラム起動用ボタン
概要
FPT2021がオンラインでの開催となり,ロボットのスタート方法としてsshなどが使えずボタン1つのみでスタートする必要が生じたため,arduinoを使いボタン1つで起動プログラムを呼び出す方法をメモしておく.
使用したもの
- Arduino Micro
- LED
- 抵抗(10kΩ)
- タクトスイッチ
回路構成
作成した回路を以下に示す.

回路はプログラム起動用ボタンと停止用ボタンで構成される.プログラムの起動中はLEDが点灯する.起動用ボタンは10番のピン,停止用ボタンは9番のピン,LEDは11版のピンが割り当てられている.本デバイスはキーボードとして認識されるためArduino MicroとUltra96等をUSBで接続しておく必要がある.
プログラム
作成したプログラムを以下に示す.
#include <Keyboard.h>
const int START_PIN =9;
const int STOP_PIN =10;
const int LED_PIN =11;
bool start_on = false;
bool stop_on = false;
void setup(){
Keyboard.begin();
pinMode( START_PIN, INPUT_PULLUP );
pinMode( STOP_PIN, INPUT_PULLUP );
pinMode( LED_PIN, OUTPUT);
Serial.begin( 115200 );
}
void loop(){
int value;
value = digitalRead( START_PIN );
if(value == 1 && start_on == true){
Keyboard.print("touch /root/keyboard\n");
Keyboard.releaseAll();
digitalWrite(LED_PIN, HIGH);
start_on = false;
}else if(value == 0 && start_on == false){
start_on = true;
}
value = digitalRead( STOP_PIN );
if(value == 1 && stop_on == true){
Keyboard.print("stop\n");
Keyboard.releaseAll();
digitalWrite(LED_PIN, LOW);
stop_on = false;
}else if(value == 0 && stop_on == false){
stop_on = true;
}
}
本デバイスはOSからはキーボードとして認識される.起動ボタンが押された時,"s\n"という文字列が入力される.そのため,起動したいプログラムをエイリアスで"s"として登録しておく必要がある.
エイリアスの例
alias=s='python3 test.py'
停止ボタンが押されると,"ctrl+c"が入力され起動しているプログラムが停止する.
CUI起動の設定
PYNQのCUI起動方法
sudo systemctl disable pynq-x11.service
sudo systemctl set-default multi-user.target
sudo systemctl edit getty@tty1
getty@tty1には以下を記述
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin xilinx --noclear %I 38400 linux
その後リスタート
sudo shutdown -r now