Problema accensione matrice led

Progetti Arduino
Rispondi
Tommy Aggiustatutto
Messaggi: 118
Iscritto il: sab 13 lug 2019, 22:59
Località: Provincia di Novara
Contatta:

Problema accensione matrice led

Messaggio da Tommy Aggiustatutto »

Buonasera a tutti, sto cercando di far accendere tramite un esp8266 via pagina web al posto di un solo led una matrice led MAX7219.in pratica vorrei controllare tramite il tasto sul web server l'accensione e spegnimento di una figura che appare sulla matrice. Su internet ho trovato il codice che crea la pagina web e controlla ON/OFF del led, e ho anche trovato (e modificato con la figura che ho bisogno) il codice per l'accensione della matrice led. Non riesco però a controllare via webpage l'accensione e spegnimento della figura sulla matrice nello stesso modo in cui viene fatta sul led. Io nell'ultimo codice presente nel messaggio ho "fuso" assieme i due precedenti ma purtroppo la matrice non si accende... eppure il led si controlla benissimo.

Sto impazzendo da giorni... cosa sbaglio?

codice sola figura su matrice:

Codice: Seleziona tutto

#include "LedControl.h"
#define DIN 0
#define CS 1
#define CLK 3
#define Moduli 1

LedControl lc = LedControl(DIN, CLK, CS, Moduli);
byte a[8] = {B00111100,B01111110,B11111111,B10000001,B10000001,B11111111,B01111110,B00111100};
byte b[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 3);
  lc.clearDisplay(0);
}

void loop() {
  for (int row = 0; row < 8; row++) {
    lc.setRow(0, row, a[row]);
  }
  delay(2000);

  for (int row = 0; row < 8; row++) {
    lc.setRow (0, row, b[row]);
  }
  delay(500);
}

codice sola accensione led presente su scheda esp8266:

Codice: Seleziona tutto

#include <ESP8266WiFi.h>

 

const char* ssid = "Wi-Fi Name";    //  Your Wi-Fi Name

const char* password = "Password";   // Wi-Fi Password

 

int LED = 2;   // led connected to GPIO2 (D4)

WiFiServer server(80);

 

void setup()

{

  Serial.begin(115200); //Default Baudrate

  pinMode(LED, OUTPUT);

  digitalWrite(LED, LOW);

 

  Serial.print("Connecting to the Newtork");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

  Serial.println("WiFi connected"); 

  server.begin();  // Starts the Server

  Serial.println("Server started");

 

  Serial.print("IP Address of network: "); // will IP address on Serial Monitor

  Serial.println(WiFi.localIP());

  Serial.print("Copy and paste the following URL: https://"); // Will print IP address in URL format

  Serial.print(WiFi.localIP());

  Serial.println("/");

}

 

void loop()

{

  WiFiClient client = server.available();

  if (!client)

  {

    return;

  }

  Serial.println("Waiting for new client");

  while(!client.available())

  {

    delay(1);

  }

 

  String request = client.readStringUntil('\r');

  Serial.println(request);

  client.flush();

 

  int value = LOW;

  if(request.indexOf("/LED=ON") != -1)

  {

    digitalWrite(LED, HIGH); // Turn LED ON

    value = HIGH;

  }

  if(request.indexOf("/LED=OFF") != -1)

  {

    digitalWrite(LED, LOW); // Turn LED OFF

    value = LOW;

  }

 

//*------------------HTML Page Code---------------------*//

 

  client.println("HTTP/1.1 200 OK"); //

  client.println("Content-Type: text/html");

  client.println("");

  client.println("<!DOCTYPE HTML>");

  client.println("<html>");

 

  client.print(" CONTROL LED: ");

 

  if(value == HIGH)

  {

    client.print("ON");

  }

  else

  {

    client.print("OFF");

  }

  client.println("<br><br>");

  client.println("<a href=\"/LED=ON\"\"><button>ON</button></a>");

  client.println("<a href=\"/LED=OFF\"\"><button>OFF</button></a><br />");

  client.println("</html>");

 

  delay(1);

  Serial.println("Client disonnected");

  Serial.println("");

}


Codice modificato da me con primo + secondo codice

Codice: Seleziona tutto

#include <ESP8266WiFi.h>
#include "LedControl.h" // led


#define DIN 0   // led
#define CS 1    // led
#define CLK 3   // led
#define Moduli 1// led

LedControl lc = LedControl(DIN, CLK, CS, Moduli); // 
byte a[8] = {B00111100,B01111110,B11111111,B10000001,B10000001,B11111111,B01111110,B00111100};
byte b[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};

 

const char* ssid = "wifissid";    //  Your Wi-Fi Name

const char* password = "pass";   // Wi-Fi Password

 

int LED = 2;   // led connected to GPIO2 (D4)

WiFiServer server(80);

 

void setup()

{

  Serial.begin(115200); //Default Baudrate

  pinMode(LED, OUTPUT);

  digitalWrite(LED, LOW);

  lc.shutdown(0, false);    // led
  lc.setIntensity(0, 3);   // led
  lc.clearDisplay(0);       // led

  Serial.print("Connecting to the Newtork");

  WiFi.begin(ssid, password);
  IPAddress ip(192, 168, 1, 171); //XXX sceglilo tu
  IPAddress gateway(192, 168, 1, 1); //suppongo sia quello di default se no settalo tu
  IPAddress subnet(255, 255, 255, 0); //Come sopra
  WiFi.config(ip, gateway, subnet);
    
  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

  Serial.println("WiFi connected"); 

  server.begin();  // Starts the Server

  Serial.println("Server started");

 

  Serial.print("IP Address of network: "); // will IP address on Serial Monitor

  Serial.println(WiFi.localIP());

  Serial.print("Copy and paste the following URL: https://"); // Will print IP address in URL format

  Serial.print(WiFi.localIP());

  Serial.println("/");

}

 

void loop()

{

  WiFiClient client = server.available();
  if (!client)
  {
    return;
  }
  Serial.println("Waiting for new client");
  while(!client.available())
  {
    delay(1);
  }

  String request = client.readStringUntil('\r');

  Serial.println(request);
  client.flush();
 
  int value = LOW;

  if(request.indexOf("/LED=ON") != -1)
  {
    digitalWrite(LED, HIGH); // Turn LED ON
    value = HIGH; 
      delay (10);
         Serial.println("MAtrice Accesa");
  for (int row = 0; row < 8; row++) {
    lc.setRow(0, row, a[row]);
      Serial.println(row);
 
  }
  delay(500);
  }

  if(request.indexOf("/LED=OFF") != -1)

  {

    digitalWrite(LED, LOW); // Turn LED OFF
        value = LOW;
           Serial.println("MAtrice spenta");
    delay (10);
    for (int row = 0; row < 8; row++) {
    lc.setRow (0, row, b[row]);
    Serial.println(row);
  }
    

  }

 

//*------------------HTML Page Code---------------------*//

 

  client.println("HTTP/1.1 200 OK"); //

  client.println("Content-Type: text/html");

  client.println("");

  client.println("<!DOCTYPE HTML>");

  client.println("<html>");

 

  client.print(" CONTROL LED: ");

 

  if(value == HIGH)

  {

    client.print("ON");

  }

  else

  {

    client.print("OFF");

  }

  client.println("<br><br>");

  client.println("<a href=\"/LED=ON\"\"><button>ON</button></a>");

  client.println("<a href=\"/LED=OFF\"\"><button>OFF</button></a><br />");

  client.println("</html>");

 

  delay(1);

  Serial.println("Client disonnected");

  Serial.println("");

}



QUI sono presenti la foto che illustra la matrice illuminata caricando solo il codice per l'accensione di essa e il video illustra il problema che sto riscontrando. Tramite webpage il led si controlla ma la matrice rimane sempre spenta. https://drive.google.com/drive/folders/ ... sp=sharing
Avatar utente
pgv
Messaggi: 257
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Problema accensione matrice led

Messaggio da pgv »

Mi e' sembrato di vedere un gatto... No, mi e' sembrato di vedere DUE ESP8266, uno sullo schedino piccolo connesso tramite i fili gialli al secondo che sta sulla scheda "Arduino-like". Il LED e' sullo scheidno piccolo, la matrice di LED e' connessa a quello piu' grande, non e' che il server Web gira sulla CPU dello schedino piccolo mentre il test con la matrice gira su quella del grande? Perche' questa strana connessione in coppia?

Oops, invecchio e divento guercio, ingrandendo la jpg ho visto ora che manca la CPU. Vedo anche un problemino, e non capisco come possa essersi accesa la matrice nella foto se il codice e' quello riportato sopra, perche' l'ESP8266-01S ossia lo schedino saldato in fondo ai fili gialli ha esattamente i pin seguenti:
RX e TX della UART, GPIO0 e GPIO2, un CH_PD chiamato "Chip Enable" che immagino serva quando viene usato come modem WiFi, la linea di RESET e le due linee di alimentazione. Dove sono i pin 1 e 3 dichiarati come Chip Select (CS) e Clock (CLK) per il controllo della matrice di LED???

Codice: Seleziona tutto

#define CS 1
#define CLK 3
Se sono i pin TX e RX allora tutti i riferimenti a Serial, per esempio Serial.print(), causeranno problemi e interferenze.
Tommy Aggiustatutto
Messaggi: 118
Iscritto il: sab 13 lug 2019, 22:59
Località: Provincia di Novara
Contatta:

Re: Problema accensione matrice led

Messaggio da Tommy Aggiustatutto »

Salve PGV
Allora qui cavi che vedi sono dovuti ad una mia modifica siccome l’esp8266 presente sulla scheda si era guastato e allora l’ho dissaldato e gli ho saldato con dei fili volanti e due zoccoli da 4pin un esp01. L’unico “problema” è il fatto di avere molti meno pin a disposizione, ma comunque per tutto il resto funziona bene lo stesso. Inoltre siccome ha lo zoccolo la posso anche usare come programmatore per gli altri esp-01 senza diventare matto con tutti i cavetti da collegare.

I pin 3 e 1 sarebbero i GPIO3 e GPIO1 che corrispondono ai pin RX e TX sulla scheda madre

Alla fine era semplicemente la porta seriale a far interferenza. Come l’ho disabilitata si è accesa anche la matrice oltre al led sul microcontrollore. Ne ho imparata una nuova. Non mi era mai capitato e non sapevo che la porta seriale potesse dar fastidio all’esecuzione del codice. Ti ringrazio davvero tanto per la tua disponibilità nei miei confronti e nel caso non mi fossi spiegato bene (cosa molto probabile) non esitare a chiedere.
Rispondi