Hallo Zusammen,
Für ein kleines Projekt möchte ich einen Encoder auswerten. Hierbei
handelt es sich nicht um einen von einem Motor sondern um einen dieser
Handbedienten die Aussehen wie ein Potentiometer.
Ich habe nun in CubeIDE den Encoder bereits zum laufen gebracht, hierzu
benutze ich Timer3 auf einem STM32 Nucleo und die passenden Pins, den
Wert des Encoders rufe ich wie folgt ab:
1 | uint32_t myEncVal = 0;
|
2 | void StartEncoderTask(void *argument)
|
3 | {
|
4 | /* USER CODE BEGIN StartEncoderTask */
|
5 | HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
|
6 | /* Infinite loop */
|
7 | for(;;)
|
8 | {
|
9 | myEncVal= TIM3->CNT;
|
10 | osDelay(1);
|
11 | }
|
12 | /* USER CODE END StartEncoderTask */
|
13 | }
|
später wird der Wert dann wie folgt verwendet:
1 | extern uint32_t myEncVal;
|
2 | void HomeView::handleTickEvent(){
|
3 | Anzeige1.setValue(myEncVal);
|
4 | }
|
Das Funktioniert ohne Probleme wenn ich die Variable myEncVal beobachte
wird vom Variablen Wert 0 "nach rechts" gedreht zählt es hoch, und wird
vom Variablen Wert 0 "nach links" gedreht springt der Wert auf 1023 und
von dort abwärts.
Mein Problem ist nun aber, das ich gerne aus die Auswertung als letzte
Änderung erhalten möchte.
Aktuell is es jetz beispielsweise so das wenn ich den Encoder abfrage
erhalte ich die Zahl "500" ich weiss aber nicht wie der Encoder dies
erreicht hat.
Was ich mir wünschen würde, ist das der Wert "myEncVal" jeweils nur die
differenz zu letzen Mal abfragen beinhaltet. Also wenn der Encoder seit
der letzen Abfrage 4 mal nach rechts gedreht wurde sollte der Wert 4
sein, bei 4 mal nach links sollte der Wert -4 sein. Dreht man Ihn
zwischen den Abfragen 4 mal nach links und einmal nach rechts, wäre der
Wert -3. Das aber nur als hypothetische Angabe da man das kaum schafft.
Könnte mir jemand einen Tipp geben wie ich sowas lösen kann?
Viele Grüss
Timo