van liquid cristal naar oled

Arduino specifieke Software
Gebruikers-avatar
Berichten: 19
Geregistreerd: 09 Mrt 2017, 13:51
Woonplaats: GB

Re: van liquid cristal naar oled

Berichtdoor edensan » 14 Jun 2017, 08:31

Met de 8x8 gaat het goed!!

Code: Alles selecteren
/*========================================================================== 
  Author              : Fahmi Ghani
  Project       : Test Peristaltic pump
  Date                : 20 Sept 2014 
  Video     :https://www.youtube.com/watch?v=GdTUIwj5ros
  Hardware    : Arduino Uno, lcd keypad shield. ULN2003(for switching motor)
==========================================================================*/
 
#include <Arduino.h>
#include <U8x8lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // OLEDs without Reset of the Display

int keypad_pin = A0;
int Keypad_value = 0;
int Keypad_value_old = 0;

char Btn_push;

int Pump1 = 2;
int volume = 10;
int volumeOld = 10;
int Pump1State =0;

int MenuPage =1;
int MenuPageOld =1;

long previousMillis = 0; 
unsigned long currentMillis ;
long interval = 1000;
unsigned long multiplier = 1000; //value to change based on calibration
//multiplier = milliseconds needed to fill 1ml liquid

void setup()
{
   u8x8.begin();
   u8x8.setFont(u8x8_font_chroma48medium8_r);
  pinMode(Pump1, OUTPUT); 
  pinMode(10, OUTPUT); 
 
         u8x8.setCursor(0,15);
         u8x8.print("Peristaltic Pump");
         u8x8.setCursor(0,30);
         u8x8.print("Test");
         
       //
        delay(10000);
    u8x8.clear();
        MenuDisplay(MenuPage);
       
        analogWrite(10,50);
        delay(1000);       
}
void loop()
{
    Btn_push = ReadKeypad();
   
    //Change menu
    if(Btn_push == 'L') MenuPage =1;
    if(Btn_push == 'R') MenuPage =2;
   
    if(MenuPage != MenuPageOld)
    {
        MenuDisplay(MenuPage);
        MenuPageOld = MenuPage;
    }

    if(MenuPage ==1)
    {
        if(Btn_push == 'U' && volume <100)
          volume+=1;

        if(Btn_push == 'D'&& volume>0)
          volume-=1;
       
        if(volumeOld != volume)//update  u8x8 when got new volume
        {
             u8x8.setCursor(8,0);
             u8x8.print(volume);
             u8x8.print("ml ");
           
            volumeOld = volume;
             
        }
       
        if(Btn_push == 'S' )
        {
            RunPump(volume);
           
            MenuDisplay(MenuPage);
           
        }
    }
    if(MenuPage ==2)
    {
       if(Btn_push == 'S')
       {
           if(!Pump1State )
           {
             digitalWrite(Pump1,1);
              u8x8.setCursor(0,1);
              u8x8.print("Pump Run  ");
             
             Pump1State =1;
           }
           else
           {       
             digitalWrite(Pump1,0);
              u8x8.setCursor(0,1);
              u8x8.print("Pump Stop  ");
             
             Pump1State =0;
           }
           delay(100);
       }
       
    }

    delay(200);
 
}//--------------- End of loop() loop ---------------------
void MenuDisplay(int page)
{
    switch (page)
    {
       case 1:
          u8x8.clear();
           u8x8.setCursor(0,0);
           u8x8.print("Volume: ");
           u8x8.setCursor(8,0);
           u8x8.print(volume);
           u8x8.print("ml ");
           
          break;
       case 2:
             u8x8.clear();
  u8x8.clear();
           u8x8.setCursor(0,0);
           u8x8.print("Flush Water");
           
         break;
    }
 
}

void RunPump(unsigned long ml)
{
    previousMillis = millis();
    currentMillis = previousMillis;
   
    interval = ml *multiplier;
   
    digitalWrite(Pump1,1);
   
         u8x8.setCursor(4,1);
         u8x8.print("ml ");
         
       
    while(currentMillis - previousMillis < interval)
    {
        currentMillis = millis();
         u8x8.setCursor(0, 1);
         u8x8.print((currentMillis - previousMillis)/1000);
         
    }
         u8x8.setCursor(0, 1);
         u8x8.print((currentMillis - previousMillis)/1000);
         
   
    digitalWrite(Pump1,0);
    delay(1000);
}

char ReadKeypad()
{
  /* Keypad button analog Value
  no button pressed 1023
  select  741
  left    503
  down    326
  up      142
  right   0
  */
  Keypad_value = analogRead(keypad_pin);
 
  if(Keypad_value < 100)
    return 'R';
  else if(Keypad_value < 200)
    return 'U';
  else if(Keypad_value < 400)
    return 'D';
  else if(Keypad_value < 600)
    return 'L';
  else if(Keypad_value < 800)
    return 'S';
  else
    return 0;
 
}


nu verder... :mrgreen:

Advertisement

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

Re: van liquid cristal naar oled

Berichtdoor Koepel » 14 Jun 2017, 09:29

Bij Adafruit en U8g2 in de "Full screen buffer mode" is het nodig om de buffer naar het scherm te schrijven.
De U8g2 in 8x8 mode heet de "U8x8" en die gebruikt geen buffer, maar schrijft direct naar het scherm.
De wiki van de U8g2 beschijft dat allemaal: https://github.com/olikraus/u8g2/wiki

Dus als je de functies om de buffer naar scherm te schrijven niet wilt aanroepen, dan is er volgens mij alleen maar de U8x8. De andere modes gebruiken een buffer.

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: van liquid cristal naar oled

Berichtdoor baco1978 » 14 Jun 2017, 10:31

Koepel schreef:@baco1978, maar ik zie iets dat totaal anders is.

In die demo zie je volop gebruik van display.display(); terwijl jij dat nergens hebt.



oeps, helemaal overheen gelezen, gelukkig toch nog iemand die een betere blik er op heeft :)
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 19
Geregistreerd: 09 Mrt 2017, 13:51
Woonplaats: GB

Re: van liquid cristal naar oled

Berichtdoor edensan » 14 Jun 2017, 12:42

Ik krijg nu soort splashscherm "peristelic pump test"
Dan ververst het scherm en zie ik "volume 10 ml "
Dat automatisch naar 0 teld dan stop
Ik ga proberen Pushbuttons te installeren (die normaal in het LCD shield zitten)
Stap 1 is gezet...

Gebruikers-avatar
Berichten: 19
Geregistreerd: 09 Mrt 2017, 13:51
Woonplaats: GB

Re: van liquid cristal naar oled

Berichtdoor edensan » 14 Jun 2017, 19:16

zou het kunnen dat als ik aan een rotary encoder draai ik een vaste waarde krijg? ik ben 5 vaste waardes nodig... :geek:

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: avoveozonuni en 24 gasten