INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Frage zu Grafik
30.12.2019, 11:05
Beitrag #9
RE: Frage zu Grafik
Dann wäre es wünschenswert, wenn Du das Ergebnis hier veröffentlicht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 16:22
Beitrag #10
RE: Frage zu Grafik
Sorry, hab ich vergessen. Hole ich hiermit nach.

Code:
//************************************************
//****  Screen and SPIFFS Headers and Defines ****
//************************************************

//#include<HardwareSerial.h>
#include<TFT_eSPI.h>
#include<SPI.h>
#include "LogoJR.h"
#include "LogoOV.h"
#include "FS.h"
#include "SPIFFS.h"

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GREY    0x18E3
#define RXD2 16
#define TXD2 17
#define DEG2RAD 0.0174532925

//HardwareSerial Serial(2);
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite needle = TFT_eSprite(&tft);
TFT_eSprite Nav1 = TFT_eSprite(&tft);
TFT_eSprite Nav2 = TFT_eSprite(&tft);


//******************************************
//****  FreeRTOS Headers and Variables  ****
//******************************************

#include"freertos/FreeRTOS.h"
#include"freertos/Task.h"
//#include"freertos/semphr.h"
#include"esp_system.h"
#include<stdio.h>
TaskHandle_t Task1, Task2;


#define OuterRadius 160
#define InnerRadius 130
#define xCenter 160
#define yCenter 160

unsigned int color;
extern const unsigned char logobunny[];
extern uint16_t logoOV[];
float E;
float B;
int sw;
int sc;
int sc_bac;
int sc_old;

void setup() {
  tft.init();
  tft.setRotation(0);
  splash();
  // Note the format for setting a serial port is as follows: Serial2.begin(baud-rate, protocol, RX pin, TX pin);
  Serial.begin(115200, SERIAL_8N1);
  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
  Serial.println("");
  Serial.println("Serial Txd is on pin: " + String(TX)); // Monitorausgabe
  Serial.println("Serial Rxd is on pin: " + String(RX)); // Monitorausgabe
  SPIFFSstart();
  listFiles();
  xTaskCreatePinnedToCore(ScreenRefresh, "Screen Refresh", 2500, NULL, 30, &Task1, 1);
  xTaskCreatePinnedToCore(SerialScan, "Serial Scan", 2500, NULL, 20, &Task2, 0);
  //Serial1.begin(9600,SERIAL_8N1,1,3);
  //Serial1.println("Serial Started");
}

void ScreenRefresh(void *p) {
  Serial.println("Task 1 created");
  float i;
  tft.loadFont("micross20");
  Nav1.loadFont("micross15");
  Nav2.loadFont("micross50");
  while (1) {
    //xSemaphoreTake(ScreenKeeper,1000);
    float angle = (E * 22) + 180;
    DrawArc(angle);
    DrawData("Avg.", E, 1, 85, 80, true);
    DrawData("Alt.", 1500, 0, 60, 140, false);
    DrawData("Mc.", 2, 1, 100, 200, false);
    //delay(10);
  }
}

void SerialScan (void *p) {
  Serial.println("Task 2 Created");
  char Data;
  String DataString, Vario;
  int pos, i;
  while (1) {
    if (Serial2.available()) {
      Data = Serial2.read();
      if (Data == '$') {
        while (Data != 10) {
          DataString += Data;
          Data = Serial2.read();
        }
      }
    }
    if (DataString.startsWith("$POV")) {
      //Serial2.println(DataString);
      pos = DataString.indexOf(',');
      DataString.remove(0, pos + 1);
      //Serial2.println(DataString);
      if (DataString[0] == 'E') {
        pos = DataString.indexOf(',');
        DataString.remove(0, pos + 1);
        //Serial2.println(DataString);
        pos = DataString.indexOf('*');
        for (i = 0; i < pos; i++) {
          Vario += DataString[i];
        }
        //Serial2.println(Vario);
        E = Vario.toFloat();
        Serial2.println(E);
        Vario = "";
        if (E <= -6) B = -6;
        if ((E > -6) && (E < 6)) B = E;
        if (E >= 6) B = 6;
      }
    }
    DataString = "";
    vTaskDelay(20);
  }
}

void loop() {
}
//*************************
//****  Splash Screen  ****
//*************************

void splash() {
  Serial.print("Splash Screen");
  tft.fillScreen(WHITE);
  tft.setWindow(20, 50, 20 + 199, 50 + 218);
  tft.pushColors(logoOV, 200 * 219);
  delay(5000);
  tft.fillScreen(BLACK);
  tft.fillCircle(xCenter, yCenter, InnerRadius, BLACK);
}

//*********************************
//****  Deg to Rad conversion  ****
//*********************************

float deg2rad(float* angle) {
  //  float tempangle=*angle;
  *angle = *angle / 180 * 3.141516;
  //  return angle;
}

//****************************
//****  Calculate an arc  ****
//****************************

// x,y == coords of centre of arc
// start_angle = 0 - 359
// seg_count = number of 3 degree segments to draw (120 => 360 degree arc)
// rx = x axis radius
// yx = y axis radius
// w  = width (thickness) of arc in pixels
// colour = 16 bit colour value
// Note if rx and ry are the same an arc of a circle is drawn
float MiddleRadius = ((OuterRadius - InnerRadius) / 2) + InnerRadius; //Middle of Sliding Circle radius
int fillArc(int x, int y, int start_angle, int seg_count, int rx, int ry, int w, unsigned int colour)
{
  if (B > 0) {
    byte seg = 3; // Segments are 3 degrees wide = 120 segments for 360 degrees
    byte inc = 3; // Draw segments every 3 degrees, increase to 6 for segmented ring

    // Calculate first pair of coordinates for segment start
    float sx = cos((start_angle - 90) * DEG2RAD);
    float sy = sin((start_angle - 90) * DEG2RAD);
    uint16_t x0 = sx * (rx - w) + x;
    uint16_t y0 = sy * (ry - w) + y;
    uint16_t x1 = sx * rx + x;
    uint16_t y1 = sy * ry + y;

    // Draw colour blocks every inc degrees
    for (int i = start_angle; i < start_angle + seg * seg_count; i += inc) {

      // Calculate pair of coordinates for segment end
      float sx2 = cos((i + seg - 90) * DEG2RAD);
      float sy2 = sin((i + seg - 90) * DEG2RAD);
      int x2 = sx2 * (rx - w) + x;
      int y2 = sy2 * (ry - w) + y;
      int x3 = sx2 * rx + x;
      int y3 = sy2 * ry + y;

      tft.fillTriangle(x0, y0, x1, y1, x2, y2, colour);
      tft.fillTriangle(x1, y1, x2, y2, x3, y3, colour);

      // Copy segment end to sgement start for next segment
      x0 = x2;
      y0 = y2;
      x1 = x3;
      y1 = y3;
    }
  }
  else {

    byte seg = 3; // Segments are 3 degrees wide = 120 segments for 360 degrees
    byte inc = 3; // Draw segments every 3 degrees, increase to 6 for segmented ring

    // Calculate first pair of coordinates for segment start
    float sx = cos((start_angle - 90) * DEG2RAD);
    float sy = sin((start_angle - 90) * DEG2RAD);
    uint16_t x0 = sx * (rx - w) + x;
    uint16_t y0 = sy * (ry - w) + y;
    uint16_t x1 = sx * rx + x;
    uint16_t y1 = sy * ry + y;

    // Draw colour blocks every inc degrees
    for (int i = start_angle; i < start_angle + seg * seg_count; i += inc) {

      // Calculate pair of coordinates for segment end
      float sx2 = cos((i + seg - 90) * DEG2RAD);
      float sy2 = sin((i + seg - 90) * DEG2RAD);
      int x2 = sx2 * (rx - w) + x;
      int y2 = -sy2 * (ry - w) + y;
      int x3 = sx2 * rx + x;
      int y3 = -sy2 * ry + y;

      tft.fillTriangle(x0, y0, x1, y1, x2, y2, colour);
      tft.fillTriangle(x1, y1, x2, y2, x3, y3, colour);

      // Copy segment end to sgement start for next segment
      x0 = x2;
      y0 = y2;
      x1 = x3;
      y1 = y3;
    }
  }
}

int fillArc2(int x, int y, int start_angle, int seg_count, int rx, int ry, int w, unsigned int colour)
{
  if (B > 0) {
    byte seg = 3; // Segments are 3 degrees wide = 120 segments for 360 degrees
    byte inc = 3; // Draw segments every 3 degrees, increase to 6 for segmented ring

    // Calculate first pair of coordinates for segment start
    float sx = cos((start_angle - 90) * DEG2RAD);
    float sy = sin((start_angle - 90) * DEG2RAD);
    uint16_t x0 = sx * (rx - w) + x;
    uint16_t y0 = sy * (ry - w) + y;
    uint16_t x1 = sx * rx + x;
    uint16_t y1 = sy * ry + y;

    // Draw colour blocks every inc degrees
    for (int i = start_angle; i < start_angle + seg * seg_count; i += inc) {

      // Calculate pair of coordinates for segment end
      float sx2 = cos((i + seg - 90) * DEG2RAD);
      float sy2 = sin((i + seg - 90) * DEG2RAD);
      int x2 = sx2 * (rx - w) + x;
      int y2 = sy2 * (ry - w) + y;
      int x3 = sx2 * rx + x;
      int y3 = sy2 * ry + y;

      tft.fillTriangle(x0, y0, x1, y1, x2, y2, colour);
      tft.fillTriangle(x1, y1, x2, y2, x3, y3, colour);

      // Copy segment end to sgement start for next segment
      x0 = x2;
      y0 = y2;
      x1 = x3;
      y1 = y3;
    }
  }

  else {

    byte seg = 3; // Segments are 3 degrees wide = 120 segments for 360 degrees
    byte inc = 3; // Draw segments every 3 degrees, increase to 6 for segmented ring

    // Calculate first pair of coordinates for segment start
    float sx = cos((start_angle - 90) * DEG2RAD);
    float sy = sin((start_angle - 90) * DEG2RAD);
    uint16_t x0 = sx * (rx - w) + x;
    uint16_t y0 = sy * (ry - w) + y;
    uint16_t x1 = sx * rx + x;
    uint16_t y1 = sy * ry + y;

    // Draw colour blocks every inc degrees
    for (int i = start_angle; i < start_angle + seg * seg_count; i += inc) {

      // Calculate pair of coordinates for segment end
      float sx2 = cos((i + seg - 90) * DEG2RAD);
      float sy2 = sin((i + seg - 90) * DEG2RAD);
      int x2 = sx2 * (rx - w) + x;
      int y2 = sy2 * (ry - w) + y;
      int x3 = sx2 * rx + x;
      int y3 = sy2 * ry + y;

      tft.fillTriangle(x0, y0, x1, y1, x2, y2, colour);
      tft.fillTriangle(x1, y1, x2, y2, x3, y3, colour);

      // Copy segment end to sgement start for next segment
      x0 = x2;
      y0 = y2;
      x1 = x3;
      y1 = y3;
    }
  }
}
//*******************
//**** Draw Arc  ****
//*******************
void DrawArc(float inangle) {
  deg2rad(&inangle);
  if (B > 0) {
    fillArc2(160, 160, 252, 6, 160, 160, 30, BLACK);
    sw = 270 + 3 * sc;
    color = GREEN;
  }
  else {
    fillArc2(160, 160, 270, 6, 160, 160, 30, BLACK);
    sw = 270 - 3 * sc_old - 30;
    color = BLUE;
  }
  sc = abs(B) * 7.4;
  //int sc1 = 120 - sc;
  fillArc(160, 160, 270, sc, 160, 160, 30, color);
  if (sc_old > sc) {
    sc_bac = sc_old - sc + 10;
    fillArc2(160, 160, sw, sc_bac, 160, 160, 30, BLACK);
  }
  sc_old = sc;

  //****  Draw divisions and numbers  ****

  for (int i = 70; i <= 300; i += 22) {
    float divangle = i;
    deg2rad(&divangle);
    int x0 = OuterRadius * cos(divangle) + xCenter;
    int y0 = OuterRadius * sin(divangle) + yCenter;
    int x1 = (MiddleRadius + 10) * cos(divangle) + xCenter;
    int y1 = (MiddleRadius + 10) * sin(divangle) + yCenter;
    tft.drawLine(x0, y0, x1, y1, WHITE);
  }
  tft.setTextColor(WHITE, GREY);
  tft.setCursor(12, 152);
  tft.println("0");
  tft.setCursor(25, 97);
  tft.println("1");
  tft.setCursor(53, 52);
  tft.println("2");
  tft.setCursor(94, 22);
  tft.println("3");
  tft.setCursor(148, 9);
  tft.println("4");
  tft.setCursor(206, 18);
  tft.println("5");
  tft.setCursor(25, 203);
  tft.println("1");
  tft.setCursor(53, 248);
  tft.println("2");
  tft.setCursor(94, 280);
  tft.println("3");
  tft.setCursor(148, 294);
  tft.println("4");
  tft.setCursor(206, 287);
  tft.println("5");
}
//*******************************
//**** Draw NavBox and Data  ****
//*******************************

void DrawData(char title[], float data, int precision, int x, int y, bool sign) {
  Nav1.createSprite(30, 15);
  //Nav1.fillScreen(YELLOW);
  Nav1.setCursor(0, 0);
  Nav1.setTextColor(WHITE, BLACK);
  Nav1.println(title);
  Nav2.createSprite(140, 50);
  Nav2.setCursor(0, 0);
  Nav2.setTextColor(WHITE, BLACK);
  if ((data > 0) && (sign)) {
    Nav2.print("+");
  }
  Nav2.println(data, precision);
  Nav1.pushSprite(x, y);
  Nav1.deleteSprite();
  Nav2.pushSprite(x + 30, y);
  Nav2.deleteSprite();
}

// ************************************
// ****  Initialize SPIFFS memory  ****
// ************************************

void SPIFFSstart() {
  if (!SPIFFS.begin()) {
    Serial.println("SPIFFS initialisation failed!");
    while (1) yield(); // Stay here twiddling thumbs waiting
  }
  Serial.println("\r\nInitialisation done.");
}


// ********************************************************
// ****  List files in ESP8266 or ESP32 SPIFFS memory  ****
// ********************************************************

void listFiles(void) {
  Serial.println();
  Serial.println("SPIFFS files found:");

#ifdef ESP32
  listDir(SPIFFS, "/", true);
#else
  fs::Dir dir = SPIFFS.openDir("/"); // Root directory
  String  line = "=====================================";

  Serial.println(line);
  Serial.println("  File name               Size");
  Serial.println(line);

  while (dir.next()) {
    String fileName = dir.fileName();
    Serial.print(fileName);
    int spaces = 25 - fileName.length(); // Tabulate nicely
    if (spaces < 0) spaces = 1;
    while (spaces--) Serial.print(" ");
    fs::File f = dir.openFile("r");
    Serial.print(f.size()); Serial.println(" bytes");
    yield();
  }

  Serial.println(line);
#endif
  Serial.println();
  delay(1000);
}

#ifdef ESP32
void listDir(fs::FS & fs, const char * dirname, uint8_t levels) {
  Serial.printf("Listing directory: %s\n", dirname);

  fs::File root = fs.open(dirname);
  if (!root) {
    Serial.println("Failed to open directory");
    return;
  }
  if (!root.isDirectory()) {
    Serial.println("Not a directory");
    return;
  }

  fs::File file = root.openNextFile();
  while (file) {

    if (file.isDirectory()) {
      Serial.print("DIR : ");
      String fileName = file.name();
      Serial.print(fileName);
      if (levels) {
        listDir(fs, file.name(), levels - 1);
      }
    } else {
      String fileName = file.name();
      Serial.print("  " + fileName);
      int spaces = 32 - fileName.length(); // Tabulate nicely
      if (spaces < 1) spaces = 1;
      while (spaces--) Serial.print(" ");
      String fileSize = (String) file.size();
      spaces = 8 - fileSize.length(); // Tabulate nicely
      if (spaces < 1) spaces = 1;
      while (spaces--) Serial.print(" ");
      Serial.println(fileSize + " bytes");
    }

    file = root.openNextFile();
  }
}
#endif
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 16:28
Beitrag #11
RE: Frage zu Grafik
Danke.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 16:38
Beitrag #12
RE: Frage zu Grafik
Zitat:// ********************************************************
// **** List files in ESP8266 or ESP32 SPIFFS memory ****
// ********************************************************

Ich frage mich die ganze Zeit was du im Spiffs hast?

Du lässt dir im Sketch die im Spiffs vorhandenen Dateien Seriell auflisten!

Ich seh aber nirgends eine Verwendung der Dateien!

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 19:11
Beitrag #13
RE: Frage zu Grafik
Ein großer Teil des Codes stammt von einem anderen Entwickler. Unter anderem der Teil. Im SPIFFS liegen vier Dateien:
micross15.vlw, micross20.vlw, micross40.vlw und micross50.vlw
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 19:29
Beitrag #14
RE: Frage zu Grafik
(30.12.2019 19:11)Gerdchen03 schrieb:  Ein großer Teil des Codes stammt von einem anderen Entwickler. Unter anderem der Teil.

Ja ok, das hatte ich bereits gelesen.


Zitat: Im SPIFFS liegen vier Dateien:
micross15.vlw, micross20.vlw, micross40.vlw und micross50.vlw

Werden diese den irgendwo/irgendwann verwendet?
Mann könnte den Sketch sonst um diesen Teil kürzen.


Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 19:30
Beitrag #15
RE: Frage zu Grafik
Ja hier:
Code:
void ScreenRefresh(void *p) {
  Serial.println("Task 1 created");
  float i;
  tft.loadFont("micross20");
  Nav1.loadFont("micross15");
  Nav2.loadFont("micross50");
  while (1) {
    //xSemaphoreTake(ScreenKeeper,1000);
    float angle = (E * 22) + 180;
    DrawArc(angle);
    DrawData("Avg.", E, 1, 85, 80, true);
    DrawData("Alt.", 1500, 0, 60, 140, false);
    DrawData("Mc.", 2, 1, 100, 200, false);
    //delay(10);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.12.2019, 19:52
Beitrag #16
RE: Frage zu Grafik
Jetzt ist es klar.

Das laden der Font Dateien steckt in der Lib!

https://github.com/Bodmer/TFT_eSPI/blob/...h_font.cpp

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Allgemeine Frage zu serial.Print array Benny86 4 809 16.06.2020 02:10
Letzter Beitrag: Benny86
  Hardware Frage Hardwearhansi 10 1.954 29.02.2020 05:38
Letzter Beitrag: N1d45
  ESP32 Firmware Anfänger Frage 1971 2 1.138 20.01.2020 12:25
Letzter Beitrag: 1971
  Frage zu App für Esp32 goofy15 4 1.128 29.10.2019 08:46
Letzter Beitrag: volvodani
  Frage zum Gültigkeitsbereich einer lokalen Variablen ardu_arne 31 6.111 01.06.2019 14:02
Letzter Beitrag: ardu_arne
Sad 2,2" TFT-Display Frage phb 7 3.355 05.07.2018 07:39
Letzter Beitrag: amithlon
Question Frage zum Banggood-Board Volker3.0 4 2.272 14.05.2018 08:27
Letzter Beitrag: Volker3.0
  nodeMCU ESP 12E V3 - Frage zum Beispielsketch "Hello Server" Stargazer 2 3.233 13.08.2017 21:09
Letzter Beitrag: Stargazer
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 6.533 14.11.2016 22:02
Letzter Beitrag: Claus_M

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste