Skocz do zawartości

Problem z enkoderem


beekky

Pomocna odpowiedź

cześć,

zaprogramowałem menu na wyświetlacz lcd 20x4 i2c korzystając z arduino uno r4 minima. korzystam w tym sofcie z enkodera i podczas poruszania się po menu wszystko ładnie działa. jednak jak wybiorę jedna z opcji próbuje ustawić jeden z parametrów tym samym enkoderem nie odczytuje tego ze nim kręcę. poniżej wrzucam soft:

#include <LCD-I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 9
#define vent 8
#define coil1 6 
#define coil2 7 
#define mode A0
#define CLK 2
#define DT 3
#define SW 4

double temp1;
float temp2;
int temp = 0;
int tmax = 0;
float tavg;
int counterLast = 0;
int maxCounter = 1;
int aState;
int aLastState;
int SWState;
int SWStateLast;
int pushed = 0;
int page = 1;
int menuPosition = 0;
int menuPositionLast = 0;
int menu;
int val = 0;
int set = 0;
int fan = 0;
int fanmax = 0;
char *tryby[]={"PLA" , "UPLA" , "ABS" , "PETG", "NYLON" , "GRIP" , "ASA" , "HIPS" , "PA12CF15"};
int counter = 0;
int counter2 = 0;
int currentStateCLK;
int lastStateCLK;
int currentStateCLK2;
int lastStateCLK2;
String currentDir ="";
unsigned long lastButtonPress = 0;
int dupa;
int temp_temp = 0;

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

LCD_I2C lcd(0x27, 20, 4); //zdekodować adres wyświetlacza 

void setup() 
{
        
    Wire.begin();
    lcd.begin(&Wire);
    lcd.display();
    lcd.backlight();
    sensors.begin();
    pinMode(vent,OUTPUT);
    pinMode(coil1,OUTPUT);
    pinMode(coil2,OUTPUT);
    pinMode(mode,INPUT);
    lcd.clear();
    pinMode(CLK,INPUT);
	  pinMode(DT,INPUT);
	  pinMode(SW, INPUT_PULLUP);
    Serial.begin(9600);
    lastStateCLK = digitalRead(CLK);
    val=0;
    menu=0;
    
}

void updateMenu() {
  switch (menu) {
    case 0:
      //menu = 1;
      break;
    case 1:
      lcd.clear();
      lcd.print(">PLA");
      lcd.setCursor(0, 1);
      lcd.print(" UPLA");
      break;
    case 2:
      lcd.clear();
      lcd.print(" PLA");
      lcd.setCursor(0, 1);
      lcd.print(">UPLA");
      break;
    case 3:
      lcd.clear();
      lcd.print(">ABS");
      lcd.setCursor(0, 1);
      lcd.print(" PETG");
      break;
    case 4:
      lcd.clear();
      lcd.print(" ABS");
      lcd.setCursor(0, 1);
      lcd.print(">PETG");
      break;
    case 5:
      lcd.clear();
      lcd.print(">NYLON");
      lcd.setCursor(0, 1);
      lcd.print(" GRIP");
      break;
    case 6:
      lcd.clear();
      lcd.print(" NYLON");
      lcd.setCursor(0, 1);
      lcd.print(">GRIP");
      break;
    case 7:
      lcd.clear();
      lcd.print(">ASA");
      lcd.setCursor(0, 1);
      lcd.print(" HIPS");
      break;
    case 8:
      lcd.clear();
      lcd.print(" ASA");
      lcd.setCursor(0, 1);
      lcd.print(">HIPS");
      break;
      case 9:
      lcd.clear();
      lcd.print(">PA12CF15");
      lcd.setCursor(0, 1);
      lcd.print(" ODCZYT DANYCH");
      break;
    case 10:
      lcd.clear();
      lcd.print(" PA12CF15");
      lcd.setCursor(0, 1);
      lcd.print(">ODCZYT DANYCH");
      break;  

    case 11:
      menu = 10;
      break;
  }
}
void PLA()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  encoder2();
  //encoder();
  val=1;

  if(set==0)
  {
    if(val==1)
    {
      if(temp>=0 && temp<=50){
      temp=counter2*5;
      
    }
      else if(temp>50){
      temp=0;
    }
    while(!digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
  }
  }
  if(set==1){
    if(val==1)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(!digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
  if(set==2){
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
  }
}

void UPLA()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=2;
  if(set==0)
  {
    if(val==2)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==2)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax)
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void ABS()
{
  val=3;
  if(set==0)
  {
    if(val==3)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==3)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void PETG()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=4;
  if(set==0)
  {
    if(val==4)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==4)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax)
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void NYLON()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=5;
  if(set==0)
  {
    if(val==5)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==5)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax)
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void GRIP()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=6;
  if(set==0)
  {
    if(val==6)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==6)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void ASA()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=7;
  if(set==0)
  {
    if(val==7)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==7)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void HIPS()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=8;
  if(set==0)
  {
    if(val==8)
    {
      if(temp>=0 && temp<=50){
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==8)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void PA12CF15()
{
  pomiar();
  pomiar2(); 
  average();
  display();
  val=9;
  if(set==0)
  {
    if(val==9)
    {
      if(temp>=0 && temp<=50){
      encoder();
      temp=counter*5;
    }
      else if(temp>50){
      temp=0;
    }
    if(digitalRead(SW == HIGH))
      {
      temp=tmax;
      set=1;
      }
    else if(digitalRead(SW==LOW))
    {
    }
  }
  }
  if(set==1){
    if(val==9)
    {
    if(fan>=0 && fan<=255){
      fan=counter*5;
    }
    else if(fan>255){
      fan=0;
    }
    if(digitalRead(SW == HIGH))
      {
      fan=fanmax;
      set=2;
      }
      else if(digitalRead(SW==LOW))
      {
    }
  }
  }
    analogWrite(vent,fanmax);
  if (tavg > tmax) //zmienić temp z 50
 { 
    digitalWrite(coil1,LOW);
    digitalWrite(coil2,LOW);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("   ");
    lcd.setCursor(15, 3);
    lcd.print("   ");
  }
  else if (tavg < tmax)
  {
    digitalWrite(coil1,HIGH);
    digitalWrite(coil2,HIGH);
    lcd.setCursor(0, 3);
    lcd.print("    ");
    lcd.setCursor(12, 3);
    lcd.print("C1");
    lcd.setCursor(15, 3);
    lcd.print("C2");
  }
  delay(200);  
}
void executeAction() {
  switch (menu) {
    case 1:
      PLA();
      break;
    case 2:
      UPLA();
      break;
    case 3:
      ABS();
      break;
    case 4:
      PETG();
      break;
    case 5:
      NYLON();
      break;
    case 6:
      GRIP();
      break;
    case 7:
      ASA();
      break;
    case 8:
      HIPS();
      break;
    case 9:
      PA12CF15();
      break;
    case 10:
      display();
      break;
  }
}
void pomiar()
{
  sensors.requestTemperatures();
  temp1=sensors.getTempCByIndex(0);
}
void pomiar2()
{
  sensors.requestTemperatures();
  temp2=sensors.getTempCByIndex(1);
}
void average(){
  tavg=(temp1+temp2)/2;
}
void display()
{
  lcd.setCursor(0, 0);
  lcd.print("TZ: ");
  lcd.print(temp);
  lcd.print(" FAN: ");
  lcd.print(fan);
  lcd.setCursor(0,1);
  lcd.print("AVG: ");
  lcd.print(tavg,2);
}
void encoder() {

	currentStateCLK = digitalRead(CLK);

	if (currentStateCLK != lastStateCLK  && currentStateCLK == 1){

		if (digitalRead(DT) != currentStateCLK) {
			counter ++;
      counter2 ++;
			currentDir ="CW";
		} else {
			counter --;
      counter2 --;
			currentDir ="CCW";
		}
      if(counter>10){
        counter=0;
        counter2=0;
      }
      else if(counter<0){
        counter=0;
        counter2=0;
      }
	}

	lastStateCLK = currentStateCLK;

	int btnState = digitalRead(SW);

	if (btnState == LOW) {
		if (millis() - lastButtonPress > 50) {
		}

		lastButtonPress = millis();
	}
	delay(1);
}
void encoder2() {

	currentStateCLK2 = digitalRead(CLK);

	if (currentStateCLK2 != lastStateCLK2  && currentStateCLK2 == 1){

		if (digitalRead(DT) != currentStateCLK2) {
      counter2 ++;
		
		} else {
      counter2 --;
	
		}
      if(counter2>10){

        counter2=0;
      }
      else if(counter2<0){

        counter2=0;
      }
	}

	lastStateCLK2 = currentStateCLK2;

	int btnState = digitalRead(SW);

	if (btnState == LOW) {
		if (millis() - lastButtonPress > 50) {
		}

		lastButtonPress = millis();
	}
	delay(1);
}
void loop() {
    
    if(val==0)
  {
    encoder();
    //encoder2();
    Serial.print(counter);
    Serial.print(" , ");
    Serial.print(val);
    Serial.print(" , ");
    Serial.println(menu);
    while (!digitalRead(SW)==1)
    {
    executeAction();
    updateMenu();
    menu=counter;
    val=counter;
     }
  } 
    
     switch (val){
      case(1):
        //Serial.print(val);
        //Serial.print(tryby[0]);
        //Serial.println(tavg);
        Serial.print(counter2);
        Serial.print(" ");
        Serial.print(set);
        Serial.print(" ");
        Serial.println(temp);
        pomiar();
        pomiar2(); 
        average();
        display();
        PLA();
        //encoder2();
        delay(100);
        break;

        case(2):
        Serial.print(val);
        Serial.print(tryby[1]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        UPLA();
        delay(100);
        break;

        case(3):
        Serial.print(val);
        Serial.print(tryby[2]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        ABS();
        delay(100);
        break;

        case(4):
        Serial.print(val);
        Serial.print(tryby[3]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        PETG();
        delay(100);
        break;

        case(5):
        Serial.print(val);
        Serial.print(tryby[4]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        NYLON();
        delay(100);
        break;

        case(6):
        Serial.print(val);
        Serial.print(tryby[5]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        GRIP();
        delay(100);
        break;

        case(7):
        Serial.print(val);
        Serial.print(tryby[6]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        ASA();
        delay(100);
        break;

        case(8):
        Serial.print(val);
        Serial.print(tryby[7]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        HIPS();
        delay(100);
        break;

        case(9):
        Serial.print(val);
        Serial.print(tryby[8]);
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        PA12CF15();
        delay(100);
        break;

        case(10):
        Serial.print(val);
        Serial.print(" ");
        Serial.println(tavg);
        pomiar();
        pomiar2(); 
        average();
        display();
        delay(100);
        break;
     }
}

 

Edytowano przez beekky
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.