Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * Written by: Miradil Zeynalli
- * Company: Sumaks Technologies
- * Project: P10 displays for Tax Ministry
- * Date: 29.06.2019
- * IDE Version: 1.8.9
- *
- * Used external libraries:
- * UIPEthernet - https://github.com/UIPEthernet/UIPEthernet
- *
- * Purpose:
- * This code reads data from ethernet entered by user.
- * Then this data is parsed and collected otherwise, into
- * two other packets of data, which are sent by two
- * SoftwareSerials (for each part of display)
- *
- */
- #include <SPI.h>
- #include <SoftwareSerial.h>
- #include <UIPEthernet.h>
- #include <avr/wdt.h>
- #define RX_TOP 3
- #define TX_TOP 5
- #define RX_BOTTOM 6
- #define TX_BOTTOM 9
- const uint32_t TIMEOUT = 70;
- /*
- #ifdef MACON3_FULDPX
- #undef MACON3_FULDPX
- #define MACON3_FULDPX 1
- #endif
- #ifdef PHCON1_PDPXMD
- #undef PHCON1_PDPXMD
- #define PHCON1_PDPXMD 1
- #endif
- */
- byte mac[] = {
- 0xDE, 0xAD, 0xAA, 0x18, 0x3B, 0x1A
- };
- //IPAddress ip(192, 168, 1, 18);
- //IPAddress myDns(8, 8, 8, 8);
- //IPAddress gateway(192, 168, 1, 1);
- //IPAddress subnet(255, 255, 255, 0);
- IPAddress ip(172, 20, 57, 250);
- IPAddress myDns(192, 168, 250, 248);
- IPAddress gateway(172, 20, 57, 1);
- IPAddress subnet(255, 255, 255, 0);
- EthernetServer server(23); // port 23
- boolean alreadyConnected = false; // whether or not the client was connected previously
- SoftwareSerial top(RX_TOP, TX_TOP); // for top 2 rows of display
- SoftwareSerial bottom(RX_BOTTOM, TX_BOTTOM); // for bottom 2 rows of display
- char *up1, *up2, *down1, *down2, *line1, *line2;
- void setup() {
- watchdogSetup();
- // initialize the ethernet device
- Ethernet.begin(mac, ip, myDns, gateway, subnet);
- wdt_reset();
- // start listening for clients
- server.begin();
- wdt_reset();
- Serial.begin(9600);
- top.begin(9600); // for top side of display
- bottom.begin(9600); // for bottom side of display
- Serial.print("Local IP address: ");
- Serial.println(Ethernet.localIP());
- }
- void loop() {
- // wait for a new client:
- wdt_reset();
- parse_data();
- }
- void watchdogSetup(void)
- {
- wdt_reset();
- cli();
- WDTCSR |= (1 << WDCE) | (1 << WDE);
- WDTCSR = (1 << WDIE) | (1 << WDE) | (1 << WDP2) | (1 << WDP1); // 1 sec wdt_timer
- sei();
- }
- String read_data()
- {
- wdt_reset();
- EthernetClient client = server.available();
- String cmd = "";
- wdt_reset();
- if (client)
- {
- cmd = "";
- while (client.available() > 0)
- {
- cmd += (char) client.read();
- wdt_reset();
- }
- client.println("DATA Recieved!");
- return cmd.substring(0, cmd.length() - 2); // skip last '\r\n' character
- }
- return "";
- }
- void parse_data()
- {
- uint64_t prev = millis();
- String d;
- do
- {
- d = read_data();
- wdt_reset();
- } while (((millis() - prev) < (TIMEOUT * 1000)) && (d.length() < 2));
- Serial.print("received data: ");
- Serial.println(d);
- if(d.length() < 2) // no valid data got in TIMEOUT period
- while(1); // force wdt
- wdt_reset();
- // tokenize string
- up1 = strtok((char *) d.c_str(), ",");
- up2 = strtok(NULL, ",");
- line1 = strtok(NULL, ",");
- down1 = strtok(NULL, ",");
- down2 = strtok(NULL, ",");
- line2 = strtok(NULL, ",");
- wdt_reset();
- // send data to respective parts of display
- top.println(String(up1) + "," + String(up2) + "," + String(line1));
- bottom.println(String(down1) + "," + String(down2) + "," + String(line2));
- }
Advertisement
Add Comment
Please, Sign In to add comment