mirceacra Postat Iunie 7, 2014 Partajează Postat Iunie 7, 2014 (editat) 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 Iunie 7, 2014 de mirceacra Link spre comentariu
mflorian24 Postat Iunie 10, 2014 Partajează Postat Iunie 10, 2014 Î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
mirceacra Postat Iunie 12, 2014 Autor Partajează Postat Iunie 12, 2014 Multumesc mult, trebuie sa vina encoderele si ma apuc de testat. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum