ES33B08 FAQ

Hallo... Mein Name ist Eduardo und ich teste das ES33B08-Board.

Ich versuche, gleichzeitig die 7-Segment-Anzeige und die Darlington-Ausgänge zu verwenden:

a) Die 7-Segment-Anzeige zeigt die aktuelle IP-Adresse an, die der ESP32 nach der Verbindung mit dem WLAN erhalten hat.

b) Die Darlington-Ausgänge steuern Ausgangs-LEDs und einen Schrittmotor.

 

Ist das möglich?

 

Nachfolgend mein aktueller Code

 

#include 

 

// Pins des 74HC595

const int CLOCK_595 = 27;

const int LATCH_595 = 14;

const int DATA_595  = 13;

const int OE_595    = 4;

 

// Pins zum Blinken

const int PULSE_PIN = 33;

const int DIR_PIN   = 25;

 

// Button für zukünftige Erweiterungen

const int BUTTON_PIN = 18;

 

// Segmente für Zahlen 0–9 (Common Anode)

uint8_t TUBE_SEG[] = {

  0x3f, 0x06, 0x5b, 0x4f,

  0x66, 0x6d, 0x7d, 0x07,

  0x7f, 0x6f

};

 

// Auswahl, welches Display aktiviert werden soll

uint8_t TUBE_NUM[8] = {

  0xfe, 0xfd, 0xfb, 0xf7,

  0xef, 0xdf, 0xbf, 0x7f

};

 

// WLAN-Zugangsdaten

const char* ssid = "Posibras";

const char* password = "lucasmarzolla";

 

// IP zur Anzeige

String ip_str = "";

int scrollIndex = 0;

unsigned long lastScroll = 0;

const int scrollDelay = 400;

 

uint8_t display_digits[4] = {0, 0, 0, 0};

bool digit_has_dot[4] = {false, false, false, false};

 

// Variablen zum Blinken der Pins

bool pinsOn = false;

unsigned long lastBlink = 0;

const int blinkInterval = 500; // 500 ms

 

void Send_Bytes(uint8_t dat)

{

  for (int i = 8; i >= 1; i--)

  {

    digitalWrite(DATA_595, (dat & 0x80) ? HIGH : LOW);

    dat <<= 1;

    digitalWrite(CLOCK_595, LOW);

    digitalWrite(CLOCK_595, HIGH);

  }

}

 

void Send_74HC595(uint8_t com_num)

{

  uint8_t seg_data = display_digits[com_num];

 

  if (digit_has_dot[com_num]) {

    seg_data &= 0x7F;

  } else {

    seg_data |= 0x80;

  }

 

  uint8_t bit_num = TUBE_NUM[com_num];

 

  Send_Bytes(0);

  Send_Bytes(bit_num);

  Send_Bytes(seg_data);

  digitalWrite(LATCH_595, LOW);

  digitalWrite(LATCH_595, HIGH);

}

 

void TubeDisplay4Digit()

{

  for (uint8_t com_num = 0; com_num < 4; com_num++)

  {

    Send_74HC595(com_num);

    delay(2);

  }

}

 

uint8_t getCharSegments(char c)

{

  if (c >= '0' && c <= '9') return TUBE_SEG[c - '0'];

  return 0x00;

}

 

void scrollIP()

{

  if (millis() - lastScroll >= scrollDelay)

  {

    lastScroll = millis();

 

    for (int i = 0; i < 4; i++)

    {

      digit_has_dot[i] = false;

      int pos = scrollIndex + i;

 

      if (pos >= ip_str.length()) {

        display_digits[i] = 0x00;

      } else {

        char c = ip_str.charAt(pos);

        if (c == '.') {

          if (i > 0) digit_has_dot[i - 1] = true;

         display_digits[i] = 0x00;

        } else {

         display_digits[i] = getCharSegments(c);

        }

      }

    }

 

    scrollIndex++;

    if (scrollIndex > ip_str.length() + 4) {

      scrollIndex = 0;

    }

  }

}

 

void setup()

{

  Serial.begin(115200);

 

  pinMode(CLOCK_595, OUTPUT);

  pinMode(LATCH_595, OUTPUT);

  pinMode(DATA_595, OUTPUT);

  pinMode(OE_595, OUTPUT);

  digitalWrite(OE_595, HIGH);

  Send_74HC595(0);

  digitalWrite(OE_595, LOW);

 

  // Pins zum Blinken

  pinMode(PULSE_PIN, OUTPUT);

  pinMode(DIR_PIN, OUTPUT);

 

  // Verbindung zum WLAN

  Serial.println("Verbindung zum WLAN wird hergestellt...");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

  Serial.println("\nVerbindung hergestellt!");

  Serial.print("IP-Adresse: ");

  Serial.println(WiFi.localIP());

 

  IPAddress ip = WiFi.localIP();

  ip_str = String(ip[0]) + "." + String(ip[1]) + "." + String(ip[2]) + "." + String(ip[3]);

  Serial.print("IP zur Anzeige: ");

  Serial.println(ip_str);

}

 

void loop()

{

  scrollIP();

  TubeDisplay4Digit();

 

  // Pins 33 und 25 alle 500 ms blinkern lassen

  if (millis() - lastBlink >= blinkInterval)

  {

    lastBlink = millis();

    pinsOn = !pinsOn;

    digitalWrite(PULSE_PIN, pinsOn ? HIGH : LOW);

    digitalWrite(DIR_PIN, pinsOn ? HIGH : LOW);

  }

}

Antwort :

Wir wissen nicht, ob dieser Code korrekt ist. Wir empfehlen, jede Funktion einzeln zu testen und dann die Funktionen schrittweise hinzuzufügen, um herauszufinden, wo der Fehler auftritt.

Zurück zum Blog

Hinterlasse einen Kommentar