###実現したいこと
Arduinoへの書き込み用のプログラムを、python言語に書き換えたいんです。
python3でfirmataを使いたいんですが、GROVE-Encoderの値を表示できません。Noneしか表示されないんです。
###発生している問題
下のArduinoコードをfirmata(python3)に書き換えて、
print(Count)を(None以外)取得したいんです。
###該当のソースコード
#define ECA D3 #define ECB D4 byte curDat; //(変数)現在の入力ポートの読み出し値を保持 byte befDat = 0; //(変数)前回の読み出し値を保持 byte rotDir = 0; //←よくわからん。出てこない。 int Count = 0; byte inputMatch; //(変数)回転方向の変化を保持 byte matchCnt; //(変数)同状態の連続読み出しの回数を保持 byte rotPat = 0; // //↓初期化 // void setup() { pinMode(ECA,INPUT); pinMode(ECB,INPUT); curDat = 0; if(digitalRead(ECA)){ befDat |= 2; } if(digitalRead(ECB)){ befDat |= 1; } Serial.begin(19200); //シリアルボードの設定[bps] } // //↓メインループ // void loop() { byte dat; signed char val; curDat = 0; if(digitalRead(ECA)){ curDat |= 2; } if(digitalRead(ECB)){ curDat |= 1; } if(befDat == curDat){ if(!inputMatch){ //回転させてない間でずっと同じ信号発信 matchCnt++; if(matchCnt >= 3){ //状態確定 inputMatch = true; val = checkEnc(curDat); if(val != 0){ Count += val; Serial.print(Count); } } } //_↑ } else{ //1カチした時一瞬挙動 befDat = curDat; matchCnt = 0; inputMatch = false; //_↑ } // char c; //↓データをIDEからボードへ入力 // if(Serial.available()>0){ // c = Serial.read(); //データを1バイト読み込む // Serial.write(c); //そのままデータを送り返す // } //_↑ } signed char checkEnc(byte dat){ byte pat,i,j; rotPat <<= 2; rotPat |= (dat & 0x03); //←特にこの表記がわからんです if(rotPat == 0x4B){ //+パターン(時計回りに1カチ) return 1; } else if(rotPat == 0x87){ //-パターン(反時計回りに1カチ) return -1; } else{ return 0; } }
###試したこと
アナログピンにEncoderをつなぎ電圧を測定したら、5.0か0.0Vが出力されてました。
その電圧の値を回転の量に変換してほしいです。
###補足情報(言語/FW/ツール等のバージョンなど)
pyfirmataをVScodeのpython3でimportしてやろうとしているところです。
プログラムをはじめて半年で、絶賛勉強中です。
あなたの回答
tips
プレビュー