OverviewFilesCommitsIssuesDocsReleasesPeers

cthuloid commits / 259a02e

added pwm2 command that allows the specification of numPeriods on the command line
259a02ee3f21ea0e56aa970ff9595b5d65b17d40
by John Zorko <jzorko@trulia.com> · 2019-03-04T04:04:44.000Z

Changed files (2) +83 -5

LightArm/python/pwmfade-up.py +5 -5
……@@ -4,7 +4,7 @@ import socket, math, time
44
55# Create a TCP/IP socket
66#server_addresses = [('10.0.2.3', 1337), ('10.0.2.4', 1337), ('10.0.2.6', 1337)]
7server_addresses = [('10.0.0.159', 1337)]
7server_addresses = [('10.0.0.16', 1337)]
88sockets = []
99
1010try:
……@@ -16,21 +16,21 @@ try:
1616 sockets.append(sock)
1717
1818 print('connected?')
19 interval = .01 #seconds
19 interval = .03 #seconds
2020 maxpwm = 65535
2121 minpwm = 2000
22 inc = 200
22 inc = 1000
2323 i = minpwm
2424 while i<=maxpwm:
2525 for sock in sockets:
26 s = 'pwm ' + str(abs(i)) + '\n'
26 s = 'pwm2 ' + str(inc) + " 1 " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + " " + str(abs(i)) + '\n'
2727# print(s)
2828 sock.sendall(bytes(s, 'UTF-8'))
2929# if i % 1000 == 0: print(i)
3030
3131 i += inc
3232 if i >= maxpwm: sock.close()
33 time.sleep(interval)
33 #time.sleep(interval)
3434
3535except socket.timeout:
3636 print('error: connected timed out')
esp32/32wifi12frak/32wifi12frak.ino +78 -0
……@@ -53,6 +53,7 @@ int ledChannel11 = 11;
5353const int PWMPins[] = {32, 33, 25, 26, 27, 14, 12, 13, 2, 23, 22, 21};
5454const int NumPWMPins = sizeof(PWMPins) / sizeof(*PWMPins);
5555int PinCurrentValues[NumPWMPins] = {0};
56
5657// this flag will invert PWM output (65535 - PWM), for active-low devices
5758
5859const char *MsgPWMTupleFormatError = "Error: takes up to 6 arguments between 0 and 255";
……@@ -69,6 +70,7 @@ int parseListOfIDs(int *outIDs, int maxIDs);
6970void cmdUnrecognized(const char *cmd);
7071void cmdSetFrequency();
7172void cmdPWMPins();
73void cmdPWMPins2();
7274void cmdSetPrintLevel();
7375void cmdServo();
7476
……@@ -76,6 +78,7 @@ SerialCommand::Entry CommandsList[] = {
7678 {"plevel", cmdSetPrintLevel},
7779 {"freq", cmdSetFrequency},
7880 {"pwm", cmdPWMPins},
81 {"pwm2", cmdPWMPins2},
7982 {"s", cmdServo},
8083 {NULL, NULL}
8184};
……@@ -235,6 +238,81 @@ void cmdSetFrequency() {
235238 printlnAck(freq);
236239}
237240
241void cmdPWMPins2() {
242 const char *SetPWM2UsageMsg = "Error: takes up to 13 arguments between 0 and 65535 (except argument 3's max is 45000).";
243
244 long channelValues[NumPWMPins];
245 int count = 0;
246
247 char *arg = CmdMgr.next();
248 if (arg == NULL) {
249 printlnError("Error: no arguments");
250 return;
251 }
252
253 long numPeriods = parsePWM(arg, 100);
254 arg = CmdMgr.next();
255 long periodLength = parsePWM(arg, 100);
256 arg = CmdMgr.next();
257
258 do {
259 int index;
260 long value;
261
262 if (count >= NumPWMPins) {
263 printlnError(SetPWM2UsageMsg);
264 return;
265 }
266
267 char *end;
268 index = count;
269 value = parsePWM(arg, count % 3 == 2 ? RED_MAX_PWM : MAX_PWM);
270 if (value < 0) {
271 printlnError(SetPWM2UsageMsg);
272// value = 4000;
273 return;
274 }
275
276 //printInfo("Set pin ");
277 //printInfo(PWMPins[index]);
278 //printInfo(" to ");
279 //printlnInfo(value);
280 channelValues[index] = value;
281 count++;
282 } while (arg = CmdMgr.next());
283
284 // interpolate over a period of time
285 const TickType_t xDelay = periodLength / portTICK_PERIOD_MS;
286
287 float frameDelay = 9.14; // 9.14ms - length of time between frames at 60fps
288
289 long beginTime = micros();
290 long endTime = beginTime + 9140;
291
292 for (long period = 1; period < 1+numPeriods; period++) {
293 //long beginTime = millis();
294 float fraction = period / (float)numPeriods;
295 for (int i = 0; i < count; i++) {
296 unsigned long v = PinCurrentValues[i] + (channelValues[i] - PinCurrentValues[i]) * fraction;
297 //printlnAlways(v);
298 myHRWrite(PWMPins[i], v);
299 }
300 //long endTime = millis();
301 //printlnAlways(endTime - beginTime);
302 //vTaskDelay(xDelay);
303 }
304
305 for (int i = 0; i < count; i++) {
306 unsigned long v = channelValues[i];
307 PinCurrentValues[i] = v;
308 myHRWrite(PWMPins[i], v);
309 }
310
311 //printAck("OK set ");
312 //printAck(count);
313 //printlnAck(" pins");
314}
315
238316// expects space-delimited ints 0-65535, or space delimited <index>:<pwm> pairs
239317void cmdPWMPins() {
240318 const char *SetPWMUsageMsg = "Error: takes up to 12 arguments between 0 and 65535 (except argument 3's max is 45000).";