3x Lineare meting tbv frees

Bedankt RbSCR & MAS3 heb het meteen toegepast, en werkt perfect.

Heb eers eens met de delay gespeelt maar heb uiteindelijk voor de luxe oplossing gekozen, het lijkt me inderdaad niet slim om in het hoofd programma de cyclustijd te gaan vertragen, zeker als er straks 3 metingen/encoders aan hangen

Ook meteen al het commentaar aangepast en up to date gemaakt :wink:

Dit verhaal kan ik nog niet echt volgen

Dan je stappen.
Als je een bepaald bereik hebt, dien je de stappen daarop af te stemmen.
Dat geldt nog niet zolang je aan het droogzwemmen bent, maar zeer zeker als je er een eindproduct van gaat maken.
Dan moet je dus zorgen dat als je aan een eind komt, je niet nog meer stappen kunt zetten.
Daarvoor alleen heb je dus al een stappenteller nodig die bijhoudt wat het is en wat het zal gaan worden.
En dat kun je mooi combineren met je code voor het beschrijven van je LCD.

Ook moet ik nog eens gaan achterhalen hoe ik nu van de pulsen naar mm kom, ik moet nog een vermenigvuldigings factor gaan inbouwen
Al met al nog genoeg te puzelen

Het programma zoals het er nu uit ziet (en het werkt XD):

#include <Wire.h>                                                //Toevoegen van I2C bibliotheek
#include <LiquidCrystal_I2C.h>                                   //Toevoegen van LCD bibliotheek
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);   //Instellen LCD adres voor de bus

int Xpulses;                                                     //Aanmaken van -pulses- als integer
int vorige_Xpulses;                                               //Aanmaken van -vorige_Xpulses- als integer
int A_SIG=0;                                                     //Aanmaken van -A_SIG=0- als integer
int B_SIG=1;                                                     //Aanmaken van -B_SIG=1- als integer


float Xmm;                                                       //Aanmaken van -Xmm- als float
float Ymm;                                                       //Aanmaken van -Ymm- als float
float Zmm;                                                       //Aanmaken van -Zmm- als float

void setup()                                                     //Begin van initialisatie en opstart (eenmalige doorloop bij opstart)
{
 {
  attachInterrupt(0, A_RISE, RISING);                            //Aangeven dat op pin0 een ineruptpin is en dat deze A_RISE heet en moet schakelen op stijgende flank
  attachInterrupt(1, B_RISE, RISING);                            //Aangeven dat op pin1 een ineruptpin is en dat deze B_RISE heet en moet schakelen op stijgende flank
  Serial.begin(115200);                                          //instellen baudrate  
  lcd.begin(20,4);                                               //aantal karakters en regels declareren van het LCD scherm 
 }
 {
// ------- 3x knipperen backlight  -------------
  for(int i = 0; i< 3; i++)                                      //Het volgende stukje code i keer doorlopen, tot i gelijk is aan 3, beginnen bij o en na elke doorloop één bij i optellen
  {
    lcd.backlight();                                             //lcd backlight aan
    delay(100);                                                  //100ms wachten
    lcd.noBacklight();                                           //lcd backlight uit
    delay(100);                                                  //100ms wachten
  }
  lcd.backlight();                                               //lcd backlight aan

//-------- Welkomst boodschap ------------------

  lcd.setCursor(0,0);                                            //Plaats cursor op karakter 0 op regel 0
  lcd.print("********************");                             //Schrijf (vanaf karakter 0 op regel 0) ********************
  lcd.setCursor(0,1);                                            //Plaats cursor op karakter 0 op regel 1
  lcd.print("*                  *");                             //Schrijf (vanaf karakter 0 op regel 1) *                  *
  lcd.setCursor(0,2);                                            //Plaats cursor op karakter 0 op regel 2
  lcd.print("*                  *");                             //Schrijf (vanaf karakter 0 op regel 2) *                  *
  lcd.setCursor(0,3);                                            //Plaats cursor op karakter 0 op regel 3
  lcd.print("********************");                             //Schrijf (vanaf karakter 0 op regel 3) ********************  
  delay(500);                                                    //500ms wachten
  lcd.setCursor(4,1);                                            //Plaats cursor op karakter 4 op regel 1
  lcd.print("Sjuul's DRO");                                      //Schrijf (vanaf karakter 4 op regel 1) Sjuul's DRO
  lcd.setCursor(2,2);                                            //Plaats cursor op karakter 2 op regel 2
  lcd.print("Mini Mill ZX7016");                                 //Schrijf (vanaf karakter 2 op regel 2) Mini Mill ZX7016
  delay(1000);                                                   //1000ms wachten
  
  //-------- Template ------------------
 
  lcd.clear();                                                   //Wis scherm
  lcd.setCursor(0,0);                                            //Plaats cursor op karakter 0 op regel 0
  lcd.print("X:               mm ");                             //Schrijf (vanaf karakter 0 op regel 0) X:               mm
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,1);                                            //Plaats cursor op karakter 0 op regel 1
  lcd.print("Y:               mm ");                             //Schrijf (vanaf karakter 0 op regel 1) Y:               mm 
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,2);                                            //Plaats cursor op karakter 0 op regel 2
  lcd.print("Z:               mm ");                             //Schrijf (vanaf karakter 0 op regel 2) Z:               mm 
  delay(100);                                                    //100ms wachten
  lcd.setCursor(0,3);                                            //Plaats cursor op karakter 0 op regel 3
  lcd.print("n:               RPM");                             //Schrijf (vanaf karakter 0 op regel 3) n:               RPM
   
 }
}                                                                //einde setup

  //-------- Hoofdprogramma ------------------

