цифровая электроника
вычислительная техника
встраиваемые системы

 



Делаем часы из осциллографа с помощью ESP32

Автор: Mike(admin) от 15-06-2019, 05:15

Часы из осциллографа и ESP32 своими руками


Превратите ваш старый осциллограф в аналоговые часы с помощью микроконтроллера ESP32 и трех проводов.


Делаем часы из осциллографа с помощью ESP32

В данном материале представлен, пожалуй, самый простой способ отобразить аналоговые часы на дисплее осциллографа. Осциллограф должен быть двухканальным, один канал для оси «x», а другой для «y». На GitHub-странице Mauro Pintus (https://github.com/maurohh/ESP32_OscilloscopeClock) есть подробное описание и код, который использует внутренние ЦАП микроконтроллера ESP32 и WiFi ntp clock sync (синхронизация часов с NTP-сервером). По умолчанию этот скетч начнется с фиксированного времени 10:08:37 каждый раз, когда вы сбрасываете плату.


Чтобы изменить это, измените переменные h, m, s в коде. Чтобы синхронизировать часы с NTP-сервером, вам необходимо установить библиотеку NTPtimeESP от Andreas Spiess. Отредактируйте учетные данные WiFi вместо вашего SSID и вашего пароля. Проверьте в последовательном мониторе, доступен ли сервер NTP.


Библиотека NTPtimeESP предназначалась для ESP8266, и вам нужно добавить файл NTPtimeESP.h, чтобы использовать ее с ESP32. Откройте «NTPtimeESP.h» внутри библиотеки и замените в include «ESP8266WiFi.h» на «WiFi.h».


Схема подключения очень проста.


Делаем часы из осциллографа с помощью ESP32

Как видно на схеме, контакт 25 ESP32 подключен к «x» (канал 1) осциллографа, а контакт 26 к «y» (канал 2). Затем выбираем X-Y режим работы осциллографа. Подключение осуществляется с помощью экранированных кабелей.


Код программы для Arduino IDE:



#include <driver/dac.h>
#include <soc/rtc.h>
#include <soc/sens_reg.h>
#include "DataTable.h"


//#define EXCEL
//#define NTP


#if defined NTP
  #include <NTPtimeESP.h>
  #include <WiFi.h>
  
  NTPtime NTPch("europe.pool.ntp.org"); // Выберите свой пул серверов
  char *ssid      = "Your SSID";        // Установите свой WiFi SSID
  char *password  = "Your PASS";        // Установите пароль WiFi
  
  int status = WL_IDLE_STATUS;
  strDateTime dateTime;
#endif //

// Измените это, чтобы установить начальное время
// По умолчанию 10:08:37
int h=10;   // Начальный час
int m=8;    // Начальные минуты
int s=37;   // Начальные секунды

// Переменные
int           lastx,lasty;
unsigned long currentMillis  = 0;
unsigned long previousMillis = 0;    
int           Timeout        = 20;
const    long interval       = 990; // миллисекунды, вы можете изменять это
                                    // чтобы получить лучшую точность


//*****************************************************************************
// PlotTable 
//*****************************************************************************

void PlotTable(byte *SubTable, int SubTableSize, int skip, int opt, int offset)
{
  int i=offset;
  while (i<SubTableSize){
    if (SubTable[i+2]==skip){
      i=i+3;
      if (opt==1) if (SubTable[i]==skip) i++;
    }
    Line(SubTable[i],SubTable[i+1],SubTable[i+2],SubTable[i+3]);  
    if (opt==2){
      Line(SubTable[i+2],SubTable[i+3],SubTable[i],SubTable[i+1]); 
    }
    i=i+2;
    if (SubTable[i+2]==0xFF) break;
  }
}

//*****************************************************************************



//*****************************************************************************
// Dot 
//*****************************************************************************

inline void Dot(int x, int y)
{
    if (lastx!=x){
      lastx=x;
      dac_output_voltage(DAC_CHANNEL_1, x);
    }
    #if defined EXCEL
      Serial.print("0x");
      if (x<=0xF) Serial.print("0");
      Serial.print(x,HEX);
      Serial.print(",");
    #endif
    #if defined EXCEL
      Serial.print("0x");
      if (lasty<=0xF) Serial.print("0");
      Serial.print(lasty,HEX);
      Serial.println(",");
    #endif
    if (lasty!=y){
      lasty=y;
      dac_output_voltage(DAC_CHANNEL_2, y);
    }
    #if defined EXCEL
      Serial.print("0x");
      if (x<=0xF) Serial.print("0");
      Serial.print(x,HEX);
      Serial.print(",");
    #endif
    #if defined EXCEL
      Serial.print("0x");
      if (y<=0xF) Serial.print("0");
      Serial.print(y,HEX);
      Serial.println(",");
    #endif
}

//*****************************************************************************



//*****************************************************************************
// Line 
//*****************************************************************************
// Реализация алгоритма Брезенхема
// также известный как DDA - цифровой дифференциальный анализатор

void Line(byte x1, byte y1, byte x2, byte y2)
{
    int acc;
    // for speed, there are 8 DDA's, one for each octant
    if (y1 < y2) { // quadrant 1 or 2
        byte dy = y2 - y1;
        if (x1 < x2) { // quadrant 1
            byte dx = x2 - x1;
            if (dx > dy) { // < 45
                acc = (dx >> 1);
                for (; x1 <= x2; x1++) {
                    Dot(x1, y1);
                    acc -= dy;
                    if (acc < 0) {
                        y1++;
                        acc += dx;
                    }
                }
            }
            else {   // > 45
                acc = dy >> 1;
                for (; y1 <= y2; y1++) {
                    Dot(x1, y1);
                    acc -= dx;
                    if (acc < 0) {
                        x1++;
                        acc += dy;
                    }
                }
            }
        }
        else {  // quadrant 2
            byte dx = x1 - x2;
            if (dx > dy) { // < 45
                acc = dx >> 1;
                for (; x1 >= x2; x1--) {
                    Dot(x1, y1);
                    acc -= dy;
                    if (acc < 0) {
                        y1++;
                        acc += dx;
                    }
                }
            }
            else {  // > 45
                acc = dy >> 1;
                for (; y1 <= y2; y1++) {
                    Dot(x1, y1);
                    acc -= dx;
                    if (acc < 0) {
                        x1--;
                        acc += dy;
                    }
                }
            }        
        }
    }
    else { // quadrant 3 or 4
        byte dy = y1 - y2;
        if (x1 < x2) { // quadrant 4
            byte dx = x2 - x1;
            if (dx > dy) {  // < 45
                acc = dx >> 1;
                for (; x1 <= x2; x1++) {
                    Dot(x1, y1);
                    acc -= dy;
                    if (acc < 0) {
                        y1--;
                        acc += dx;
                    }
                }
            
            }
            else {  // > 45
                acc = dy >> 1;
                for (; y1 >= y2; y1--) { 
                    Dot(x1, y1);
                    acc -= dx;
                    if (acc < 0) {
                        x1++;
                        acc += dy;
                    }
                }

            }
        }
        else {  // quadrant 3
            byte dx = x1 - x2;
            if (dx > dy) { // < 45
                acc = dx >> 1;
                for (; x1 >= x2; x1--) {
                    Dot(x1, y1);
                    acc -= dy;
                    if (acc < 0) {
                        y1--;
                        acc += dx;
                    }
                }

            }
            else {  // > 45
                acc = dy >> 1;
                for (; y1 >= y2; y1--) {
                    Dot(x1, y1);
                    acc -= dx;
                    if (acc < 0) {
                        x1--;
                        acc += dy;
                    }
                }
            }
        }
    
    }
}

//*****************************************************************************



//*****************************************************************************
// setup 
//*****************************************************************************

void setup() 
{
  Serial.begin(115200);
  Serial.println("\nESP32 Oscilloscope Clock v1.0");
  Serial.println("Mauro Pintus 2018\nwww.mauroh.com");
  //rtc_clk_cpu_freq_set(RTC_CPU_FREQ_240M);
  Serial.println("CPU Clockspeed: ");
  Serial.println(rtc_clk_cpu_freq_value(rtc_clk_cpu_freq_get()));
  
  dac_output_enable(DAC_CHANNEL_1);
  dac_output_enable(DAC_CHANNEL_2);

  if (h > 12) h=h-12;

  #if defined NTP
    Serial.println("Connecting to Wi-Fi");
    
    WiFi.begin (ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      Serial.print(".");
      delay(1000);
      Timeout--;
      if (Timeout==0){
        Serial.println("\nWiFi Timeout");
        break;
      }
    }
    
    if (Timeout!=0){
      Serial.println("\nWiFi connected");
      Serial.println("NTP request sent to Server.");
      dateTime = NTPch.getNTPtime(1.0, 1);
      Timeout=20;
  
      while (!dateTime.valid) {
        dateTime = NTPch.getNTPtime(1.0, 1);
        Serial.print(".");
        delay(1000);
        Timeout--;
        if (Timeout==0){
          Serial.println("\nNTP Server Timeout");
          break;
        }
      }
      
      if (Timeout!=0){

        Serial.println("\nUsing NTP Time");
        NTPch.printDateTime(dateTime);
    
        byte actualHour      = dateTime.hour;
        byte actualMinute    = dateTime.minute;
        byte actualsecond    = dateTime.second;
        int  actualyear      = dateTime.year;
        byte actualMonth     = dateTime.month;
        byte actualday       = dateTime.day;
        byte actualdayofWeek = dateTime.dayofWeek;

        if (actualHour > 12) actualHour=actualHour-12;
        
        h=actualHour;
        m=actualMinute;
        s=actualsecond;
      }
      else{
        Serial.println("\nUsing Fix Time");
      }
    }  
  #endif    

  #if !defined NTP
    Serial.println("Using Fix Time");
  #endif

  if (h<10) Serial.print("0");
  Serial.print(h);
  Serial.print(":");
  if (m<10) Serial.print("0");
  Serial.print(m);
  Serial.print(":");
  if (s<10) Serial.print("0");
  Serial.println(s);
  h=(h*5)+m/12;
}

//*****************************************************************************



//*****************************************************************************
// loop 
//*****************************************************************************

void loop() {

  currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    s++;
  }
  if (s==60) {
    s=0;
    m++;
    if ((m==12)||(m==24)||(m==36)||(m==48)) {
      h++;
    }
  }
  if (m==60) {
    m=0;
    h++;
  }
  if (h==60) {
    h=0;
  }

  // Опционально
  //PlotTable(DialDots,sizeof(DialDots),0x00,1,0);
  //PlotTable(TestData,sizeof(TestData),0x00,0,00); // Полный
  //PlotTable(TestData,sizeof(TestData),0x00,0,11); // Без квадрата

  int i;
  //Serial.println("Out Ring");
  //for (i=0; i < 1000; i++) PlotTable(DialData,sizeof(DialData),0x00,2,0);
 
  //Serial.println("Diagonals");
  //for (i=0; i < 2000; i++) PlotTable(DialData,sizeof(DialData),0x00,0,0);

  PlotTable(DialData,sizeof(DialData),0x00,1,0);
  PlotTable(DialDigits12,sizeof(DialDigits12),0x00,1,0);
  PlotTable(HrPtrData, sizeof(HrPtrData), 0xFF,0,9*h);
  PlotTable(MinPtrData,sizeof(MinPtrData),0xFF,0,9*m);
  PlotTable(SecPtrData,sizeof(SecPtrData),0xFF,0,5*s);

  #if defined EXCEL
    while(1);
  #endif 

}

