エンコーダー用M系列作成方法

未分類

ネットの記事を見てたらなんか出来そうだなーと、ExcelとPythonであれこれ試していたら出来たのでメモ書き(もっと別の方法もあるかもしれない)。8bitでしか検証していませんが、恐らく他のbit数でもいけるはず・・・?
フォトインタラプタを複数横に並べなくて済むので、地味に便利。

import sys

#
# main
#
def main(arg):
    list = []

    # 初期値
    data = 0b00000000

    for num in range(256):

        # 1bit左シフト
        data = data << 1
        data = data & 0b11111111

        # 0bit目に1をセット
        data = data | 0b1

        # 過去の値と被らなければそのまま採用
        if not data in list:
            list.append(data)
            print(format(data,'08b') + " " + str(data))

        # 被ったら0bit目を0にする
        else:
            data = data & 0b11111110
            if not data in list:
                list.append(data)
                print(format(data,'08b') + " " + str(data))

            # それでも値が被ったら終了
            else:
                print('値が重複しました ' + str(num))
                break

    print('end')

if __name__ == '__main__':
    main(sys.argv)

コメント