• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Temperatura + enkoder + oled
#1
Witam.

Mam problem z programem jeżeli chodzi o czasy odświeżania temperatury i odczyty enkodera. 
Problem polega na tym, że jeżeli odczytuje temperature i wyświetlam ja na oled to enkoder działa z opóźnieniem odczytu temperatury. 
I kolejna kwestia jak zaokrąglić odczyt temp. do liczb całkowitych, narazie robię to na zmiennej ale wolał bym użyć innego rozwiązania.
Podzespoły:
-Arduino Nano
-Oled 1306
-czujnik temp. DS18B20
-enkoder KY-040 z rezystorami podciagajacymi
Kod:
#define PinA 2 ///pin A enkodera
#define PinB 3 ///pin B enkodera
#define przycisk 4 /// przycisk enkodera
#define OLED_ADDR   0x3C // adres wyswietlacza
#define ILOSC_KROKOW 32 //ilosc krokow silnika
#define predkosc 100///Predkosc silnika krokowego
#define ilosc_krokow 200 ///ilosc krokow jednego kieliszka
#define ONE_WIRE_BUS 5 ///pin sondy
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Stepper.h> //biblioteka silnikow krokowych
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
Adafruit_SSD1306 display(128, 64); //rozdzielczosc  wyswietlacza
Stepper krokowiec(ILOSC_KROKOW, 8, 9, 10, 11); //piny do sterowania krokowcem


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);




unsigned long time = 0;
long ilosc_impulsow = 1;
int licznik = 0;
int val;
int valA;

byte menuCount = 1;
byte dir = 0;
bool runState = false;
unsigned long czas = 0; //czas arduino
unsigned long temp = 0;


void setup()
{
czas = millis();
sensors.begin();
pinMode (4, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
Serial.begin(9600);
pinMode(PinA,INPUT); //pin A enkodera wejscie
pinMode(PinB,INPUT); //pin b enkodera wejscie
pinMode(przycisk,INPUT_PULLUP); //wejscie przycisku z podciagnieciem

attachInterrupt(0, blinkA, LOW);
attachInterrupt(1, blinkB, LOW);
time = millis();
display.clearDisplay();
display.display();
}


void loop()
{
  int temperatura = (sensors.getTempCByIndex(0));
  sensors.requestTemperatures(); //pobranie temp
  Serial.println(sensors.getTempCByIndex(0));
  Serial.println(temperatura);

  while (licznik != ilosc_impulsow)
{
licznik = ilosc_impulsow;
Serial.println(licznik);
}
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);

  display.setCursor(15, 0);
  display.println("PIJEMY ?");
  //---------------------------------
  display.setTextSize(5);
  display.setCursor(50, 30);
  display.println(licznik);
  display.display();
  /////////////temperatura
     display.setTextColor(WHITE);
     display.setTextSize(2);
     display.setCursor(5,50);
     display.print (temperatura);
     display.setTextSize(1);
     display.print("*");
     display.setTextSize(2);
     display.print("C");
     display.display();


///odczyt licznika i polanie
if (digitalRead (przycisk)== LOW){
  for (val = 0; val < licznik; val++) { //odczyt zmiennej licznika i powtorzenie x razy
     display.clearDisplay();
     display.setTextSize(2);
     display.setCursor(10, 25);
     display.println("POLEWANIE");
     //display.display();
     krokowiec.setSpeed(predkosc);
     krokowiec.step(ilosc_krokow);
     }
  }
  }
void blinkA()
{
if ((millis() - time) > 10)
ilosc_impulsow--;
    if (ilosc_impulsow<1)ilosc_impulsow=1;
time = millis();

}

void blinkB()
{
if ((millis() - time) > 10)
ilosc_impulsow++ ;
     if (ilosc_impulsow>12)ilosc_impulsow=12;
time = millis();
}

Pozdrawiam Smile
 
Odpowiedź
  


Wiadomości w tym wątku
Temperatura + enkoder + oled - przez mateuszfcg - 21-05-2020, 20:22
RE: Temperatura + enkoder + oled - przez Jarewa0606 - 21-05-2020, 20:56
RE: Temperatura + enkoder + oled - przez mateuszfcg - 21-05-2020, 21:32
RE: Temperatura + enkoder + oled - przez Jarewa0606 - 21-05-2020, 22:08
RE: Temperatura + enkoder + oled - przez mateuszfcg - 22-05-2020, 23:07
RE: Temperatura + enkoder + oled - przez kaczakat - 23-05-2020, 00:41

Skocz do:


Przeglądający: 1 gości