先回の時とパっと見では代わり映えはないけど、、、
スケッチの中身をだいぶ整理した。
でもってPID制御・・・じゃなくてPD制御、ライントレースはある程度ズレたまま
でも気にしないので I はあまり意識して使わない。
P、D、FB周期とかをライントレースしながら変更できるようにした。
指乗り #マイクロロボ
— しん (@shinichi_nin) 2024年6月9日
走りながら
#ライントレース ゲイン調整♪
この軽い身のこなし、
見てやってください ^^ #M5Stack #スタックチャン #Arduino #BLE #ATtiny #赤外線シリアル通信 自称... #世界最小♪ pic.twitter.com/G1lJsX7fSC
動きからは全くわからんですが
なぞのバグのパッチあてをある程度直したり。。。
最近はちょっとやばいかもってのが、
C言語の基本・・・?をだいぶ忘れていい加減になってきてる。
特にArduino、ESP32を使いだしてから加速した...
Arduino言語
プロトタイプ宣言せんでもいいとかいろいろ初心者に
使いやすいようにしてる あれがほんと使いやすい。
ほとんどパソコンのプログラム・・・
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello, World!");
}
マイコンではお約束の面倒なおまじないが全くない。。。
型の感覚がなくなってきてる。
格安なのに高性能なESP32、
浮動小数点の演算が整数演算とほとんど変わらん速さ。 すごい。
物理値そのもので計算が一瞬。
30年前、車のエンジン制御のソフトの開発溶かしてた時 思い出す。
割り算は使っちゃいけない、いかに8ビットで収まるか
物理値のLSB・・・この言い方は変だけどの設定がキモで
いかにマイコンにやさしい演算に置き換えるかに神経使った。
PID制御そのものよりマイコンにうまく演算させるのを考える方が大変だった。
で・・・なぜかシリアルのチェックサム、
なんも難しいことしようとしてないんだけど・・・
なんか変だった。合計が127以下じゃないといかん???
なんでint8_tの正数側だけ???
結局 落ち着いたのは
こんな感じ
M5,ATtinyどっちも配列はこれ
int8_t Rx_data[10], Tx_data[10];
byte Rx_data_temp[10], Tx_data_temp[10];
◆M5 から ATtiny への 赤外線シリアル送信
//////////////////////////////////
M5の送信スケッチのチェックサム
void send_Tx_data(){
Tx_data_temp[0] = Tx_data[0];
Tx_data_temp[1] = Tx_data[1];
Tx_data_temp[2] = Tx_data[0] + Tx_data[1];
Serial1.write(Tx_data_temp, 3);
Serial1.flush();
}
//////////////////////////////////
ATtinyの受信スケッチのチェックサム
if( Rx_data[2] == (Rx_data[0]+Rx_data[1])){
・・・・・
}
//////////////////////////////////
◆ATtiny から M5 への 赤外線シリアル送信
//////////////////////////////////
ATtinyの送信チェックサム
void send_Tx_data(){
Tx_data_temp[0] = (byte)Tx_data[0];
Tx_data_temp[1] = (byte)Tx_data[1];
Tx_data_temp[2] = (byte)Tx_data[0] + (byte)Tx_data[1];
Serial.write(Tx_data_temp, 3);
Serial.flush();
}
//////////////////////////////////
M5の受信スケッチのチェックサム
if( (uint8_t)Rx_data[2] == *1{
・・・・
}
M5からATtinyへの通信は何も特に考えることなくできてた。
で、、、
ATtinyからM5も同じで行けると思ったらいけない
なんでだー???? でした、
本質的にはなんか別のとこに勘違い、間違いがあるのかなとも
思うけど、
なぜかATtinyから送る時には(byte)型キャスト付けてチェックサムつけて、
M5で受ける時には(uint8_t)で型キャストしてチェックサムの確認したら
うまく行くようになった。
これ見て、何を間違ってるとか
なんでそうせんといかんのかご存じの方いましたら
ご一報いただければ幸いです。
*1:uint8_t)Rx_data[0]+(uint8_t)Rx_data[1]