|  | .. zephyr:code-sample:: qdec | 
|  | :name: Quadrature Decoder Sensor | 
|  | :relevant-api: sensor_interface | 
|  |  | 
|  | Get rotation data from a quadrature decoder sensor. | 
|  |  | 
|  | Overview | 
|  | ******** | 
|  |  | 
|  | This sample reads the value of the counter which has been configured in | 
|  | quadrature decoder mode. | 
|  |  | 
|  | It requires: | 
|  |  | 
|  | * an external mechanical encoder | 
|  | * pin to be properly configured in the device tree | 
|  |  | 
|  | Building and Running | 
|  | ******************** | 
|  |  | 
|  | In order to run this sample you need to: | 
|  |  | 
|  | * enable the quadrature decoder device in your board's DT file or board overlay | 
|  | * add a new alias property named ``qdec0`` and make it point to the decoder | 
|  | device you just enabled | 
|  |  | 
|  | For example, here's how the overlay file of an STM32F401 board looks like when | 
|  | using decoder from TIM3 through pins PA6 and PA7: | 
|  |  | 
|  | .. code-block:: dts | 
|  |  | 
|  | / { | 
|  | aliases { | 
|  | qdec0 = &qdec; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | &timers3 { | 
|  | status = "okay"; | 
|  |  | 
|  | qdec: qdec { | 
|  | status = "okay"; | 
|  | pinctrl-0 = <&tim3_ch1_pa6 &tim3_ch2_pa7>; | 
|  | pinctrl-names = "default"; | 
|  | st,input-polarity-inverted; | 
|  | st,input-filter-level = <FDIV32_N8>; | 
|  | st,counts-per-revolution = <16>; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | Sample Output | 
|  | ============= | 
|  |  | 
|  | Once the MCU is started it prints the counter value every second on the | 
|  | console | 
|  |  | 
|  | .. code-block:: console | 
|  |  | 
|  | Quadrature decoder sensor test | 
|  | Position = 0 degrees | 
|  | Position = 15 degrees | 
|  | Position = 30 degrees | 
|  | ... | 
|  |  | 
|  |  | 
|  | Of course the read value changes once the user manually rotates the mechanical | 
|  | encoder. | 
|  |  | 
|  | .. note:: | 
|  |  | 
|  | The reported increment/decrement can be larger/smaller than the one shown | 
|  | in the above example. This depends on the mechanical encoder being used and | 
|  | ``st,counts-per-revolution`` value. |