Arduino rotationsenkoder

Trädvy Permalänk
Medlem
Plats
~/Karlstad
Registrerad
Dec 2005

Arduino rotationsenkoder

Tjena!
Inför ett nytt projekt här hemma så har jag beslutat mig för att använda mig utav en arduino istället för en raspberry pi som jag är van att jobba med.
Jag har fått fart på allting egentligen utom min rotationsenkoder.
Jag har köpt ett par av denna typ: Rotationsenkoder

Med hjälp av följande bild har jag knåpat ihop lite kod som jag tycker borde fungera men det gör det inte.

Min kod för att provköra enkodern:

const int rotaryA = 24; const int rotaryB = 25; int rotaryAState; int rotaryALastState; void setup() { pinMode(rotaryA, INPUT_PULLUP); pinMode(rotaryB, INPUT_PULLUP); Serial.begin(9600); rotaryALastState = digitalRead(rotaryA); } void loop() { rotaryAState = digitalRead(rotaryA); if (rotaryAState != rotaryALastState){ if (rotaryAState == digitalRead(rotaryB)){ Serial.print(1); }else{ Serial.print(0); } } rotaryALastState = rotaryAState; }

Enkodern har 3 stift varav jag kopplat mittenstiftet till GND, de övriga två är till port24 och port25 på arduinon.
Mitt problem är att jag får väldigt konstig print. Om allt vore rätt så borde jag få en print som ser ut typ:
1111111111111111111111111 när jag vrider åt ena hållet och
0000000000000000000000000 när jag vrider åt andra.

Printsen jag får ser ut på följande sätt.
Vridning medurs:

1010101010111010100010101010101010101010101010111000100010101010101010001000101010001010

Vridning moturs:

1110101111111111111111111111111110111111111111101111111111111110111111111111111110111111111111101111111111111111

Så min fråga är egentligen om någon ser något uppenbart fel i koden eller har lite egen kod att dela med sig?

Arduinon jag har är en Mega 2560(borde inte spela någon roll).

Bara gammalt skräp...

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2006

Hur kommer det sig att du inte bara använder en trimpot kopplad till någon av de analoga ingångarna? Jag är rätt grön på arduino och frågar mest av intresse

Trädvy Permalänk
Medlem
Plats
~/Karlstad
Registrerad
Dec 2005
Skrivet av grovlimpa:

Hur kommer det sig att du inte bara använder en trimpot kopplad till någon av de analoga ingångarna? Jag är rätt grön på arduino och frågar mest av intresse

Vill kunna köra stegmotorer manuellt samt styra i en meny, då blir det naturligt att få pulser som input(tänker jag iaf^^)

Bara gammalt skräp...

Trädvy Permalänk
Medlem
Plats
Mälardalen
Registrerad
Mar 2010

Billiga mekaniska rotationsenkoders brukar ha rätt mycket "debounce" som man behöver sålla bort på något vis. Om det fungerar i ditt projekt kan det kanske vara värt att skaffa en optisk enkoder istället. Dem har inte detta problem, har bättre precision och är ofta byggda mycket bättre.

https://hifiduino.wordpress.com/2010/10/20/rotaryencoder-hw-sw-no-debounce/

http://forum.arduino.cc/index.php?topic=40382.0

7700K and gtx1080 @ toomany °C

Trädvy Permalänk
Medlem
Plats
~/Karlstad
Registrerad
Dec 2005

Hmm det var lite som jag misstänkte då...
Har beställt en enkoder som har inbyggd hårdvara för att hantera "bouncet". Får se om det hjälper annars kanske det får bli en optisk variant.
I värsta fall skulle jag kunna ersätta den med 2 knappar istället.
Ska testa lite att få till mjukvaran så den "skippar" bouncepartierna tills jag får mina grejjer.

Bara gammalt skräp...

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Dec 2003

Har byggt lite med dessa rotary encoders, funkar superbra, gäller bara att hitta rätt kod. Hade också lite problem med bounce i början men väldigt exakta sen. Var väldigt länge sedan dock så minns ingenting. Ska se om jag kan hitta koden.

AMD Phenom II X6 1090T @ 4100MHz @ 1.56v
2x 460 GTX @ 940/1100Mhz @ 1.212v

Plexibygge | Hemma hos mig | Flipperspel | Bilstereo

Trädvy Permalänk
Medlem
Registrerad
Maj 2017
Skrivet av Mylly:

Billiga mekaniska rotationsenkoders brukar ha rätt mycket "debounce" som man behöver sålla bort på något vis. Om det fungerar i ditt projekt kan det kanske vara värt att skaffa en optisk enkoder istället. Dem har inte detta problem, har bättre precision och är ofta byggda mycket bättre.

https://hifiduino.wordpress.com/2010/10/20/rotaryencoder-hw-sw-no-debounce/

http://forum.arduino.cc/index.php?topic=40382.0

Om man ska vara noga så är problemet bounce, debounce är ju det man gör för att inte lida av kontaktstudsandet.

Jag tänkte väl kanske att detta inte är ett problem då man använder gray-kod för dessa och gör man programmet på rätt sätt så borde det väl funka ändå. Jag har ett kökstimerprojekt med 5 rotary encoders som jag beställt från kina så men inte fått än så jag lär snart märka om det studsar...

http://www.hobbyelektronik.nu/forum/viewtopic.php?f=13&t=6