max6675 + энкодер

max232
Offline
Зарегистрирован: 22.05.2016

Здравствуйте!!! Использую для управления энкодер с RotaryEncoder.h все прекрастно работает, но стоит вывести на lcd температуру с max6675 энкодер тормозит


// Загрузка ЖК - библиотека и кодер
#include <LiquidCrystal.h>
#include <RotaryEncoder.h>
#include "max6675.h"
int thermoDO = 10;  //он же SO
int thermoCS = 9;
int thermoCLK = 8;  //он же SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

// Инициализировать LCD
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
// штырьки кодировщика
RotaryEncoder encoder(A0, A1);

int buttonPin = A2;
int result = 1;
long lcdUpdate;


void setup() {

  // put your setup code here, to run once:
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print("");
  digitalWrite(buttonPin, HIGH);
} //setup()

void loop()
{
  //Выводим температуру на lcd
//  lcd.setCursor (1, 1);
//  lcd.print(thermocouple.readCelsius());
//  delay(300);
  static int pos = 0;
  encoder.tick();

  int newPos = encoder.getPosition();

  if (pos < newPos) result++;
  if (pos > newPos) result--;
  if (result > 5) result = 1;
  if (result < 1) result = 5;
  if (pos != newPos) pos = newPos;

  if (millis() - lcdUpdate >= 100) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Please Select");

    if (result == 1) {
      lcd.setCursor(3, 3);
      lcd.print("FIRST");
    }
    if (result == 2) {
      lcd.setCursor(3, 3);
      lcd.print("SECOND");
    }
    if (result == 3) {
      lcd.setCursor(3, 3);
      lcd.print("THIRD");
    }
    if (result == 4) {
      lcd.setCursor(3, 3);
      lcd.print("FOURTH");
    }
    if (result == 5) {
      lcd.setCursor(3, 3);
      lcd.print("FIFTH");
    }
    lcdUpdate = millis();

    if (digitalRead(buttonPin) == LOW) {
      lcd.setCursor(8, 2);
      lcd.print("SELECT");
    }
  }
}

 

bizzon
Offline
Зарегистрирован: 29.03.2016

Сильно тормозит? В 34 строке delay зачем?

max232
Offline
Зарегистрирован: 22.05.2016

можно даже сказать что не реагируе ( , иногда срабатывает при вращении 1 щелчок за 3-5 сек. Без delay не  будет обновлятся показания термопары

bizzon
Offline
Зарегистрирован: 29.03.2016

//  lcd.print(thermocouple.readCelsius());

То ли  я слеповат стал... Не найду что-то откуда  дисплей данные берёт.

max232
Offline
Зарегистрирован: 22.05.2016

8 строка MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);