Rotary Encoder 2000st met Z fase. Help!
5 berichten
• Pagina 1 van 1
Rotary Encoder 2000st met Z fase. Help!
Hallo allemaal,
Allereerst ben ik hier nieuw en ben (nog) totaal onkundig in het programmeren met Arduino. Ik kan het een beetje lezen en begrijpen, maar schrijven is nog helemaal niets.
Ik heb een project(je) bedacht waarbij ik dmv een Uno uit een rotary encoder (Omron E6B2-CWZ6C) met 2000 stappen gegevens wil hebben op een gestructureerde manier. Deze encoder heeft een A, B en een Z fase. Deze Z fase geeft 1 puls per omwenteling. Ik zou graag een programmaatje willen maken waarbij ik de waardes in een lijst krijg en waarbij ik, ongeacht of ik een aantal x links of rechts draai, telkens dezelfde waarde op een cirkelhoek krijg. Ik heb het internet afgestruind, maar ben dit nog niet tegengekomen. Ik heb wel sketches gezien die optellen en aftrekken continue, maar na een omwenteling kloppen deze waardes niet meer.
Ik heb de volgende sketch gevonden wat denk ik een goede basis is, en die uitgebreid zal moeten worden. Wie kan mij helpen?
Deze geeft op elke puls aan of de draai naar links is of naar rechts. Dit moet een waarde worden en met de Z waarde wil ik het aantal omwentelingen registreren.
Allereerst ben ik hier nieuw en ben (nog) totaal onkundig in het programmeren met Arduino. Ik kan het een beetje lezen en begrijpen, maar schrijven is nog helemaal niets.
Ik heb een project(je) bedacht waarbij ik dmv een Uno uit een rotary encoder (Omron E6B2-CWZ6C) met 2000 stappen gegevens wil hebben op een gestructureerde manier. Deze encoder heeft een A, B en een Z fase. Deze Z fase geeft 1 puls per omwenteling. Ik zou graag een programmaatje willen maken waarbij ik de waardes in een lijst krijg en waarbij ik, ongeacht of ik een aantal x links of rechts draai, telkens dezelfde waarde op een cirkelhoek krijg. Ik heb het internet afgestruind, maar ben dit nog niet tegengekomen. Ik heb wel sketches gezien die optellen en aftrekken continue, maar na een omwenteling kloppen deze waardes niet meer.
Ik heb de volgende sketch gevonden wat denk ik een goede basis is, en die uitgebreid zal moeten worden. Wie kan mij helpen?
Deze geeft op elke puls aan of de draai naar links is of naar rechts. Dit moet een waarde worden en met de Z waarde wil ik het aantal omwentelingen registreren.
- Code: Alles selecteren
#include <rotary.h>
Rotary r = Rotary(2, 3);
void setup() {
Serial.begin(250000);
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
}
void loop() {
}
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result) {
Serial.println(result == DIR_CW ? "Rechts" : "Links");
}
}
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Rotary Encoder 2000st met Z fase. Help!
Wat is nu eigenlijk de vraag?
Re: Rotary Encoder 2000st met Z fase. Help!
welke library denk je dat goed is?
en ik mis een pin (de Z)
en dat stuk met pcmsk heb je ook ergens vandaan.
het is helaas niet zo dat je als je een programma vind ook gelijk weet hoe het werkt, dus je zult iets meer moeten doen.
de A en B gaan prima in een interupt en dan tellen hoeveel, de Z is alleen een positie en is dus niet richtinggevoelig.(wordt vaak gebruikt als nulpositie samen met een externe schakelaar of zo.
en ik mis een pin (de Z)
en dat stuk met pcmsk heb je ook ergens vandaan.
het is helaas niet zo dat je als je een programma vind ook gelijk weet hoe het werkt, dus je zult iets meer moeten doen.
de A en B gaan prima in een interupt en dan tellen hoeveel, de Z is alleen een positie en is dus niet richtinggevoelig.(wordt vaak gebruikt als nulpositie samen met een externe schakelaar of zo.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Rotary Encoder 2000st met Z fase. Help!
Sorry dat ik de probleemstelling niet duidelijk heb neergelegd, maar alleen mijn wens.
De code die ik heb neergelegd heb ik inderdaad online gevonden en op mijn encoder getest. Ik heb er meerdere gevonden en bekeken, maar deze is mooi klein en werkt goed. Daarom denk ik dat ik hierop wel verder kan bouwen. Alleen, door mijn gebrek aan programmeerkennis, zoek ik jullie hulp. Dus wat hulp hierbij wordt gewaardeerd!
De puls van de Z zal er in moeten, in de setup zal ik er een pin aan moeten toewijzen. Maar hoe kan ik die juist aanspreken in de loop zodat de arduino weet dat er een omwenteling geweest is?
Alvast bedankt voor jullie hulp!
Groet, Bartje
De code die ik heb neergelegd heb ik inderdaad online gevonden en op mijn encoder getest. Ik heb er meerdere gevonden en bekeken, maar deze is mooi klein en werkt goed. Daarom denk ik dat ik hierop wel verder kan bouwen. Alleen, door mijn gebrek aan programmeerkennis, zoek ik jullie hulp. Dus wat hulp hierbij wordt gewaardeerd!
De puls van de Z zal er in moeten, in de setup zal ik er een pin aan moeten toewijzen. Maar hoe kan ik die juist aanspreken in de loop zodat de arduino weet dat er een omwenteling geweest is?
Alvast bedankt voor jullie hulp!
Groet, Bartje
Re: Rotary Encoder 2000st met Z fase. Help!
er zijn op een UNO 2 pinnen die je voor een interupt kunt gebruiken, dus nu moet je keuzes gaan maken.
manier 1 op A en B een interupt zetten dan kun je 4 quadranten afvangen
de Z vraag je dan in die interupt ook gewoon door digitalRead(Zin).
dat is de methode waarbij je hoge resolutie kunt hebben.
buiten de interupt kun je dan nog iets doen met de teller. en bijv met de Z teller.
denk er wel aan dat je een long pakt als type dan kun je veel omwentelingen tellen.
en ja de code is klein maar het resultaat is alleen maar welke kant er draait. en geen positie.
(alhowel dat ook aan de library ligt daar zijn ook vele versies van.
een interupt is trouwens iets heel anders dan de loop.
even in verdiepen in de reference en je hebt weer iets belangrijks geleerd.
manier 1 op A en B een interupt zetten dan kun je 4 quadranten afvangen
de Z vraag je dan in die interupt ook gewoon door digitalRead(Zin).
dat is de methode waarbij je hoge resolutie kunt hebben.
buiten de interupt kun je dan nog iets doen met de teller. en bijv met de Z teller.
denk er wel aan dat je een long pakt als type dan kun je veel omwentelingen tellen.
en ja de code is klein maar het resultaat is alleen maar welke kant er draait. en geen positie.
(alhowel dat ook aan de library ligt daar zijn ook vele versies van.
een interupt is trouwens iets heel anders dan de loop.
even in verdiepen in de reference en je hebt weer iets belangrijks geleerd.
paul deelen
shooter@home.nl
shooter@home.nl
5 berichten
• Pagina 1 van 1
Terug naar Gezamenlijke projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten