Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.4 kB
5
Indexable
Never
#include <Wire.h>
#include <TEA5767Radio.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);
TEA5767Radio radio = TEA5767Radio();
#define CLK 6
#define DT 7
#define SW 5

bool precise = false;

float frequency = 76.0;
int currentStateCLK;
int lastStateCLK;
String currentDir ="";
unsigned long lastButtonPress = 0;

void setup() {
  Wire.begin();
  radio.setFrequency(frequency); // pick your own frequency

	pinMode(CLK,INPUT);
	pinMode(DT,INPUT);

	lastStateCLK = digitalRead(CLK);

  Serial.begin(9600);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(3, 0);
  lcd.print("Frekvencia");
  lcd.setCursor(4, 1);
  lcd.print(String(frequency) + " FM");
}

void loop() {
        
	// Read the current state of CLK
	currentStateCLK = digitalRead(CLK);

	// If last and current state of CLK are different, then pulse occurred
	// React to only 1 state change to avoid double count
	if (currentStateCLK != lastStateCLK  && currentStateCLK == 1){

		// If the DT state is different than the CLK state then
		// the encoder is rotating CCW so decrement
		if (digitalRead(DT) != currentStateCLK) {
      if(frequency < 108){
        if(precise){
          frequency = frequency + 0.1;
        }
        else{
          frequency++;
        }
        lcd.clear();
        lcd.setCursor(3, 0);
        lcd.print("Frekvencia");
        lcd.setCursor(4, 1);
        lcd.print(String(frequency) + " FM");
        radio.setFrequency(frequency);
      }
		} else {
			if(frequency > 76){
			  if(precise){
          frequency = frequency - 0.1;
        }
        else{
          frequency--;
        }
        lcd.clear();
        lcd.setCursor(3, 0);
        lcd.print("Frekvencia");
        lcd.setCursor(4, 1);
        lcd.print(String(frequency) + " FM");
        radio.setFrequency(frequency);
      }
		}

		Serial.println(frequency);
	}

	// Remember last CLK state
	lastStateCLK = currentStateCLK;

	// Read the button state
	int btnState = digitalRead(SW);

	//If we detect LOW signal, button is pressed
	if (btnState == LOW) {
		//if 50ms have passed since last LOW pulse, it means that the
		//button has been pressed, released and pressed again
		if (millis() - lastButtonPress > 50) {
			Serial.println("Precise enabled!");
      precise = !precise;
		}

		// Remember last button press event
		lastButtonPress = millis();
	}
}