Код файла DataTable.h:



byte DialData[] PROGMEM = {
                0x80,0xfe,0x80,0xf2,0x00,0x8d,0xfe,0x8c,0xf9,0x00,0x9a,0xfc,0x99,0xf7,0x00,0xa6,0xf8,0xa5,0xf4,0x00,
                0xb3,0xf4,0xb1,0xef,0x00,0xbf,0xee,0xba,0xe5,0x00,0xca,0xe6,0xc7,0xe2,0x00,0xd4,0xde,0xd0,0xda,0x00,
                0xdd,0xd5,0xd9,0xd1,0x00,0xe5,0xcb,0xe1,0xc8,0x00,0xed,0xbf,0xe4,0xba,0x00,0xf3,0xb4,0xee,0xb2,0x00,
                0xf7,0xa7,0xf3,0xa6,0x00,0xfb,0x9b,0xf6,0x9a,0x00,0xfd,0x8e,0xf8,0x8d,0x00,0xfd,0x80,0xf1,0x80,0x00,
                0xfd,0x73,0xf8,0x74,0x00,0xfb,0x66,0xf6,0x67,0x00,0xf7,0x5a,0xf3,0x5b,0x00,0xf3,0x4d,0xee,0x4f,0x00,
                0xed,0x41,0xe4,0x46,0x00,0xe5,0x36,0xe1,0x39,0x00,0xdd,0x2c,0xd9,0x30,0x00,0xd4,0x23,0xd0,0x27,0x00,
                0xca,0x1b,0xc7,0x1f,0x00,0xbf,0x13,0xba,0x1c,0x00,0xb3,0x0d,0xb1,0x12,0x00,0xa6,0x09,0xa5,0x0d,0x00,
                0x9a,0x05,0x99,0x0a,0x00,0x8d,0x03,0x8c,0x08,0x00,0x7f,0x03,0x7f,0x0f,0x00,0x72,0x03,0x73,0x08,0x00,
                0x65,0x05,0x66,0x0a,0x00,0x59,0x09,0x5a,0x0d,0x00,0x4c,0x0d,0x4e,0x12,0x00,0x41,0x13,0x46,0x1c,0x00,
                0x35,0x1b,0x38,0x1f,0x00,0x2b,0x23,0x2f,0x27,0x00,0x22,0x2c,0x26,0x30,0x00,0x1a,0x36,0x1e,0x39,0x00,
                0x12,0x42,0x1b,0x47,0x00,0x0c,0x4d,0x11,0x4f,0x00,0x08,0x5a,0x0c,0x5b,0x00,0x04,0x66,0x09,0x67,0x00,
                0x02,0x73,0x07,0x74,0x00,0x02,0x81,0x0e,0x81,0x00,0x02,0x8e,0x07,0x8d,0x00,0x04,0x9b,0x09,0x9a,0x00,
                0x08,0xa7,0x0c,0xa6,0x00,0x0c,0xb4,0x11,0xb2,0x00,0x12,0xbf,0x1b,0xba,0x00,0x1a,0xcb,0x1e,0xc8,0x00,
                0x22,0xd5,0x26,0xd1,0x00,0x2b,0xde,0x2f,0xda,0x00,0x35,0xe6,0x38,0xe2,0x00,0x40,0xee,0x45,0xe5,0x00,
                0x4c,0xf4,0x4e,0xef,0x00,0x59,0xf8,0x5a,0xf4,0x00,0x65,0xfc,0x66,0xf7,0x00,0x72,0xfe,0x73,0xf9,0xff
};


byte DialDots[] PROGMEM = {
                0x80,0xfe,0x80,0xfd,0x81,0xfd,0x81,0xfc,0x00,0x8d,0xfe,0x8d,0xfd,0x8e,0xfd,0x8e,0xfc,0x00,0x9a,0xfc,0x99,0xfb,0x9b,0xfb,0x9a,0xfa,0x00,
                0xa6,0xf8,0xa6,0xf7,0xa7,0xf7,0xa7,0xf6,0x00,0xb3,0xf4,0xb2,0xf3,0xb4,0xf3,0xb3,0xf2,0x00,0xbf,0xee,0xbe,0xed,0xc0,0xed,0xbf,0xec,0x00,
                0xca,0xe6,0xc9,0xe6,0xcb,0xe5,0xca,0xe5,0x00,0xd4,0xde,0xd3,0xdd,0xd5,0xdd,0xd4,0xdc,0x00,0xdd,0xd5,0xdc,0xd4,0xde,0xd4,0xdd,0xd3,0x00,
                0xe5,0xcb,0xe5,0xca,0xe6,0xca,0xe6,0xc9,0x00,0xed,0xbf,0xec,0xbf,0xee,0xbe,0xed,0xbe,0x00,0xf3,0xb4,0xf2,0xb3,0xf4,0xb3,0xf3,0xb2,0x00,
                0xf7,0xa7,0xf6,0xa7,0xf8,0xa6,0xf7,0xa6,0x00,0xfb,0x9b,0xfa,0x9a,0xfc,0x9a,0xfb,0x99,0x00,0xfd,0x8e,0xfc,0x8e,0xfe,0x8d,0xfd,0x8d,0x00,
                0xfd,0x80,0xfc,0x80,0xfe,0x81,0xfd,0x81,0x00,0xfd,0x73,0xfc,0x73,0xfe,0x74,0xfd,0x74,0x00,0xfb,0x66,0xfa,0x67,0xfc,0x67,0xfb,0x68,0x00,
                0xf7,0x5a,0xf6,0x5a,0xf8,0x5b,0xf7,0x5b,0x00,0xf3,0x4d,0xf2,0x4e,0xf4,0x4e,0xf3,0x4f,0x00,0xed,0x41,0xec,0x42,0xee,0x42,0xed,0x43,0x00,
                0xe5,0x36,0xe5,0x37,0xe6,0x37,0xe6,0x38,0x00,0xdd,0x2c,0xdc,0x2d,0xde,0x2d,0xdd,0x2e,0x00,0xd4,0x23,0xd3,0x24,0xd5,0x24,0xd4,0x25,0x00,
                0xca,0x1b,0xc9,0x1b,0xcb,0x1c,0xca,0x1c,0x00,0xbf,0x13,0xbe,0x14,0xc0,0x14,0xbf,0x15,0x00,0xb3,0x0d,0xb2,0x0e,0xb4,0x0e,0xb3,0x0f,0x00,
                0xa6,0x09,0xa6,0x0a,0xa7,0x0a,0xa7,0x0b,0x00,0x9a,0x05,0x99,0x06,0x9b,0x06,0x9a,0x07,0x00,0x8d,0x03,0x8d,0x04,0x8e,0x04,0x8e,0x05,0x00,
                0x7f,0x03,0x7f,0x04,0x80,0x04,0x80,0x05,0x00,0x72,0x03,0x72,0x04,0x73,0x04,0x73,0x05,0x00,0x65,0x05,0x66,0x06,0x66,0x06,0x67,0x07,0x00,
                0x59,0x09,0x59,0x0a,0x5a,0x0a,0x5a,0x0b,0x00,0x4c,0x0d,0x4d,0x0e,0x4d,0x0e,0x4e,0x0f,0x00,0x41,0x13,0x41,0x14,0x42,0x14,0x42,0x15,0x00,
                0x35,0x1b,0x36,0x1b,0x36,0x1c,0x37,0x1c,0x00,0x2b,0x23,0x2c,0x24,0x2c,0x24,0x2d,0x25,0x00,0x22,0x2c,0x23,0x2d,0x23,0x2d,0x24,0x2e,0x00,
                0x1a,0x36,0x1a,0x37,0x1b,0x37,0x1b,0x38,0x00,0x12,0x42,0x13,0x42,0x13,0x43,0x14,0x43,0x00,0x0c,0x4d,0x0d,0x4e,0x0d,0x4e,0x0e,0x4f,0x00,
                0x08,0x5a,0x09,0x5a,0x09,0x5b,0x0a,0x5b,0x00,0x04,0x66,0x05,0x67,0x05,0x67,0x06,0x68,0x00,0x02,0x73,0x03,0x73,0x03,0x74,0x04,0x74,0x00,
                0x02,0x81,0x03,0x81,0x03,0x82,0x04,0x82,0x00,0x02,0x8e,0x03,0x8e,0x03,0x8d,0x04,0x8d,0x00,0x04,0x9b,0x05,0x9a,0x05,0x9a,0x06,0x99,0x00,
                0x08,0xa7,0x09,0xa7,0x09,0xa6,0x0a,0xa6,0x00,0x0c,0xb4,0x0d,0xb3,0x0d,0xb3,0x0e,0xb2,0x00,0x12,0xbf,0x13,0xbf,0x13,0xbe,0x14,0xbe,0x00,
                0x1a,0xcb,0x1a,0xca,0x1b,0xca,0x1b,0xc9,0x00,0x22,0xd5,0x23,0xd4,0x23,0xd4,0x24,0xd3,0x00,0x2b,0xde,0x2c,0xdd,0x2c,0xdd,0x2d,0xdc,0x00,
                0x35,0xe6,0x36,0xe6,0x36,0xe5,0x37,0xe5,0x00,0x40,0xee,0x41,0xed,0x41,0xed,0x42,0xec,0x00,0x4c,0xf4,0x4d,0xf3,0x4d,0xf3,0x4e,0xf2,0x00,
                0x59,0xf8,0x59,0xf7,0x5a,0xf7,0x5a,0xf6,0x00,0x65,0xfc,0x66,0xfb,0x66,0xfb,0x67,0xfa,0x00,0x72,0xfe,0x72,0xfd,0x73,0xfd,0x73,0xfc,0xff
};


byte DialDigits12[] PROGMEM = {
                0x7a,0xeb,0x7a,0xd9,0x00,0x80,0xe8,0x83,0xeb,0x89,0xeb,0x8c,0xe8,0x8c,0xe5,0x80,0xd9,0x8c,0xd9,0x00,
                0xb5,0xe4,0xb5,0xd2,0x00,0x00,
                0xd2,0xbb,0xd5,0xbe,0xdb,0xbe,0xde,0xbb,0xde,0xb8,0xd2,0xac,0xde,0xac,0x00,0x00,
                0xe2,0x86,0xe5,0x89,0xeb,0x89,0xee,0x86,0xee,0x83,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00,0xe5,0x80,0xeb,0x80,0x00,
                0xe0,0x4c,0xd4,0x4c,0xdd,0x55,0xdd,0x43,0x00,0x00,
                0xb8,0x31,0xac,0x31,0xac,0x28,0xb5,0x28,0xb8,0x25,0xb8,0x22,0xb5,0x1f,0xaf,0x1f,0xac,0x22,0x00,0x00,
                0x85,0x21,0x82,0x24,0x7c,0x24,0x79,0x21,0x79,0x15,0x7c,0x12,0x82,0x12,0x85,0x15,0x85,0x18,0x82,0x1b,0x7c,0x1b,0x79,0x18,0x00,0x47,0x31,0x53,0x31,0x53,0x2e,0x50,0x2b,0x4d,0x25,0x4d,0x1f,0x00,
                0x22,0x4c,0x1f,0x4f,0x1f,0x52,0x22,0x55,0x28,0x55,0x2b,0x52,0x2b,0x4f,0x28,0x4c,0x22,0x4c,0x1f,0x49,0x1f,0x46,0x22,0x43,0x28,0x43,0x2b,0x46,0x2b,0x49,0x28,0x4c,0x00,0x00,
                0x1d,0x84,0x1a,0x81,0x1a,0x81,0x14,0x81,0x11,0x84,0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x7b,0x1a,0x78,0x14,0x78,0x11,0x7b,0x00,0x00,
                0x21,0xbe,0x21,0xac,0x00,0x00,
                0x27,0xbb,0x2a,0xbe,0x30,0xbe,0x33,0xbb,0x33,0xaf,0x30,0xac,0x2a,0xac,0x27,0xaf,0x27,0xbb,0x00,0x00,
                0x49,0xe4,0x49,0xd2,0x00,0x00,
                0x53,0xe4,0x53,0xd2,0xff,0x00
};
byte DialDigits24[] PROGMEM = {
                0x73,0xef,0x76,0xf2,0x7c,0xf2,0x7f,0xef,0x7f,0xec,0x73,0xe0,0x7f,0xe0,0x00,0x8d,0xe9,0x81,0xe9,0x8a,0xf2,0x8a,0xe0,0x00,
                0xaa,0xe2,0xaa,0xd0,0x00,0x00,
                0xb0,0xdf,0xb3,0xe2,0xb9,0xe2,0xbc,0xdf,0xbc,0xdc,0xb9,0xd9,0xbc,0xd6,0xbc,0xd3,0xb9,0xd0,0xb3,0xd0,0xb0,0xd3,0x00,0xb3,0xd9,0xb9,0xd9,0x00,
                0xd0,0xbc,0xd0,0xaa,0x00,0x00,
                0xe2,0xb3,0xd6,0xb3,0xdf,0xbc,0xdf,0xaa,0x00,0x00,
                0xdc,0x89,0xdc,0x77,0x00,0xee,0x89,0xe2,0x89,0xe2,0x80,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00,
                0xd0,0x55,0xd0,0x43,0x00,0x00,
                0xe2,0x52,0xdf,0x55,0xd9,0x55,0xd6,0x52,0xd6,0x46,0xd9,0x43,0xdf,0x43,0xe2,0x46,0xe2,0x49,0xdf,0x4c,0xd9,0x4c,0xd6,0x49,0x00,0x00,
                0xaa,0x2d,0xaa,0x1b,0x00,0x00,
                0xb0,0x2d,0xbc,0x2d,0xbc,0x2a,0xb9,0x27,0xb6,0x21,0xb6,0x1b,0x00,0x00,
                0x7b,0x21,0x7b,0x0f,0x00,0x83,0x18,0x80,0x1b,0x80,0x1e,0x83,0x21,0x89,0x21,0x8c,0x1e,0x8c,0x1b,0x89,0x18,0x83,0x18,0x80,0x15,0x80,0x12,0x83,0x0f,0x89,0x0f,0x8c,0x12,0x8c,0x15,0x89,0x18,0x00,
                0x49,0x2f,0x49,0x1d,0x00,0x00,
                0x5b,0x29,0x58,0x26,0x58,0x26,0x52,0x26,0x4f,0x29,0x4f,0x2c,0x52,0x2f,0x58,0x2f,0x5b,0x2c,0x5b,0x20,0x58,0x1d,0x52,0x1d,0x4f,0x20,0x00,0x00,
                0x1e,0x52,0x21,0x55,0x27,0x55,0x2a,0x52,0x2a,0x4f,0x1e,0x43,0x2a,0x43,0x00,0x00,
                0x2f,0x52,0x32,0x55,0x38,0x55,0x3b,0x52,0x3b,0x46,0x38,0x43,0x32,0x43,0x2f,0x46,0x2f,0x52,0x00,0x00,
                0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x84,0x11,0x78,0x1d,0x78,0x00,0x00,
                0x23,0x8a,0x23,0x78,0x00,0x00,
                0x1e,0xbb,0x21,0xbe,0x27,0xbe,0x2a,0xbb,0x2a,0xb8,0x1e,0xac,0x2a,0xac,0x00,0x00,
                0x2f,0xbb,0x32,0xbe,0x38,0xbe,0x3b,0xbb,0x3b,0xb8,0x2f,0xac,0x3b,0xac,0x00,0x00,
                0x40,0xdd,0x43,0xe0,0x49,0xe0,0x4c,0xdd,0x4c,0xda,0x40,0xce,0x4c,0xce,0x00,0x00,
                0x51,0xdd,0x54,0xe0,0x5a,0xe0,0x5d,0xdd,0x5d,0xda,0x5a,0xd7,0x5d,0xd4,0x5d,0xd1,0x5a,0xce,0x54,0xce,0x51,0xd1,0x00,0x54,0xd7,0x5a,0xd7,0xff

};
byte DialDigitsRoman[] PROGMEM = {
                0x76,0xdf,0x8a,0xdf,0x00,0x79,0xdf,0x80,0xf3,0x00,0x79,0xf3,0x80,0xdf,0x00,0x83,0xdf,0x83,0xf3,0x00,0x87,0xf3,0x87,0xdf,0x00,0x76,0xf3,0x8a,0xf3,0x00,
                0xad,0xd1,0xb5,0xd1,0x00,0xb1,0xd1,0xb1,0xe5,0x00,0xad,0xe5,0xb5,0xe5,0x00,0x00,
                0xd2,0xab,0xde,0xab,0x00,0xd6,0xab,0xd6,0xbf,0x00,0xda,0xab,0xda,0xbf,0x00,0xd2,0xbf,0xde,0xbf,0x00,
                0xdc,0x76,0xee,0x76,0x00,0xe0,0x76,0xe0,0x8a,0x00,0xe5,0x76,0xe5,0x8a,0x00,0xea,0x76,0xea,0x8a,0x00,0xdc,0x8a,0xee,0x8a,0x00,0xc9,0x42,0xdf,0x42,0x00,0xce,0x42,0xce,0x56,0x00,0xd2,0x42,0xd2,0x56,0x00,0xd6,0x42,0xd6,0x56,0x00,0xda,0x42,0xda,0x56,0x00,0xc9,0x56,0xdf,0x56,0x00,0x00,
                0xa9,0x22,0xb9,0x22,0x00,0xad,0x36,0xb1,0x22,0xb5,0x36,0x00,0xa9,0x36,0xb9,0x36,0x00,0x00,
                0x75,0x14,0x89,0x14,0x00,0x79,0x28,0x7d,0x14,0x81,0x28,0x00,0x85,0x14,0x85,0x28,0x00,0x75,0x28,0x89,0x28,0x00,
                0x43,0x22,0x59,0x22,0x00,0x46,0x36,0x4a,0x22,0x4e,0x36,0x00,0x51,0x22,0x51,0x36,0x00,0x55,0x22,0x55,0x36,0x00,0x43,0x36,0x59,0x36,0x00,0x00,
                0x1d,0x42,0x39,0x42,0x00,0x22,0x56,0x26,0x42,0x2a,0x56,0x00,0x2e,0x42,0x2e,0x56,0x00,0x32,0x42,0x32,0x56,0x00,0x36,0x42,0x36,0x56,0x00,0x1d,0x56,0x39,0x56,0x00,
                0x11,0x77,0x23,0x77,0x00,0x14,0x77,0x14,0x8b,0x00,0x18,0x77,0x20,0x8b,0x00,0x18,0x8b,0x20,0x77,0x00,0x11,0x8b,0x23,0x8b,0x00,0x00,
                0x24,0xab,0x32,0xab,0x00,0x27,0xab,0x2f,0xbf,0x00,0x27,0xbf,0x2f,0xab,0x00,0x24,0xbf,0x32,0xbf,0x00,
                0x48,0xd1,0x5a,0xd1,0x00,0x4b,0xd1,0x53,0xe5,0x00,0x4b,0xe5,0x53,0xd1,0x00,0x56,0xd1,0x56,0xe5,0x00,0x48,0xe5,0x5a,0xe5,0xff,0x00
};
byte DialDigitsMin  [] PROGMEM = {
                0x7a,0xeb,0x7a,0xd9,0x00,0x80,0xe8,0x83,0xeb,0x89,0xeb,0x8c,0xe8,0x8c,0xe5,0x80,0xd9,0x8c,0xd9,0x00,
                0xe2,0x86,0xe5,0x89,0xeb,0x89,0xee,0x86,0xee,0x83,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00,0xe5,0x80,0xeb,0x80,0x00,
                0x85,0x21,0x82,0x24,0x7c,0x24,0x79,0x21,0x79,0x15,0x7c,0x12,0x82,0x12,0x85,0x15,0x85,0x18,0x82,0x1b,0x7c,0x1b,0x79,0x18,0x00,0x1d,0x84,0x1a,0x81,0x1a,0x81,0x14,0x81,0x11,0x84,0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x7b,0x1a,0x78,0x14,0x78,0x11,0x7b,0xff
};

byte SecPtrData[] PROGMEM = {
                0x80,0xec,0x80,0x80,0xff,0x8b,0xec,0x80,0x80,0xff,0x96,0xea,0x80,0x80,0xff,0xa1,0xe7,0x80,0x80,0xff,
                0xab,0xe3,0x80,0x80,0xff,0xb6,0xde,0x80,0x80,0xff,0xbf,0xd8,0x80,0x80,0xff,0xc8,0xd1,0x80,0x80,0xff,
                0xd0,0xc9,0x80,0x80,0xff,0xd7,0xc0,0x80,0x80,0xff,0xdd,0xb6,0x80,0x80,0xff,0xe2,0xac,0x80,0x80,0xff,
                0xe6,0xa2,0x80,0x80,0xff,0xe9,0x97,0x80,0x80,0xff,0xeb,0x8c,0x80,0x80,0xff,0xeb,0x80,0x80,0x80,0xff,
                0xeb,0x75,0x80,0x80,0xff,0xe9,0x6a,0x80,0x80,0xff,0xe6,0x5f,0x80,0x80,0xff,0xe2,0x55,0x80,0x80,0xff,
                0xdd,0x4a,0x80,0x80,0xff,0xd7,0x41,0x80,0x80,0xff,0xd0,0x38,0x80,0x80,0xff,0xc8,0x30,0x80,0x80,0xff,
                0xbf,0x29,0x80,0x80,0xff,0xb6,0x23,0x80,0x80,0xff,0xab,0x1e,0x80,0x80,0xff,0xa1,0x1a,0x80,0x80,0xff,
                0x96,0x17,0x80,0x80,0xff,0x8b,0x15,0x80,0x80,0xff,0x80,0x15,0x80,0x80,0xff,0x74,0x15,0x80,0x80,0xff,
                0x69,0x17,0x80,0x80,0xff,0x5e,0x1a,0x80,0x80,0xff,0x54,0x1e,0x80,0x80,0xff,0x4a,0x23,0x80,0x80,0xff,
                0x40,0x29,0x80,0x80,0xff,0x37,0x30,0x80,0x80,0xff,0x2f,0x38,0x80,0x80,0xff,0x28,0x41,0x80,0x80,0xff,
                0x22,0x4b,0x80,0x80,0xff,0x1d,0x55,0x80,0x80,0xff,0x19,0x5f,0x80,0x80,0xff,0x16,0x6a,0x80,0x80,0xff,
                0x14,0x75,0x80,0x80,0xff,0x14,0x80,0x80,0x80,0xff,0x14,0x8c,0x80,0x80,0xff,0x16,0x97,0x80,0x80,0xff,
                0x19,0xa2,0x80,0x80,0xff,0x1d,0xac,0x80,0x80,0xff,0x22,0xb6,0x80,0x80,0xff,0x28,0xc0,0x80,0x80,0xff,
                0x2f,0xc9,0x80,0x80,0xff,0x37,0xd1,0x80,0x80,0xff,0x40,0xd8,0x80,0x80,0xff,0x49,0xde,0x80,0x80,0xff,
                0x54,0xe3,0x80,0x80,0xff,0x5e,0xe7,0x80,0x80,0xff,0x69,0xea,0x80,0x80,0xff,0x74,0xec,0x80,0x80,0xff

};
byte MinPtrData[] PROGMEM = {
                0x82,0x80,0x80,0xe6,0x7e,0x80,0x82,0x80,0xff,0x81,0x80,0x8a,0xe6,0x7e,0x81,0x81,0x80,0xff,
                0x81,0x80,0x95,0xe4,0x7e,0x81,0x81,0x80,0xff,0x81,0x80,0x9f,0xe2,0x7e,0x81,0x81,0x80,0xff,
                0x81,0x80,0xa9,0xde,0x7e,0x81,0x81,0x80,0xff,0x81,0x7f,0xb3,0xd9,0x7e,0x82,0x81,0x7f,0xff,
                0x81,0x7f,0xbb,0xd3,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xc4,0xcc,0x7e,0x82,0x81,0x7f,0xff,
                0x81,0x7f,0xcb,0xc5,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xd2,0xbc,0x7e,0x82,0x81,0x7f,0xff,
                0x80,0x7f,0xd8,0xb3,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xdd,0xaa,0x7f,0x82,0x80,0x7f,0xff,
                0x80,0x7f,0xe1,0xa0,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xe3,0x96,0x7f,0x82,0x80,0x7f,0xff,
                0x80,0x7f,0xe5,0x8b,0x7f,0x82,0x80,0x7f,0xff,0x7f,0x7e,0xe5,0x80,0x80,0x82,0x7f,0x7e,0xff,
                0x7f,0x7f,0xe5,0x76,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xe3,0x6b,0x80,0x82,0x7f,0x7f,0xff,
                0x7f,0x7f,0xe1,0x61,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xdd,0x57,0x80,0x82,0x7f,0x7f,0xff,
                0x7e,0x7f,0xd8,0x4d,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xd2,0x45,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x7f,0xcb,0x3c,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xc4,0x35,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x7f,0xbb,0x2e,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xb3,0x28,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x80,0xa9,0x23,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x9f,0x1f,0x81,0x81,0x7e,0x80,0xff,
                0x7e,0x80,0x95,0x1d,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x8a,0x1b,0x81,0x81,0x7e,0x80,0xff,
                0x7e,0x81,0x7f,0x1b,0x82,0x80,0x7e,0x81,0xff,0x7e,0x81,0x75,0x1b,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x81,0x6a,0x1d,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x60,0x1f,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x81,0x56,0x23,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x4d,0x28,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x82,0x44,0x2e,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x3b,0x35,0x81,0x7f,0x7e,0x82,0xff,
                0x7e,0x82,0x34,0x3c,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x2d,0x45,0x81,0x7f,0x7e,0x82,0xff,
                0x7f,0x82,0x27,0x4e,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x22,0x57,0x80,0x7f,0x7f,0x82,0xff,
                0x7f,0x82,0x1e,0x61,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x1c,0x6b,0x80,0x7f,0x7f,0x82,0xff,
                0x7f,0x82,0x1a,0x76,0x80,0x7f,0x7f,0x82,0xff,0x80,0x82,0x1a,0x81,0x7f,0x7e,0x80,0x82,0xff,
                0x80,0x82,0x1a,0x8b,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x1c,0x96,0x7f,0x7f,0x80,0x82,0xff,
                0x80,0x82,0x1e,0xa0,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x22,0xaa,0x7f,0x7f,0x80,0x82,0xff,
                0x80,0x82,0x27,0xb3,0x7f,0x7f,0x80,0x82,0xff,0x81,0x82,0x2d,0xbc,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x82,0x34,0xc5,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x3b,0xcc,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x82,0x44,0xd3,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x4c,0xd9,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x81,0x56,0xde,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x60,0xe2,0x7e,0x80,0x81,0x81,0xff,
                0x81,0x81,0x6a,0xe4,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x75,0xe6,0x7e,0x80,0x81,0x81,0xff

};
byte HrPtrData[] PROGMEM = {
                0x82,0x80,0x80,0xbc,0x7e,0x80,0x82,0x80,0xff,0x81,0x80,0x86,0xbc,0x7e,0x81,0x81,0x80,0xff,
                0x81,0x80,0x8c,0xbb,0x7e,0x81,0x81,0x80,0xff,0x81,0x80,0x92,0xba,0x7e,0x81,0x81,0x80,0xff,
                0x81,0x80,0x98,0xb7,0x7e,0x81,0x81,0x80,0xff,0x81,0x7f,0x9e,0xb4,0x7e,0x82,0x81,0x7f,0xff,
                0x81,0x7f,0xa3,0xb1,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xa8,0xad,0x7e,0x82,0x81,0x7f,0xff,
                0x81,0x7f,0xac,0xa9,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xb0,0xa4,0x7e,0x82,0x81,0x7f,0xff,
                0x80,0x7f,0xb3,0x9e,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xb6,0x99,0x7f,0x82,0x80,0x7f,0xff,
                0x80,0x7f,0xb9,0x93,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xba,0x8d,0x7f,0x82,0x80,0x7f,0xff,
                0x80,0x7f,0xbb,0x87,0x7f,0x82,0x80,0x7f,0xff,0x7f,0x7e,0xbb,0x80,0x80,0x82,0x7f,0x7e,0xff,
                0x7f,0x7f,0xbb,0x7a,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xba,0x74,0x80,0x82,0x7f,0x7f,0xff,
                0x7f,0x7f,0xb9,0x6e,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xb6,0x68,0x80,0x82,0x7f,0x7f,0xff,
                0x7e,0x7f,0xb3,0x62,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xb0,0x5d,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x7f,0xac,0x58,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xa8,0x54,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x7f,0xa3,0x50,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0x9e,0x4d,0x81,0x82,0x7e,0x7f,0xff,
                0x7e,0x80,0x98,0x4a,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x92,0x47,0x81,0x81,0x7e,0x80,0xff,
                0x7e,0x80,0x8c,0x46,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x86,0x45,0x81,0x81,0x7e,0x80,0xff,
                0x7e,0x81,0x7f,0x45,0x82,0x80,0x7e,0x81,0xff,0x7e,0x81,0x79,0x45,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x81,0x73,0x46,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x6d,0x47,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x81,0x67,0x4a,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x62,0x4d,0x81,0x80,0x7e,0x81,0xff,
                0x7e,0x82,0x5c,0x50,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x57,0x54,0x81,0x7f,0x7e,0x82,0xff,
                0x7e,0x82,0x53,0x58,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x4f,0x5d,0x81,0x7f,0x7e,0x82,0xff,
                0x7f,0x82,0x4c,0x63,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x49,0x68,0x80,0x7f,0x7f,0x82,0xff,
                0x7f,0x82,0x46,0x6e,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x45,0x74,0x80,0x7f,0x7f,0x82,0xff,
                0x7f,0x82,0x44,0x7a,0x80,0x7f,0x7f,0x82,0xff,0x80,0x82,0x44,0x81,0x7f,0x7e,0x80,0x82,0xff,
                0x80,0x82,0x44,0x87,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x45,0x8d,0x7f,0x7f,0x80,0x82,0xff,
                0x80,0x82,0x46,0x93,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x49,0x99,0x7f,0x7f,0x80,0x82,0xff,
                0x80,0x82,0x4c,0x9e,0x7f,0x7f,0x80,0x82,0xff,0x81,0x82,0x4f,0xa4,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x82,0x53,0xa9,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x57,0xad,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x82,0x5c,0xb1,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x61,0xb4,0x7e,0x7f,0x81,0x82,0xff,
                0x81,0x81,0x67,0xb7,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x6d,0xba,0x7e,0x80,0x81,0x81,0xff,
                0x81,0x81,0x73,0xbb,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x79,0xbc,0x7e,0x80,0x81,0x81,0xff

};

