Sari la conținut
ELFORUM - Forumul electronistilor

encoder rotativ in loc de potentiometru . cum?


mirceacra

Postări Recomandate

Ma tot preocup de cateva zile cu modulul radio tda5787 si un arduino, am realizat prima oara varianat simpla cu reglajul frecventi printr-un potentiometru de 10k montat intre o intrare digitala si masa. As dori sa pun in loc de potentiometru un encoder digital . Cum se modifica programul pentru a folosi acest encoder in loc de potentiometru, fiecare pas sa fie de 0.1Mhz?

Am folosit schema si programul de mai jos de mai jos :

http://www.instructables.com/id/TEA5767-FM-Radio-Breakout-Board-for-Arduino/

Editat de mirceacra
Link spre comentariu
  • Răspunsuri 2
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • mirceacra

    2

  • mflorian24

    1

Top autori în acest subiect

Înlocuieşti în loop() liniile de cod

  int reading = analogRead(0);  //frequency = map((float)reading, 0.0, 1024.0, 87.5, 108.0);   frequency = ((double)reading * (108.0 - 87.5)) / 1024.0 + 87.5;  frequency = ((int)(frequency * 10)) / 10.0;

cu bucata de mai jos. Codul nu este testat, dar este cam tot ce îţi trebuie ca să porneşti.

  // get the current elapsed time  currentTime = millis();  if(currentTime >= (loopTime + CONSTANT)){    // 5ms since last check of encoder = 200Hz      encoder_A = digitalRead(pin_A);    // Read encoder pins    encoder_C = digitalRead(pin_C);       if((!encoder_A) && (encoder_A_prev)){      // A has gone from high to low       if(encoder_C) {        // C is high so clockwise        // increase the frequency, dont go over 108        if(frequency < 108.0){          frequency++;        }              }         else {        // C is low so counter-clockwise              // decrease the frequency, dont go below 87.5        if(frequency > 87.5){          frequency--;         }                }       }       encoder_A_prev = encoder_A;     // Store value of A for next time            loopTime = currentTime;  // Updates loopTime  }    // Other processing can be done here  //call setFrequiency();

de asemenea, mai trebuie să adaugi următoarele decalraţii (în cod am scris şi modul de legare a encoderului.):

unsigned long currentTime;unsigned long loopTime;const int pin_A = 2;  // encoder pin A to Arduino pin 2const int pin_C = 1;  // encoder pin C to Arduino pin 1//encoder pin B to GNDconst int CONSTANT = 2; //fine tuning for debouncing of different types of encodersunsigned char encoder_A;unsigned char encoder_C;unsigned char encoder_A_prev=0;double frequency = 93.0;void setup()  {  pinMode(pin_A, INPUT_PULLUP);  pinMode(pin_C, INPUT_PULLUP);  currentTime = millis();  loopTime = currentTime; } 
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări