Example #1
0
int main(int argc, char* argv[])
{
    gpioInitialise();
    int spiHandle = i2cOpen(1, 0x26, 0);
	i2cWriteByte(spiHandle, 3);
	gpioDelay(100);
    i2cClose(spiHandle);
    return 0;
}
Example #2
0
int main(int argc, char** argv)
{
	int count;
	uint8_t red = 0;
	uint8_t green = 0;
	uint8_t blue = 0;
 	
	if (argc > 1)
    	{
      		for (count = 1; count < argc; count++)
		{
	  		printf("argv[%d] = %s\n", count, argv[count]);

			if (count == 1) red = atoi(argv[1]);
			if (count == 2) green = atoi(argv[2]);
			if (count == 3) blue = atoi(argv[3]);
		}
    	}
	else
    	{
      		printf("please set colour eg 255 0 15\n");
		return 0;
    	}

	// open Linux I2C device
	i2cOpen();

	// set address of the controller
	i2cSetAddress(0x53);

	writeValue(red++, green++, blue++);

	// close Linux I2C device
	i2cClose();

	return 0;
}
Example #3
0
int main(int argc, char *argv[])
{
   int i;
   int r;
   int handle;
   char aout;
   unsigned char command[2];
   unsigned char value[4];
   unsigned char str[8];

   int j;
   int key;

   if (gpioInitialise() < 0) return 1;

   initscr();
   noecho();
   cbreak();
   nodelay(stdscr, true);
   curs_set(0);

   printw("PCF8591 + or - to change aout, any other key to quit.");

   mvaddstr(10, 0, "Brightness");
   mvaddstr(12, 0, "Temperature");
   mvaddstr(14, 0, "?");
   mvaddstr(16, 0, "Resistor");

   refresh();

   handle = i2cOpen(1, PCF8591_I2C_ADDR, 0);

   command[1] = 0;
   aout = 128;

   while (1)
   {
      for (i=0; i<4; i++)
      {
         command[1] = aout;
         command[0] = 0x40 | ((i + 1) & 0x03); // output enable | read input i

         i2cWriteDevice(handle, &command, 2);

         usleep(20000);

         // the read is always one step behind the selected input
         value[i] = i2cReadByte(handle);

         sprintf(str, "%3d", value[i]);
         mvaddstr(10+i+i, 12, str);
         value[i] = value[i] / 4;
         move(10 + i + i, 16);

         for(j = 0; j < 64; j++)
            if(j < value[i]) addch('*'); else addch(' ');
      }

      refresh();

      key = getch();

      if      ((key == '+') || (key == '=')) aout++;
      else if ((key == '-') || (key == '_')) aout--;
      else if  (key != -1)                   break;
   }

   endwin();
 
   i2cClose(handle);

   gpioTerminate();

   return (0);
}
void DataAquisition::run()
{
     //Variablendeklaration
     int handle = 0;
     int dataready = 0;

     int winkel_old= 999;

    while(1)
    {

         int dataX_MSB = 0;
         int dataX_LSB = 0;
         int dataY_MSB = 0;
         int dataY_LSB = 0;
         int dataZ_MSB = 0;
         int dataZ_LSB = 0;

         signed short int dataX = 0;
         signed short int dataY = 0;
         signed short int dataZ = 0;

         int winkel = 0;
         double tangens = 0;
         double dataX_ABS = 0;
         double dataZ_ABS = 0;

          //i2c

         handle = i2cOpen(1,0x55,0);

             i2cSwitchCombined(1);               // WICHTIG! Enable "Repeated Start"!!

             gpioWrite(13,1);                    // MMA8491_EN = 1
             gpioDelay(2000);                   // Ton (minimales Delay)

             i2cWriteByte(handle,0x00);
             dataready = i2cReadByte(handle);

             if((dataready & 0x08) == 0x08)      // Falls neue Daten Verfügbar
             {
                 dataX_MSB = i2cReadByteData(handle,0x01);
                 dataX_LSB = i2cReadByteData(handle,0x02);
                 dataY_MSB = i2cReadByteData(handle,0x03);
                 dataY_LSB = i2cReadByteData(handle,0x04);
                 dataZ_MSB = i2cReadByteData(handle,0x05);
                 dataZ_LSB = i2cReadByteData(handle,0x06);

                 dataX = dataX_LSB + (dataX_MSB << 8);
                 dataY = dataY_LSB + (dataY_MSB << 8);
                 dataZ = dataZ_LSB + (dataZ_MSB << 8);

                 //Absolutwert und Wandlung in Double
                 dataX_ABS = abs(dataX);
                 dataZ_ABS = abs(dataZ);

                 //Berechnung Tangens
                 tangens = (dataX_ABS)/(dataZ_ABS);

                 //Berechnung Winkel
                 winkel = (atan(tangens))*180 / PI;

                 //Unterscheidung Quadrant
                 if((dataZ >= 0) & (dataX >= 0))         // Rechts unten
                     winkel = winkel;
                 else if((dataZ <= 0) & (dataX >= 0))    // Rechts oben
                     winkel = 180 - winkel;
                 else if((dataZ <= 0) & (dataX <= 0))    // Links oben
                     winkel = 180 + winkel;
                 else if((dataZ >= 0) & (dataX <= 0))    // Links unten
                     winkel = 360 - winkel ;
             }

        i2cClose(handle);
        gpioWrite(13,0);                    // MMA8491_EN = 0

        if (winkel < 3 || winkel > 357)
        {
            winkel = 0;
        }


        //Filter gegen Stösse und Schläge
        if(winkel_old != 999)
        {
                if(winkel > (winkel_old+10))
                {
                    winkel = (winkel_old+10);
                }
                else if(winkel < (winkel_old-10))
                {
                    winkel = (winkel_old-10);
                }
        }

        if(fps == "2")
        {
            if(i%5 == 0)
            {
                angleArray[(i/5)] = winkel;
            }
        }
        else if(fps == "30")
        {
            angleArray[i] = winkel;
            angleArray[++i] = winkel;
            angleArray[++i] = winkel;
        }
        else
        {
            angleArray[i] = winkel;
        }
        winkel_old = winkel;
        i++;
        msleep(92);
    }
}
void I2CGpioHardwareBus::Close()
{
    i2cClose(_i2cHandle);
    ShutdownGpioBus();
}