コード例 #1
0
ファイル: x_pigpiod_if.c プロジェクト: highwalker/pigpio
void t2()
{
   int f, r, rr, oc;

   printf("PWM dutycycle/range/frequency tests.\n");

   set_PWM_range(GPIO, 255);
   set_PWM_frequency(GPIO, 0);
   f = get_PWM_frequency(GPIO);
   CHECK(2, 1, f, 10, 0, "set PWM range, set/get PWM frequency");

   callback(GPIO, EITHER_EDGE, t2cb);

   set_PWM_dutycycle(GPIO, 0);
   time_sleep(0.5); /* allow old notifications to flush */
   oc = t2_count;
   time_sleep(2);
   f = t2_count - oc;
   CHECK(2, 2, f, 0, 0, "set PWM dutycycle, callback");

   set_PWM_dutycycle(GPIO, 128);
   oc = t2_count;
   time_sleep(2);
   f = t2_count - oc;
   CHECK(2, 3, f, 40, 5, "set PWM dutycycle, callback");

   set_PWM_frequency(GPIO, 100);
   f = get_PWM_frequency(GPIO);
   CHECK(2, 4, f, 100, 0, "set/get PWM frequency");

   oc = t2_count;
   time_sleep(2);
   f = t2_count - oc;
   CHECK(2, 5, f, 400, 1, "callback");

   set_PWM_frequency(GPIO, 1000);
   f = get_PWM_frequency(GPIO);
   CHECK(2, 6, f, 1000, 0, "set/get PWM frequency");

   oc = t2_count;
   time_sleep(2);
   f = t2_count - oc;
   CHECK(2, 7, f, 4000, 1, "callback");

   r = get_PWM_range(GPIO);
   CHECK(2, 8, r, 255, 0, "get PWM range");

   rr = get_PWM_real_range(GPIO);
   CHECK(2, 9, rr, 200, 0, "get PWM real range");

   set_PWM_range(GPIO, 2000);
   r = get_PWM_range(GPIO);
   CHECK(2, 10, r, 2000, 0, "set/get PWM range");

   rr = get_PWM_real_range(GPIO);
   CHECK(2, 11, rr, 200, 0, "get PWM real range");

   set_PWM_dutycycle(GPIO, 0);
}
コード例 #2
0
ファイル: x_pigpiod_if2.c プロジェクト: SlySven/pigpio
void t3(int pi)
{
   int pw[3]={500, 1500, 2500};
   int dc[4]={20, 40, 60, 80};

   int f, rr, v;
   float on, off;

   int t, id;

   printf("PWM/Servo pulse accuracy tests.\n");

   id = callback(pi, GPIO, EITHER_EDGE, t3cbf);

   for (t=0; t<3; t++)
   {
      set_servo_pulsewidth(pi, GPIO, pw[t]);
      v = get_servo_pulsewidth(pi, GPIO);
      CHECK(3, t+t+1, v, pw[t], 0, "get servo pulsewidth");

      time_sleep(1);
      t3_reset = 1;
      time_sleep(4);
      on = t3_on;
      off = t3_off;
      CHECK(3, t+t+2, (1000.0*(on+off))/on, 20000000.0/pw[t], 1,
         "set servo pulsewidth");
   }

   set_servo_pulsewidth(pi, GPIO, 0);
   set_PWM_frequency(pi, GPIO, 1000);
   f = get_PWM_frequency(pi, GPIO);
   CHECK(3, 7, f, 1000, 0, "set/get PWM frequency");

   rr = set_PWM_range(pi, GPIO, 100);
   CHECK(3, 8, rr, 200, 0, "set PWM range");

   for (t=0; t<4; t++)
   {
      set_PWM_dutycycle(pi, GPIO, dc[t]);
      v = get_PWM_dutycycle(pi, GPIO);
      CHECK(3, t+t+9, v, dc[t], 0, "get PWM dutycycle");

      time_sleep(1);
      t3_reset = 1;
      time_sleep(2);
      on = t3_on;
      off = t3_off;
      CHECK(3, t+t+10, (1000.0*on)/(on+off), 10.0*dc[t], 1,
         "set PWM dutycycle");
   }

   set_PWM_dutycycle(pi, GPIO, 0);

   callback_cancel(id);
}
コード例 #3
0
ファイル: x_pigpiod_if.c プロジェクト: highwalker/pigpio
void t3()
{
   int pw[3]={500, 1500, 2500};
   int dc[4]={20, 40, 60, 80};

   int f, rr;
   float on, off;

   int t;

   printf("PWM/Servo pulse accuracy tests.\n");

   callback(GPIO, EITHER_EDGE, t3cbf);

   for (t=0; t<3; t++)
   {
      set_servo_pulsewidth(GPIO, pw[t]);
      time_sleep(1);
      t3_reset = 1;
      time_sleep(4);
      on = t3_on;
      off = t3_off;
      CHECK(3, 1+t, (1000.0*(on+off))/on, 20000000.0/pw[t], 1,
         "set servo pulsewidth");
   }

   set_servo_pulsewidth(GPIO, 0);
   set_PWM_frequency(GPIO, 1000);
   f = get_PWM_frequency(GPIO);
   CHECK(3, 4, f, 1000, 0, "set/get PWM frequency");

   rr = set_PWM_range(GPIO, 100);
   CHECK(3, 5, rr, 200, 0, "set PWM range");

   for (t=0; t<4; t++)
   {
      set_PWM_dutycycle(GPIO, dc[t]);
      time_sleep(1);
      t3_reset = 1;
      time_sleep(2);
      on = t3_on;
      off = t3_off;
      CHECK(3, 6+t, (1000.0*on)/(on+off), 10.0*dc[t], 1,
         "set PWM dutycycle");
   }

   set_PWM_dutycycle(GPIO, 0);

}
コード例 #4
0
ファイル: pwmnode.cpp プロジェクト: bigfug/Fugio
void PWMNode::frameEnd( qint64 pTimestamp )
{
#if defined( PIGPIO_SUPPORTED )
	const int		PigPio = RaspberryPiPlugin::instance()->piIndex();

	for( QSharedPointer<fugio::PinInterface> P : mNode->enumInputPins() )
	{
		quint16		PId = P->name().toInt();

		if( P->updated() < pTimestamp )
		{
			continue;
		}

		int			Val = variant( P ).toInt();

		set_PWM_dutycycle( PigPio, PId, qBound( 0, Val, 255 ) );
	}
#endif
}
コード例 #5
0
ファイル: x_pigpiod_if.c プロジェクト: highwalker/pigpio
void t4()
{
   int h, e, f, n, s, b, l, seq_ok, toggle_ok;
   gpioReport_t r;
   char p[32];

   printf("Pipe notification tests.\n");

   set_PWM_frequency(GPIO, 0);
   set_PWM_dutycycle(GPIO, 0);
   set_PWM_range(GPIO, 100);

   h = notify_open();
   e = notify_begin(h, (1<<4));
   CHECK(4, 1, e, 0, 0, "notify open/begin");

   time_sleep(1);

   sprintf(p, "/dev/pigpio%d", h);

   f = open(p, O_RDONLY);

   set_PWM_dutycycle(GPIO, 50);
   time_sleep(4);
   set_PWM_dutycycle(GPIO, 0);

   e = notify_pause(h);
   CHECK(4, 2, e, 0, 0, "notify pause");

   e = notify_close(h);
   CHECK(4, 3, e, 0, 0, "notify close");

   n = 0;
   s = 0;
   l = 0;
   seq_ok = 1;
   toggle_ok = 1;

   while (1)
   {
      b = read(f, &r, 12);
      if (b == 12)
      {
         if (s != r.seqno) seq_ok = 0;

         if (n) if (l != (r.level&(1<<4))) toggle_ok = 0;

         if (r.level&(1<<4)) l = 0;
         else                l = (1<<4);
           
         s++;
         n++;

         // printf("%d %d %d %X\n", r.seqno, r.flags, r.tick, r.level);
      }
      else break;
   }
   close(f);
 
   CHECK(4, 4, seq_ok, 1, 0, "sequence numbers ok");

   CHECK(4, 5, toggle_ok, 1, 0, "gpio toggled ok");

   CHECK(4, 6, n, 80, 10, "number of notifications");
}