x 動作確認済み2022/5/20 15:20
x OBでリセットオンリーがわかる人むけ
x リセット改造かリセットを接続してください
目的
0x40(8ビット表記0x80)で値を受信して
アナログサーボ信号を出力
動くかどうかわからないがやつてみよう
とりあえず総当たりでpwm出力を調べる
1ピン
PB7 OK
PB8 OK
PB9 OK
4ピン
PA0 OK
PA1 OK
PA2 OK
5ピン
PA11 OK
仕様
1 I2C SDA
2 VDD
3 GND
4 リセットオンリー
8 SWD SWCLK - I2C SCL
7 SWD SWDIO
6 デバッグ出力用ソフトウェアシリアル
5 PWM
プログラム(完成)
//I2C_PWM_031_1
#include <Arduino.h>
#include <Wire.h>
#define TX1 PA12 // 4pin
#define DD PA11 // potentiometer connected to analog pin x
#define DW digitalWrite
#define UART_DELAY 102 // 9600bps ok 031
//仮想シリアルへの一文字出力 9600bps
int 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
return (0);
}//pc_putc
//文字列の表示
int pc_printf(char *str1) {
//文字の中身がゼロか
while (*str1) {
//一文字出力
pc_putc(*str1 ++);
} //while
//戻り値
return (0);
}//pc_printf
//初期化
void setup()
{
//ポートをhiにする 初期化
pinMode(TX1, OUTPUT);
DW(TX1, HIGH);
pc_printf("STAR\r\n"); //debug
pinMode(DD, OUTPUT); // sets the LED pin as output
analogWriteFrequency(50);
analogWriteResolution(16);
//I2Cの初期化
//Wire.begin(PA12, PA11); //stm32g031
Wire.begin();
Wire.begin(0x40); //I2Cスレーブアドレスの設定
Wire.onReceive(receiveEvent); //データが来ると呼ばれる関数
} //setup
//メインループ
void loop()
{
} //loop
//レシーブイベント
void receiveEvent(int howMany) {
int x = Wire.read(); //I2C受信データの読み込み
char c_hex[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};
char buf[] = { '[', c_hex[(x >> 4) & 0x0f], c_hex[x & 0x0f] , ']', 0 };
//char buf[] = { x, 0 };
//I2Cスレーブの受信データの表示
//pc_putc(x);
pc_printf( buf ); //debug
analogWrite(DD, 1310 + (26 * x) ); // analogRead values go from 0
// to 4095, pwmWrite values
// from 0 to 65535, so scale roughly
}//receiveEvent
A 41を連続
//I2C_A_031_1
#include <Arduino.h>
#include <Wire.h>
//STM32G031J6M6 i2cピンの定義
#define sdaPin PA12 // ArduinoA4
#define sclPin PA11 // ArduinoA5
//#define en PB7 // 1pin
#define ADDR1 0x40
//初期化
void setup() {
delay(3000); //not Delete
// //GPIOの初期化
// pinMode(en, OUTPUT);
//i2cの初期化
//Wire.begin(sdaPin, sclPin); //STM32G031J6M6
Wire.begin();
}//setup
//メインループ
void loop() {
// digitalWrite(en, 1); //LED ON debug
//I2Cに送信
Wire.beginTransmission(ADDR1);
Wire.write('A');
Wire.endTransmission();
delay(500);//0.5秒待つ
// digitalWrite(en, 0); //LED OFF debug
delay(500);//0.5秒待つ
}//loop