You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am using the following code to display characters on P10 LED but what is happening is sometimes the code hangs or sometimes it shows random characters. I have with serial monitor that the socket is being received perfectly.
// Fire up the DMD library as dmd
#define BELT_ID "TLM-1"
IPAddress ip(192, 168, 69, 170); // Static IP address
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA}; // MAC address of your Arduino
int serverPort = 1234; // Port number of the server
int index_of_delimiter;
int resultantCharSize = 0;
int vehicleDesctiptionCharSize = 0;
unsigned long previousPingTime = 0;
const unsigned long pingInterval = 5000; // 5 seconds in milliseconds
unsigned long currentMillis;
int bytesRead = 0;
IPAddress serverIP(192, 168, 69, 150); // IP address of the server
IPAddress gateway(192, 168, 69, 1); // Gateway IP address
IPAddress subnet(255, 255, 255, 0); // Subnet mask
EthernetClient client;
/--------------------------------------------------------------------------------------
Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------/
void ScanDMD()
{
dmd.scanDisplayBySPI();
}
int getFreeMemory() {
extern int __heap_start, *__brkval;
int v;
return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}
Serial.println("Connecting to server...");
// Connect to the server
connectToServer();
// initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
Timer1.initialize(5000); // period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
Timer1.attachInterrupt(ScanDMD); // attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
// clear/init the DMD pixels held in RAM
dmd.clearScreen(false);
delay(5000);
dmd.clearScreen(true); // true is normal (all pixels off), false is negative (all pixels on)
}
currentMillis = millis();
if (client.connected())
{
// Client is connected
if (client.available())
{
previousPingTime = currentMillis; // Update the last ping time
// Read the data from the server until a . character is encountered
receivedData = client.readStringUntil('.');
receivedData.toCharArray(receivedDataChar, receivedData.length() + 1);
// Split the string
char *token = strtok(receivedDataChar, &delimiter);
while (token != NULL)
{
if (token[0] == 'b')
{
belt_ids = String(token).substring(2);
belt_ids.toUpperCase();
index_of_delimiter = belt_ids.indexOf(',');
belt_id_1=belt_ids.substring(0, index_of_delimiter);
belt_id_2=belt_ids.substring(index_of_delimiter+1);
if(belt_id_1!=BELT_ID && belt_id_2!=BELT_ID){
break;
}
}
if (token[0] == 'c' && strncmp(token, "clear", sizeof("clear") - 1) == 0){
is_screen_cleared = true;
}
if (token[0] == 'c')
{
is_screen_value_updated = true;
count = String(token).substring(2);
}
else if (token[0] == 'l')
{
is_screen_value_updated = true;
bag_limit = String(token).substring(2);
}
else
{
is_screen_value_updated = true;
vehicle_desctiption = String(token).substring(2);
vehicle_desctiption.toUpperCase();
}
// Get the next token
token = strtok(NULL, &delimiter);
}
}
// Check for server responsiveness every pingInterval milliseconds
if (currentMillis - previousPingTime >= pingInterval) {
previousPingTime = currentMillis; // Update the last ping time
if (!pingServer()) {
// Server not responsive, handle disconnection
client.stop(); // Disconnect the client
}
}
}
else
{
// Client is disconnected
Serial.println("Server disconnected!");
// Attempt to reconnect to the server
connectToServer();
}
delay(100);
}
void connectToServer()
{
Serial.println("Connecting to server...");
// Connect to the server
if (client.connect(serverIP, serverPort))
{
Serial.println("Connected!");
}
else
{
Serial.println("Connection failed!");
// Retry connection after a delay
delay(1000);
}
}
bool pingServer() {
client.print("PING\n"); // Send a ping request
delay(100); // Wait for a response
bytesRead = 0;
while (client.available() && bytesRead < sizeof(response)) {
response[bytesRead++] = client.read();
}
response[bytesRead] = '\0'; // Null-terminate the response array
return strcmp(response, "PONG") == 0; // Check if response is as expected
}
Can you please enlighten me on the issue
The text was updated successfully, but these errors were encountered:
I am using the following code to display characters on P10 LED but what is happening is sometimes the code hangs or sometimes it shows random characters. I have with serial monitor that the socket is being received perfectly.
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include <Ethernet.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#include <Arduino.h>
// Fire up the DMD library as dmd
#define BELT_ID "TLM-1"
IPAddress ip(192, 168, 69, 170); // Static IP address
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAA}; // MAC address of your Arduino
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2
#define MAX_CHAR_ARRAY_SIZE 100
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
String belt_ids;
String belt_id_1;
String belt_id_2;
String count;
String bag_limit;
String vehicle_desctiption;
String receivedData;
String resultant;
char delimiter = '/';
char response[5];
char resultantChar[MAX_CHAR_ARRAY_SIZE];
char vehicleDesctiptionChar[MAX_CHAR_ARRAY_SIZE];
char receivedDataChar[MAX_CHAR_ARRAY_SIZE];
bool is_screen_value_updated = false;
bool is_screen_cleared = false;
int serverPort = 1234; // Port number of the server
int index_of_delimiter;
int resultantCharSize = 0;
int vehicleDesctiptionCharSize = 0;
unsigned long previousPingTime = 0;
const unsigned long pingInterval = 5000; // 5 seconds in milliseconds
unsigned long currentMillis;
int bytesRead = 0;
IPAddress serverIP(192, 168, 69, 150); // IP address of the server
IPAddress gateway(192, 168, 69, 1); // Gateway IP address
IPAddress subnet(255, 255, 255, 0); // Subnet mask
EthernetClient client;
/--------------------------------------------------------------------------------------
Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------/
void ScanDMD()
{
dmd.scanDisplayBySPI();
}
int getFreeMemory() {
extern int __heap_start, *__brkval;
int v;
return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}
void setup()
{
Serial.begin(9600);
// Initialize Ethernet library
// Ethernet.begin(mac);
Ethernet.begin(mac, ip, gateway, gateway, subnet);
// Wait for Ethernet to be initialized
delay(1000);
Serial.print("IP Address: ");
Serial.println(Ethernet.localIP());
Serial.println("Connecting to server...");
// Connect to the server
connectToServer();
// initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
Timer1.initialize(5000); // period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker.
Timer1.attachInterrupt(ScanDMD); // attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
// clear/init the DMD pixels held in RAM
dmd.clearScreen(false);
delay(5000);
dmd.clearScreen(true); // true is normal (all pixels off), false is negative (all pixels on)
dmd.drawBox(0, 0, (32 * DISPLAYS_ACROSS) - 1, (16 * DISPLAYS_DOWN) - 1, GRAPHICS_NORMAL);
dmd.selectFont(SystemFont5x7);
}
void loop()
{
int freeMem = getFreeMemory();
Serial.print("Free Memory: ");
Serial.print(freeMem);
Serial.println(" bytes");
if (is_screen_value_updated)
{
dmd.selectFont(SystemFont5x7);
resultant = count + "/" + bag_limit;
resultantCharSize = resultant.length() + 1;
resultant.toCharArray(resultantChar, resultantCharSize);
dmd.drawString(5, 2, resultantChar, resultantCharSize, GRAPHICS_NORMAL);
}
if(is_screen_cleared){
dmd.clearScreen(true); // true is normal (all pixels off), false is negative (all pixels on)
}
currentMillis = millis();
if (client.connected())
{
// Client is connected
if (client.available())
{
previousPingTime = currentMillis; // Update the last ping time
// Read the data from the server until a . character is encountered
receivedData = client.readStringUntil('.');
receivedData.toCharArray(receivedDataChar, receivedData.length() + 1);
}
else
{
// Client is disconnected
Serial.println("Server disconnected!");
}
delay(100);
}
void connectToServer()
{
Serial.println("Connecting to server...");
// Connect to the server
if (client.connect(serverIP, serverPort))
{
Serial.println("Connected!");
}
else
{
Serial.println("Connection failed!");
// Retry connection after a delay
delay(1000);
}
}
bool pingServer() {
client.print("PING\n"); // Send a ping request
delay(100); // Wait for a response
bytesRead = 0;
while (client.available() && bytesRead < sizeof(response)) {
response[bytesRead++] = client.read();
}
response[bytesRead] = '\0'; // Null-terminate the response array
return strcmp(response, "PONG") == 0; // Check if response is as expected
}
Can you please enlighten me on the issue
The text was updated successfully, but these errors were encountered: