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

 

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

Автор: Mike(admin) от Вчера, 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, часы, осциллограф



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

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

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