Waarde rotary encoder

Arduino specifieke Software
Berichten: 3
Geregistreerd: 23 Jul 2020, 22:03

Waarde rotary encoder

Berichtdoor barbus » 25 Jul 2020, 18:08

Hallo allemaal,
ben nieuw op het forum en vrees dat ik mijn vraag in de verkeerde afdeling van het forum stelde.
Hopelijk is het nu correct.
Ik vroeg me af of iemand me een zetje kan geven in de goede richting bij het volgende:
De code compileert goed, alleen krijg ik de waarde van de rotary encoder wel te zien op de seriële monitor, maar niet op de lcd.

grtjs
barbus


Code: Alles selecteren
#include <EEPROM.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Rotary.h>
Rotary rotary = Rotary(3, 2);

#define I2C_ADDR    0x27
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C  lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);

const int buttonPin = 5;
const int PinA = 2;
const int PinB = 3;
int buttonPushCounter = 0;
bool buttonState;

int lastCount = 0;
volatile int Pos = 0;


int Sensors = 0;
int Ventings = 0;
int Doseer = 0;

int address0 = 0;
int address1 = 1;
int address2 = 2;
int address3 = 3;
int address4 = 4;

void isr ()
{
  static unsigned long lastInterruptTime = 0;
  unsigned long interruptTime = millis();
  if (interruptTime - lastInterruptTime > 5)
  {
    if (digitalRead(PinB) == LOW)
    {
      Pos-- ;
    }
    else {
      Pos++ ;
    }
  }
  lastInterruptTime = interruptTime;
  //Serial.println(Pos);
}

void setup() {
  Serial.begin(9600);
  lcd.begin(20, 4);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);

  attachInterrupt(0, isr, LOW);

  pinMode(PinA, INPUT_PULLUP);
  pinMode(PinB, INPUT_PULLUP);
  pinMode(buttonPin, INPUT_PULLUP);
  buttonState = false;
}

void Coder()
{
  /* if ((!digitalRead(buttonPin)))
    {
     Pos = 0;
     while (!digitalRead(buttonPin))
       delay(10);
    }*/
  if (Pos != lastCount)
  {
    lastCount = Pos ;
  }
}

