I'm trying to use a simple rotary encoder to allow me to changes information "pages" on an OLED display by turning. I've tried to implement some code to allow me to do so but it's giving me an issue with the "feedgps".
Before I tried to add the encoder I had the code working fine. having the "pages" change based on time.
I'm using the following:
Teensy 4.0
GPS Module GPS NEO-6M
BME 280
0.96" Inch White I2c IIC Serial 128x64 OLED LCD LED
KY-040 360 Degree Rotary Encoder
The error message I'm receiving on compiling is the following:
'feedgps' was not declared in this scope
The code is too large to post so I have attached it.
BTW - I have recently been using one of those oleds along with a rotary encoder myself and I had a lot of trouble finding a reliable way of reading the rotary encoder (i.e. with it reliably moving one step at a time without jumping about etc.)
If you find you have similar issues take a look at the "rotary encoder interrupt routine" at the bottom of this sketch as whilst not very elegant I am really pleased with how well it works.
dport7:
Hello, thanks for responding. I tried the AutoFormat and didn't see anything change. Still received the same error.
AutoFormat only adjusts the text to a standard layout, it does not fix any errors or mistakes. By aligning the text certain typing errors/omissions can become more obvious.
If necessary, go through the sketch line by line and verify that every grouping character - "{ } ( ) [ ] " - has a mate.
dport7:
One of the issues I'm having is the encoder jumping or bouncing. Turning it very slowly the encoder value tends to jump all over the place.
This is the problem I was having myself and why I suggested you look at my code (post #2 above)
I have found that using this method resolves all this and it now moves one position per click every time.
alanesq:
This is the problem I was having myself and why I suggested you look at my code (post #2 above)
I have found that using this method resolves all this and it now moves one position per click every time.
Yes, I have looked at that.
I was having trouble picking apart the pieces I needed to implement in my code.
Any hints where to start there?
I have to apologise I'm very new to this.
Thanks for your help.
Hi,
I have had a try at modifying your sketch but I can't test it as I don't have all the required hardware etc. set up but hopefully it will at least demonstrate how it could be included in your code if it doesn't work?
Basically it just replaces the code in your "Encoder_san()"
It works by systematically going through each valid change in the rotary encoder pins and rejects any triggers which are not valid.
alanesq:
Hi,
I have had a try at modifying your sketch but I can't test it as I don't have all the required hardware etc. set up but hopefully it will at least demonstrate how it could be included in your code if it doesn't work?
Basically it just replaces the code in your "Encoder_san()"
It works by systematically going through each valid change in the rotary encoder pins and rejects any triggers which are not valid.
Thank you so much! It's very kind of you to put it together for me!!
I'm getting a Compiling error to the Teensy
It appears that the Serial.println is causeing the issue. When I take that out of the code it will compile and load. Although it's still acting in a similar way, and without that I can't see how the encoder is behaving.
Any thoughts?
Thank you!!!!
By far, the best rotary encoder technique I've come across is based on using state transition tables. If properly implemented, you get debouncing for free. See: Buxtronix: Rotary encoders, done properly.
gfvalvo:
By far, the best rotary encoder technique I've come across is based on using state transition tables. If properly implemented, you get debouncing for free. See: Buxtronix: Rotary encoders, done properly.
Hello gfvalvo!
Believe it or not (considering my lack of skill) I got your encoder library to work with my sketch!!
I looked at one of your examples and the encoder ran very fast and accurately.
When I implemented it into my sketch things slow down quite a bit.
Do you have any suggestions that might help it run a bit smoother?
See my updated sketch attached.
Thanks again!!
dport7:
When I implemented it into my sketch things slow down quite a bit.
Right here is a huge (although perhaps not the only problem):
while (millis() - start < 1000) { // Every 1 seconds we print an update
if (feedgps())
newdata = true;
}
That code will block execution of your application for up to one second while doing nothing but checking the GPS. The encoder library will still update because it runs on interrupts. But, your main application code will become totally unresponsive.
There are many examples and tutorials about how to achieve a multi-tasking environment on Arduino. A few are:
Arduino IDE: File --> Examples --> 0.2Digital --> BlinkWithoutDelay https://forum.arduino.cc/index.php?topic=503368.0