void handle_BIT(float val) { int bit; float p, l; static float sum; static int cnt = 0; static int idx = 0; static int byte = 0; if (cnt == 0) { sum = val; cnt++; return; } else { cnt++; sum += val; } l = 2.0 * _lock; p = (100.0 * (sum - l)) / l; bit = -1; if ((cnt == 2) && (p > 50)) { if (_verbose > 1) printf("BIT 0: %6.2f %6.2f, %6.2f (%d)\n", val, sum, p, idx); cnt = 0; bit = 0; } if (cnt == 4) { if (_verbose > 1) printf("BIT 1: %6.2f %6.2f, %6.2f (%d)\n", val, sum, p, idx); cnt = 0; bit = 1; } if (bit < 0) return; byte >>= 1; byte = (byte & 0x1ff) | (bit << 9); idx++; if (idx == 10) { idx = 0; handle_byte((byte & 0xff) ^ 0x80); if ((byte & 0x300) != 0x300) printf("BYTE ERROR\n"); } }
int main() { pid.minOutput = 0.0; pid.maxOutput = 1.0; pc.baud(115200); aout.write(initial_setpoint); while (true) { input = ain.read(); pid.update(input, millis()); aout.write(pid.output); if (pc.readable()) { handle_byte(pc.getc()); } } return 0; }