Beispiel #1
0
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");
    }
}
Beispiel #2
0
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;
}