void loop(){                                                     //Hoofd programma, wordt elke cyclus doorlopen moet aanwezig zijn (mag leeg zijn)

if (Xpulses != vorige_Xpulses) {                                 //Als -Xpulsen- NIET gelijk is aan -vorige_Xpulses- volgende regel uitvoeren
               SchrijvenX();                                     //Aanroep van de functie schrijven 
               vorige_Xpulses = Xpulses;                         //Gewijzigde waarde onthouden        
  }
}
void SchrijvenX(){                                               //Functie met de naam SchrijvenX
   lcd.setCursor(3,0);                                           //Plaats cursor op karakter 3 op regel 0
   lcd.print("              ");                                  //ruimte leegmaken (vanaf karakter 0 op regel 3) dmv deze met spaties te overschrijven
   lcd.setCursor(3,0);                                           //Plaats cursor op karakter 3 op regel 0
   lcd.print(Xpulses);                                           //aantal pulsen schrijven 
}

void A_RISE(){                                                   //Functie met de naam A_Rise
 detachInterrupt(0);                                             
 A_SIG=1;
 
 if(B_SIG==0)
 Xpulses++;//moving forward
 if(B_SIG==1)
 Xpulses--;//moving reverse
 Serial.println(Xpulses);
 attachInterrupt(0, A_FALL, FALLING);
}

void A_FALL(){                                                   //Functie met de naam A_FALL
  detachInterrupt(0);
 A_SIG=0;
 
 if(B_SIG==1)
 Xpulses++;//moving forward
 if(B_SIG==0)
 Xpulses--;//moving reverse
 Serial.println(Xpulses);
 attachInterrupt(0, A_RISE, RISING);  
}

void B_RISE(){                                                   //Functie met de naam B_Rise
 detachInterrupt(1);
 B_SIG=1;
 
 if(A_SIG==1)
 Xpulses++;//moving forward
 if(A_SIG==0)
 Xpulses--;//moving reverse
 Serial.println(Xpulses);
 attachInterrupt(1, B_FALL, FALLING);
}

void B_FALL(){                                                   //Functie met de naam B_FALL            
 detachInterrupt(1);
 B_SIG=0;
 
 if(A_SIG==0)
 Xpulses++;//moving forward
 if(A_SIG==1)
 Xpulses--;//moving reverse
 Serial.println(Xpulses);
 
 attachInterrupt(1, B_RISE, RISING);
}