AQM0802 library > v0.2 > display current date and time (by yourself)

동작 확인
ESP-WROOM-02
Arduino IDE on Windows 7 pro 32bit

회로



ぃ tp // 이 m / 에우 gs / ms / 9d1b66 아 1d22805 아 fbc8
의 회로대로 구현

관련 회로도 htps : // 우 pゔぇr r. m / 7, f9 / e d476 아바아 01fdfbd / 아

사용 세트 ぃ tp // m / 7, f9 / ms / bf5, 653d1925cb38569

절차


  • Arduino IDE에서 esp8266_160217_AQM0802.ino 만들기
  • 새 탭에서 AQM0802lib.ino 추가 ( 관련 )

  • 아래 코드 붙이기

    코드 (v0.2)



    esp8266_160217_AQM0802.ino
    #include <Wire.h>
    
    void setup() {
      Serial.begin(115200);
      Serial.println("");  
    
      Wire.begin(); // (SDA,SCL) Default 4 and 5
    
      AQM0802_Initialize(/* cursorOn=*/true, /* cursorPosOn=*/true, /* contrast=*/7);
    //  Test_AQM0802_cursorOn_posOff_contrastLow();
    //  Test_AQM0802_cursorOn_posOn_contrastLow();
    //  Test_AQM0802_cursorOn_posOn_contrastHigh();
    
      displayDateTime();
    }
    
    void displayDateTime()
    {
      uint8_t pos;
      pos = 0x80 | (0 * 0x40); // DDRAM address
      String currentDate = "20160217";
      AQM0802_WriteSingleInstruction(pos);
      AQM0802_WriteData( (uint8_t *)currentDate.c_str(), currentDate.length() );
    
      pos = 0x80 | (1 * 0x40); // DDRAM address
      String currentTime = "22:44";
      AQM0802_WriteSingleInstruction(pos);
      AQM0802_WriteData( (uint8_t *)currentTime.c_str(), currentTime.length() ); 
    }
    
    void loop() 
    {
    
    }
    

    AQM0802lib.ino
    #include <Wire.h>
    
    /*
     * v0.2 2016 Feb. 17
     *  - add test functions()
     *    + add Test_AQM0802_cursorOn_posOn_contrastHigh()
     *    + add Test_AQM0802_cursorOn_posOn_contrastLow()
     *    + add Test_AQM0802_cursorOn_posOff_contrastLow()
     * v0.1 2016 Feb. 17
     *  - add AQM0802_Initialize()
     *  - add AQM0802_Clear()
     *  - add AQM0802_WriteData()
     *  - add AQM0802_WriteInstruction()
     *  - add writeToDevice()
     *
     * -------
     * Special thanks to exabugs for ( http://qiita.com/exabugs/items/9d1b66aa1d22805afbc8 )
     */
    
    static const uint8_t kDeviceAddr = 0x3e;
    
    static uint8_t ControlByteList[] = {
      0x00, // Instruction write operation. ( Co=0, Rs=0 )
      0x40, // Data write operation. ( Co=0, Rs=1 )
    };
    
    enum {
      TYPE_INSTRUCITON = 0,
      TYPE_DATA,
    };
    
    //---------------------------------------------------------------------------------
    
    // private functions ---------------------------
    void writeToDevice(int type, uint8_t *dataByte, size_t len) 
    {
      for (int idx = 0; idx < len; idx++) {
        Wire.beginTransmission(kDeviceAddr);
        Wire.write(ControlByteList[type]);
        Wire.write(dataByte[idx]);
        Wire.endTransmission();
        delayMicroseconds(27); // 26.3us
      }
    }
    
    //---------------------------------------------------------------------------------
    
    // public functions ---------------------------
    void AQM0802_WriteSingleInstruction(uint8_t data) 
    { 
      size_t len = 1;
      uint8_t list[] = {data};
      writeToDevice(TYPE_INSTRUCITON, list, len); 
    }
    
    void AQM0802_WriteInstructions(uint8_t *data, int len) 
    { 
      writeToDevice(TYPE_INSTRUCITON, data, len); 
    }
    
    void AQM0802_WriteData(uint8_t *data, size_t len) 
    { 
      writeToDevice(TYPE_DATA, data, len); 
    }
    
    void AQM0802_Clear()
    {
        AQM0802_WriteSingleInstruction(0x01);
    }
    
    void AQM0802_Initialize(bool cursorOn, bool cursorPosOn, uint8_t contrast)
    { 
      // 
      delay(40); // Wait time > 40ms after VDD stable
    
      // Function set
      AQM0802_WriteSingleInstruction(0x38);
    
      // Function set
      AQM0802_WriteSingleInstruction(0x39);
    
      // Internal OSC frequency
      AQM0802_WriteSingleInstruction(0x14);
    
      // { Contrast set -----------------------------
      uint8_t ctrst = contrast;
      if (ctrst > 0b1111) {
        ctrst = 0b1111;
      }
      AQM0802_WriteSingleInstruction(0x70 | ctrst);
      // } Contrast set -----------------------------
    
      // Power/ICON/Contrast control
      AQM0802_WriteSingleInstruction(0x56);
    
      // Follower control
      AQM0802_WriteSingleInstruction(0x6C);
    
      // Wait time > 200mS (for power stable)
      delay(200);
    
      // Function set
      AQM0802_WriteSingleInstruction(0x38);
    
      // { Display ON/OFF control -----------------------
      uint8_t extra = 0x0;
      if (cursorOn) {
        extra = extra | 0b10;
      }
      if (cursorPosOn) {
        extra = extra | 0b11;    
      }
      AQM0802_WriteSingleInstruction(0x0C | extra);
      // } Display ON/OFF control -----------------------
    
      // Clear Display
      AQM0802_WriteSingleInstruction(0x01);
    
      // Wait time > 1.08ms
      delay(2);
    }
    
    
    //---------------------------------------------------------------------------------
    
    // test functions ---------------------------
    
    void Test_AQM0802_cursorOn_posOff_contrastLow()
    {
      AQM0802_Initialize(/* cursorOn=*/true, /* cursorPosOn=*/false, /* contrast=*/1);
    }
    
    void Test_AQM0802_cursorOn_posOn_contrastLow()
    {
      AQM0802_Initialize(/* cursorOn=*/true, /* cursorPosOn=*/true, /* contrast=*/1);
    }
    
    void Test_AQM0802_cursorOn_posOn_contrastHigh()
    {
      AQM0802_Initialize(/* cursorOn=*/true, /* cursorPosOn=*/true, /* contrast=*/15);
    }
    

    사용법



    esp8266_160217_AQM0802.ino 파일의 아래에서 현재 날짜와 시간을 입력하여 빌드합니다.
      String currentDate = "20160217";
    
      String currentTime = "22:44";
    

    타이밍 잘 프로그램을 흘려 넣어 실행한다.
    운이 좋으면, 표시 시각과 현재 시각(JST)이 맞을지도 모른다.



    보충



    도서관의 내용은 좀 더 반죽해야 한다.
  • 초기화시의 파라미터를 개별적으로 건네줄지, 구조체 건네줄까
  • 래퍼 함수를 ​​준비하여 세세한 설정을 하지 않아도 되는지
  • 중간에 대비를 변경하는 것과 같은 함수는 어떨까요
  • 표시 위치와 캐릭터 라인을 지정하는 함수가 있으면 편리해 보인다
  • Arduino datetime 라이브러리 공부 필요
  • 진짜는 Grenning에 의한 Dual Target에 근거해 구현하고 싶다. 그렇게하면 다른 마이크로 컴퓨터에 응용 프로그램이 들립니다
  • 좋은 웹페이지 즐겨찾기