void Instellen()
{
  //Serial.println (Pos);
  if (digitalRead(buttonPin) == LOW)
  {
    if (buttonState == false)
    {
      buttonPushCounter++;
      if ( buttonPushCounter == 8)
      {
        buttonPushCounter = 0;
      }
      buttonState = true;
    }

    switch (buttonPushCounter)
    {
      case 0:

        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("PLEASE PRESS BUTTON");
        lcd.setCursor(0, 1 );
        lcd.print("TO CHANGE VALUES");
        break;

      case 1:

        lcd.clear();
        EEPROM.read(address0);
        Sensors = Pos;
        if (Sensors > 2)Sensors = 2;
        if (Sensors < 1)Sensors = 1;

        lcd.setCursor(0, 0);
        lcd.print("SENSORS = ");
        lcd.print(Sensors);
        lcd.setCursor(11, 0);
        lcd.print("  ");
        lcd.setCursor(0, 3);
        lcd.print("PRESS = SET        ");
        break;

      case 2:
        EEPROM.update(address0, Sensors);
        lcd.setCursor(0, 3);
        lcd.print("DONE SENSORS       ");
        Pos = 0;
        break;

      case 3:

        Ventings = Pos;
        if (Ventings > 12)Ventings = 12;
        if (Ventings < 1)Ventings = 1;

        lcd.setCursor(0, 1);
        lcd.print("VENTINGS/DAY = ");
        lcd.print(Ventings);
        if (Ventings < 10)
        {
          lcd.setCursor(16, 1);
          lcd.print(" ");
        }
        lcd.setCursor(17, 1);
        lcd.print("  ");
        lcd.setCursor(0, 3);
        lcd.print("PRESS = SET        ");
        break;

      case 4:
        EEPROM.update(address1, Ventings);
        lcd.setCursor(0, 3);
        lcd.print("DONE VENTINGS      ");
        Pos = 0;
        break;

      case 5:

        Doseer = Pos;
        if (Doseer > 100)Doseer = 100;
        if (Doseer < 1)Doseer = 1;
        if (Doseer < 100)
        {
          lcd.setCursor(13, 2);
          lcd.print("  ");
        }
        if (Doseer < 10)
        {
          lcd.setCursor(12, 2);
          lcd.print(" ");
        }
        lcd.setCursor(0, 2);
        lcd.print("DOSING % = ");
        lcd.print(Doseer);
        lcd.setCursor(0, 3);
        lcd.print("PRESS = SET        ");
        break;

      case 6:
        EEPROM.update(address2, Doseer);
        lcd.setCursor(0, 3);
        lcd.print("DONE-PRESS TO CHANGE");
        Pos = 0;
        break;

      case 7:
        lcd.clear();
        Sensors = EEPROM.read(address0);
        lcd.setCursor(0, 0);
        lcd.print("SENSORS = ");
        lcd.print(Sensors);
        lcd.setCursor(11, 0);
        lcd.print("  ");

        Ventings = EEPROM.read(address1);
        lcd.setCursor(0, 1);
        lcd.print("VENTINGS/DAY = ");
        lcd.print(Ventings);
        if (Ventings < 10)
        {
          lcd.setCursor(16, 1);
          lcd.print(" ");
        }

        Doseer = EEPROM.read(address2);
        lcd.setCursor(0, 2);
        lcd.print("DOSING % = ");
        lcd.print(Doseer);
        if (Doseer < 100)
        {
          lcd.setCursor(13, 2);
          lcd.print("  ");
        }
        if (Doseer < 10)
        {
          lcd.setCursor(12, 2);
          lcd.print(" ");
        }
        lcd.setCursor(0, 3);
        lcd.print("PRESS TO CHANGE");
        break;
    }
  }
  else
  {
    buttonState = false;
  }
}
void loop()
{
  Serial.println (Pos);
  Instellen();
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Waarde rotary encoder

Berichtdoor Koepel » 25 Jul 2020, 19:00

barbus schreef:Sorry, ken het gebruik van het forum niet zo goed.
De gebruikte library is <Rotary.h>


Je kunt via de '!' knop een moderator vragen om die andere te verwijderen.
Er wordt hier niet moeilijk gedaan, maar een Arduino-vraag bij de "Forum regels" is wel een beetje vreemd.

Dat je <Rotary.h> in je sketch include, dat zie ik ook wel. Maar welke library is het ? Je hebt iets geïnstalleerd of aangeklikt of gedownload.
Het is ook voor jezelf handig om dat te weten. Stel dat je de Arduino IDE op een andere computer installeert, en je voegt de LiquidCrystal_I2C library weer toe, hoe voeg je dan de "Rotary" library toe ? Er zijn trouwens vele verschillende "LiquidCrystal_I2C" libraries, dus ook bij die library is het handig als je weet welke het is. Dat kun je allemaal als commentaar in de sketch zetten.

Berichten: 3
Geregistreerd: 23 Jul 2020, 22:03

Re: Waarde rotary encoder

Berichtdoor barbus » 25 Jul 2020, 19:28

Hoe kan ik achterhalen welke library ik gebruikt heb?
In de map libraries heb ik verschillende " encoder - libraries " zitten.
Welke ik gebruikt heb voor deze sketch weet ik niet meer.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Waarde rotary encoder

Berichtdoor shooter » 27 Jul 2020, 09:49

de lcd staat in het instellen menu maar niet apart in de loop dus als je daar een timer elke seconde naar je lcd laat schrijven zou het moeten werken.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: aubotarip, eyedatoni, ojulaqrese en 23 gasten