Skip to content

Commit a022dfd

Browse files
committed
New lit udp protocol
1 parent 7cc7ae5 commit a022dfd

File tree

1 file changed

+55
-24
lines changed

1 file changed

+55
-24
lines changed

lit_arduino.ino

+55-24
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,87 @@
1-
#include "FastLED.h"
1+
#include <NeoPixelBus.h>
22
#include <ESP8266WiFi.h>
33
#include <SPI.h>
44
#include <WiFiUdp.h>
55

6-
#define NUM_LEDS 60
6+
#define TIMESTAMP_SIZE 8
7+
#define NUM_LEDS 90
8+
#define PACKET_SIZE (NUM_LEDS * 3 + TIMESTAMP_SIZE)
79

8-
const char* ssid = "jank";
9-
const char* password = "applesauce";
10+
const char* ssid = "Apt B";
11+
const char* password = "abcdefgh";
1012
const unsigned int port = 9000;
1113
WiFiUDP socket;
12-
char packetBuffer[NUM_LEDS*3];
13-
CRGB leds[NUM_LEDS];
14+
char packetBuffer[PACKET_SIZE];
15+
uint64_t latestTimestamp = 0;
16+
NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> neopixels(NUM_LEDS);
1417

1518
void setup() {
16-
FastLED.addLeds<NEOPIXEL, 6>(leds, NUM_LEDS);
1719
Serial.begin(115200);
18-
delay(10);
20+
neopixels.Begin();
1921

20-
// We start by connecting to a WiFi network
22+
delay(10);
2123

2224
Serial.println();
2325
Serial.println();
26+
27+
28+
while (WiFi.status() != WL_CONNECTED)
29+
{
30+
connectToWifi();
31+
}
32+
33+
socket.begin(port);
34+
}
35+
36+
void connectToWifi()
37+
{
2438
Serial.print("Connecting to ");
2539
Serial.println(ssid);
26-
40+
41+
WiFi.disconnect();
2742
WiFi.begin(ssid, password);
28-
29-
while (WiFi.status() != WL_CONNECTED) {
43+
44+
while (WiFi.status() == WL_DISCONNECTED) {
3045
delay(500);
3146
Serial.print(".");
47+
//Serial.printf("%d", WiFi.status());
3248
}
33-
3449
Serial.println("");
35-
Serial.println("WiFi connected");
3650
Serial.println("IP address: ");
3751
Serial.println(WiFi.localIP());
38-
socket.begin(port);
52+
}
53+
54+
uint64_t extractTimestamp(char* packetBuffer, int len) {
55+
char* timeArr = packetBuffer + len - 8;
56+
// Serial.printf("%d %d %d %d %d %d %d\n", timeArr[0], timeArr[1], timeArr[2], timeArr[3], timeArr[4], timeArr[5], timeArr[6],timeArr[7]);
57+
return timeArr[0] + (timeArr[1]<<8) + (timeArr[2]<<16) + (timeArr[3]<<24) + (timeArr[4]<<32) + (timeArr[5]<<40) + (timeArr[6]<<48) + (timeArr[7]<<56);
3958
}
4059

4160

4261
void loop() {
62+
if (WiFi.status() != WL_CONNECTED) {
63+
connectToWifi();
64+
return;
65+
}
4366
int packetSize = socket.parsePacket();
44-
if(packetSize) {
45-
Serial.print("Recieved packet");
46-
int len = socket.read(packetBuffer, 255);
47-
if (len > 0) {
48-
packetBuffer[len] = 0;
67+
if (!packetSize) {
68+
return;
69+
}
70+
if (packetSize == PACKET_SIZE) {
71+
int len = socket.read(packetBuffer, PACKET_SIZE);
72+
uint64_t timestamp = extractTimestamp(packetBuffer, len);
73+
if(timestamp < latestTimestamp) {
74+
Serial.println("Out of order packet received");
75+
return;
76+
} else {
77+
latestTimestamp = timestamp;
4978
}
50-
Serial.println("Contents:");
51-
for (int i = 0; i < len; i = i+3) {
52-
leds[i/3] = CRGB(packetBuffer[i], packetBuffer[i+1], packetBuffer[i+2]);
79+
for (int i = 0; i < NUM_LEDS * 3; i = i + 3) {
80+
neopixels.SetPixelColor(i / 3, RgbColor(packetBuffer[i], packetBuffer[i + 1], packetBuffer[i + 2]));
5381
}
54-
FastLED.show();
82+
neopixels.Show();
83+
}
84+
else {
85+
Serial.printf("ERROR: Incorrect packet size. Expected %d elements, but received %d.\n", NUM_LEDS * 3, packetSize);
5586
}
5687
}

0 commit comments

Comments
 (0)