x 動作確認済み2022/5/25 8:05
目的
サーボ信号を受信してサーボ以外の別の機構を動かす。
使いがってが悪いのでトリガーを付ける
仕様
1 9600bps RX(トリガー(なんでもよい1文字))
2 VDD
3 GND
4 リセットオンリー
8 9600bps TX(0から255のPWMバイナリー値)
7
6 デバッグ出力 9600bpsソフトウェアシリアル
5 PWM(IN) 400uS=0,2400uS=255
デバッグ1
(成功) 138を送っている
名前は、まだない
//PWM_to_SER_trigger_031_1
#include <Arduino.h>
#define in_pwm PA11 // 5pin
//10の割り算 0から1028までは、正しい。主に0から999
#define DIV10(n) ((n*205)>>11)
#define DW digitalWrite
#define TX1 PA12 // 6pin
#define UART_DELAY 106 // 002-110 9600bps ok 031
//仮想シリアルへの一文字出力 9600bps
void pc_putc(char ch)
{
DW(TX1, HIGH);
DW(TX1, LOW);//START
delayMicroseconds(UART_DELAY); //START BIT WAIT
for (int ii = 0; ii < 8; ii++) {
DW(TX1, (ch >> ii) & 1 );
delayMicroseconds(UART_DELAY); //DATA 1-8BIT WAIT
}//for
DW(TX1, HIGH);//Stop
delayMicroseconds(UART_DELAY); //StOP BIT WAIT
}//pc_putc
//文字列の表示
int pc_printf(char *str1) {
//文字の中身がゼロか
while (*str1) {
//一文字出力
pc_putc(*str1 ++);
} //while
//戻り値
return (0);
}//pc_printf
//初期化
void setup() {
delay(3000); //not Delete
Serial.begin(9600);
pinMode(in_pwm, INPUT); //pa11
//TXポートの初期化
pinMode(TX1, OUTPUT);
DW(TX1, HIGH);
//pc_printf("<STgggg>\r\n"); //debug
} //setup
//メインループ
void loop()
{
// pc_printf("L\r\n"); //debug
//トリガー待ち
// 受信データがあった時だけ、処理を行う
while (!Serial.available()) {} // 受信データがあるか?
int u_key = Serial.read(); // 1文字だけ読み込む 空読み
//PWMでデータ取得
int pwmco2 = pulseIn(in_pwm, HIGH, 2000000);
// //データの表示 debug 1
// String thisString9 = String( pwmco2 );
// pc_printf( (char *)thisString9.c_str() );
// pc_printf( "\r\n" );
if (pwmco2 <= 400 ) {
pwmco2 = 400;
}
if (pwmco2 >= 2400 ) {
pwmco2 = 2400;
}
pwmco2 = pwmco2 - 400;
int vel = (pwmco2 * 523) >> 12;
Serial.write( (char)vel );
// //データの表示 debug 2
// String thisString9 = String( vel );
// pc_printf( (char *)thisString9.c_str() );
// pc_printf( "\r\n" );
// delay(500); //debug 後で消す
} //loop
arduino マスター
//PWM_SER_m_UNO_1
#include <Arduino.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
//初期化
void setup()
{
//シリアルポートの初期化
Serial.begin(9600);
//ソフトウェアシリアルの初期化
mySerial.begin(9600);
} //setup
//メインループ
void loop()
{
//読み込み
int b = 0;
mySerial.print("S"); delay(5); //トリガーを投げる
while ( mySerial.available() ) {
//Serial.println( mySerial.available() );//debug
b = mySerial.read();//受信
//Serial.println( b );//debug
Serial.print("255,"); //debug
Serial.print( b ); //UNO
Serial.print(",0"); //debug
Serial.println();
}//while
delay(500); // 0.5秒の待ち
} //loop