byte TestData[] PROGMEM = {
                0x01,0x01,0x01,0xfe,0xfe,0xfe,0xfe,0x01,0x01,0x01,0x00,
                0x01,0x3f,0x01,0xbd,0x3f,0xfe,0xbd,0xfe,0xfe,0xbd,0xfe,0x3f,0xbd,0x01,0x3f,0x01,0x01,0x3f,0x00,
                0x7f,0x7f,0x7f,0xfe,0x00,0x7f,0x7f,0xbd,0xfe,0x00,0x7f,0x7f,0xfe,0xfe,0x00,0x7f,0x7f,0xfe,0xbd,0x00,
                0x7f,0x7f,0xfe,0x7f,0x00,0x7f,0x7f,0xfe,0x3f,0x00,0x7f,0x7f,0xfe,0x01,0x00,0x7f,0x7f,0xbd,0x01,0x00,
                0x7f,0x7f,0x7f,0x01,0x00,0x7f,0x7f,0x3f,0x01,0x00,0x7f,0x7f,0x01,0x01,0x00,0x7f,0x7f,0x01,0x3f,0x00,
                0x7f,0x7f,0x01,0x7f,0x00,0x7f,0x7f,0x01,0xbd,0x00,0x7f,0x7f,0x01,0xfe,0x00,0x7f,0x7f,0x3f,0xfe,0xff
};



© digitrode.ru


Теги: ESP32, часы, осциллограф




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий