void Adafruit_MCP23008::digitalWrite(uint8_t p, uint8_t d) {
  uint8_t gpio;
  
  // only 8 bits!
  if (p > 7)
    return;

  // read the current GPIO output latches
  gpio = readGPIO();

  // set the pin and direction
  if (d == HIGH) {
    gpio |= 1 << p; 
  } else {
    gpio &= ~(1 << p);
  }

  // write the new GPIO
  writeGPIO(gpio);
}
Exemplo n.º 2
0
int main(void)

{
        int fileHandleGPIO_LED;
        int fileHandleGPIO_PROXY;
        int i=0;

        puts("Starting proximity reader on Galileo board.");
        fileHandleGPIO_PROXY = openGPIO(GP_PROXY, GPIO_DIRECTION_IN);
        if(ERROR ==  fileHandleGPIO_PROXY)
        {
        		puts("Unable to open toggle Proximity port #8");
        		return(-1);
        }
        fileHandleGPIO_LED = openGPIO(GP_LED, GPIO_DIRECTION_OUT);

        if(ERROR ==  fileHandleGPIO_LED)

        {
        		puts("Unable to open toggle LED port #13");
        		return(-1);

        }


        //Switch off the LED before starting.
        writeGPIO(fileHandleGPIO_LED, 0);

        //set PWM parameters
        openPWM(GP_PWM);
        setPWMPeriod(1000000,GP_PWM);
        enablePWM(1,GP_PWM);
		setPWMDutyCycle(0,GP_PWM);


        //Start an infinite loop to keep polling for proximity info
        int proxyValue = 0;
        while(1==1)
        {
			proxyValue = readGPIO(fileHandleGPIO_PROXY,GP_PROXY);
			if(proxyValue == 1)
			{
				if(duty_cycle == 500000)
				{
					duty_cycle = 200000;
		        	writeGPIO(fileHandleGPIO_LED, 0);
				}
				else
				{
					duty_cycle = 500000;
		        	writeGPIO(fileHandleGPIO_LED, 1);
				}
				setPWMDutyCycle(duty_cycle,GP_PWM);
			}
			else
			{
				duty_cycle = 50000;
				setPWMDutyCycle(0,GP_PWM);
	        	writeGPIO(fileHandleGPIO_LED, 0);
			}
        	usleep(1000*400);
        }


        closeGPIO(GP_LED, fileHandleGPIO_LED);
        closeGPIO(GP_PROXY, fileHandleGPIO_PROXY);
        closePWM(GP_PWM);

        puts("Finished BURGLER ALARM on Galileo board.");
        return 0;
}
Exemplo n.º 3
0
void get()
{
        int GetVal = 0;
        printf("Sending Get Command\n");
        writeGPIO(fileHandleGPIO_4, 0); //LSB
        writeGPIO(fileHandleGPIO_5, 1);
        writeGPIO(fileHandleGPIO_6, 0);
        writeGPIO(fileHandleGPIO_7, 0); //MSB

        sleep(1);

        writeGPIO(fileHandleGPIO_S, 0);//PIC reads command

        sleep(1);

        writeGPIO(fileHandleGPIO_4, 0); //LSB
        writeGPIO(fileHandleGPIO_5, 0);
        writeGPIO(fileHandleGPIO_6, 0);
        writeGPIO(fileHandleGPIO_7, 0); //MSB

        closeGPIO(GP_4,fileHandleGPIO_4);
        closeGPIO(GP_5,fileHandleGPIO_5);
        closeGPIO(GP_6,fileHandleGPIO_6);
        closeGPIO(GP_7,fileHandleGPIO_7);

        sleep(1);

        writeGPIO(fileHandleGPIO_S, 1);
        sleep(1);//Wait for pic to output

        fileHandleGPIO_4 = openGPIO(GP_4, GPIO_DIRECTION_IN);
        fileHandleGPIO_5 = openGPIO(GP_5, GPIO_DIRECTION_IN);
        fileHandleGPIO_6 = openGPIO(GP_6, GPIO_DIRECTION_IN);
        fileHandleGPIO_7 = openGPIO(GP_7, GPIO_DIRECTION_IN);

        sleep(1);

        printf("Recieving First Nibble\n");
        GetVal = ReadAndConvertVals();

        closeGPIO(GP_4,fileHandleGPIO_4);
        closeGPIO(GP_5,fileHandleGPIO_5);
        closeGPIO(GP_6,fileHandleGPIO_6);
        closeGPIO(GP_7,fileHandleGPIO_7);

        sleep(1);

        writeGPIO(fileHandleGPIO_S, 0);

        sleep(1);

        fileHandleGPIO_4 = openGPIO(GP_4, GPIO_DIRECTION_IN);
        fileHandleGPIO_5 = openGPIO(GP_5, GPIO_DIRECTION_IN);
        fileHandleGPIO_6 = openGPIO(GP_6, GPIO_DIRECTION_IN);
        fileHandleGPIO_7 = openGPIO(GP_7, GPIO_DIRECTION_IN);

        sleep(1);

        printf("Recieving Second Nibble\n");
        GetVal += ReadAndConvertVals2();

        closeGPIO(GP_4,fileHandleGPIO_4);
        closeGPIO(GP_5,fileHandleGPIO_5);
        closeGPIO(GP_6,fileHandleGPIO_6);
        closeGPIO(GP_7,fileHandleGPIO_7);

        writeGPIO(fileHandleGPIO_S, 1);
        sleep(1);

        fileHandleGPIO_4 = openGPIO(GP_4, GPIO_DIRECTION_IN);
        fileHandleGPIO_5 = openGPIO(GP_5, GPIO_DIRECTION_IN);
        fileHandleGPIO_6 = openGPIO(GP_6, GPIO_DIRECTION_IN);
        fileHandleGPIO_7 = openGPIO(GP_7, GPIO_DIRECTION_IN);

        sleep(1);

        printf("Recieving Last Crumb\n");
        GetVal += ReadAndConvertVals3();

        closeGPIO(GP_4,fileHandleGPIO_4);
        closeGPIO(GP_5,fileHandleGPIO_5);
        closeGPIO(GP_6,fileHandleGPIO_6);
        closeGPIO(GP_7,fileHandleGPIO_7);
        sleep(1);

        writeGPIO(fileHandleGPIO_S, 0);
        sleep(1);
        fileHandleGPIO_4 = openGPIO(GP_4, GPIO_DIRECTION_IN);
        fileHandleGPIO_5 = openGPIO(GP_5, GPIO_DIRECTION_IN);
        fileHandleGPIO_6 = openGPIO(GP_6, GPIO_DIRECTION_IN);
        fileHandleGPIO_7 = openGPIO(GP_7, GPIO_DIRECTION_IN);

        double volts;
        volts = (GetVal / 1023.0) * 5.0;

        if(ReadAndConvertVals() == 14)
        {
                printf("ADC Value Acquisition Complete\n");
                printf("ADC Value = %d\n", GetVal);
                printf("Volts: %lf\n", volts);
        }
        else
        {
                printf("ADC Value Acquisition Failed\n");
        }
        return;
}
Exemplo n.º 4
0
int clock(){

	int i2cHandle;

	printf("We're doing things!\n");
	
	int deviceHandle;

	initiateGPIO(GP_I2C);
	i2cHandle = openGPIO(GP_I2C, GPIO_DIRECTION_OUT);
	
	writeGPIO(i2cHandle, 0);
	close(i2cHandle);

	int readStatus;
	int status;

	char buffer[7];
	
	buffer[0] = 0x00;

	int deviceI2CAddress = 0x68;

	if ((deviceHandle = open("/dev/i2c-0", O_RDWR)) < 0){
		printf("Turns out we're not.\n");
		return 1;
	}

	if(ioctl(deviceHandle, I2C_SLAVE, deviceI2CAddress) < 0){
		printf("Error in ioctl\n");
		return 1;
	}
	
        time_t result = time(NULL);
    	
	int sysSeconds, sysMinutes, sysHours, sysYears, sysDays, sysMonths;

	if(result != -1)
	{
		struct tm *timeInfo;

		timeInfo = gmtime(&result);

		sysSeconds = timeInfo->tm_sec;
        	sysMinutes = timeInfo->tm_min;
        	sysHours = (timeInfo->tm_hour)%24;//HOUR

	        sysYears = (timeInfo->tm_year+1900) %100 ;

        	sysDays = timeInfo->tm_mday;
        	sysMonths = (timeInfo->tm_mon+1);
	}
	
	int lowSec = sysSeconds % 10;
	lowSec &= 0x0f;
	int highSec = (sysSeconds/10) << 4;
	highSec &= 0x70;
	int lowMin = sysMinutes % 10;
	lowMin &= 0x0f;
	int highMin = (sysMinutes/10) << 4;
	highMin &= 0x70;

	int miltime = 0b10111111;

	int lowHour = sysHours % 10;
	lowHour &= 0x0f;
	int highHour = (sysHours /10) << 4;
	highHour &= 0x30;
	int lowDay = sysDays % 10;
	lowDay &= 0x0f;
	int highDay = (sysDays /10) <<4;
	highDay &= 0x30;
	int lowMonth = sysMonths % 10;
	lowMonth &= 0x0f;
	int highMonth = (sysMonths / 10) << 4;
	highMonth &= 0x10;
	int lowYear = sysYears % 10;
	lowYear &= 0x0f;
	int highYear = (sysYears / 10 ) << 4;
	highYear &= 0xf0;



	
	buffer[0] = 0x00;	//first word, before we start writing data
        buffer[1] = ( highSec  | lowSec );
        buffer[2] = ( highMin | lowMin); //
	buffer[3] = ( highHour | lowHour);
	buffer[4] = 0x01;
        buffer[5] = (lowDay | highDay); 
        buffer[6] = (lowMonth | highMonth);
        buffer[7] = (lowYear | highYear);

	//Enable these lines to see time data while storing it
	//printf("Date: %d - %d - %d\n", sysYears, sysMonths, sysDays);
	//printf("Time: %d : %d : %d\n", sysHours, sysMinutes, sysSeconds);	

		


	status = write(deviceHandle, buffer, 7);

	if(status != 7){
		printf("Error: more error! (no ack bit)\n");
		return 0;
	}

	buffer[0] = 0x00;
	status = write (deviceHandle, buffer, 1);
	if(status != 1){
		printf("information!\n");
		return -1;
	}else{
		status = read(deviceHandle, buffer, 7);
		if(status != 7){
			printf("Something's gone wrong again.\n");
			return -1;
		}
	}

	int year, month, day, hours, minutes, seconds;



	highSec = (0x70 & buffer[0])>>4;
	lowSec = 0x0f & buffer[0];
	lowMin = 0x0f & buffer[1];
	highMin = (0x70 & buffer[1])>>4;
	lowHour = 0x0f & buffer[2];
	highHour = (0x30 & buffer[2])>>4;
	lowDay = 0x0f & buffer[4];
	highDay = (0x30 & buffer[4])>>4;
	


	lowMonth = 0x0f & buffer[5];
	highMonth = (0x10 & buffer[5])>>4;





	lowYear = 0x0f & buffer[6];
	highYear = (0xf0 & buffer[6])>>4;





	printf("Date: %d%d - %d%d - %d%d\n", highYear,lowYear,highMonth,lowMonth, highDay,lowDay);
	printf("Time: %d%d : %d%d : %d%d\n", highHour,lowHour, highMin,lowMin, highSec, lowSec);

	
	//More basic data to possibly print
	//printf("Date: %d - %d - %d\n", year, month, day);
	//printf("Time: %d : %d : %d\n", hours, minutes, seconds);
	
	/*
	int i;
	for(i = 0; i < 7; i++){
		printf("buffer[%d]: %d\n", i, buffer[i]);
	} 
	*/
}
Exemplo n.º 5
0
/* Function: main

	Purpose: main program performs UI controls and forwards cmd
	 through function calls  

	Input:
		void 

	Returns: o if clean termnation 
*/
int main (void)
{
	char cmd;
	message msgOut;
	message msgIn;
	int i;
	int strobeHandle;
	int adcValue;
	float voltage;
	int dataPath[DATA_PATH_SIZE] = {GP_4, GP_5, GP_6, GP_7};
	pthread_t displayThread;
	pthread_mutex_init (&cGmutex, NULL);


	initiateGPIO(Strobe);
	initiateGPIOArray(dataPath, DATA_PATH_SIZE);
	strobeHandle = openGPIO(Strobe, GPIO_DIRECTION_OUT);
	writeGPIO(strobeHandle,1);
	close(strobeHandle);

	clearPAGE();
	

	while (1)
	{
		printMenu();

		cmd = getchar();

		clearInputBuffer();

		clearBelowLine(MSG_Y);

		saveCursor();



		switch (cmd)
		{
			case 'L':
			{
				
				msgOut.data = 0xD;

				sendMessage(msgOut, dataPath);

				msgIn = receiveMessage(dataPath);

				gotoXY(MSG_X,MSG_Y);
				clearLine(MSG_Y);

				printf("Message Received: %X", msgIn.data);

				gotoXY(STATUS_X,STATUS_Y);
				clearLine(STATUS_Y);
				setColor(RESET);

				if (msgIn.data == 0xE)
				{
					printf("[\033[0;32m OK \033[m]\t LED Always On");
				}
				else if (msgIn.data == 0xC)
				{
					printf("[\033[0;32m OK \033[m]\t LED Triggered By Sensor");
				}
				else
				{
					printf("[\033[0;31m Error \033[m]\t Message Acknowledgment Failed");
				}
				break;

			}
			case 'P' :
			{
				
				msgOut.data = 0x1;
				sendMessage(msgOut, dataPath);
				msgIn = receiveMessage(dataPath);

				gotoXY(MSG_X,MSG_Y);
				clearLine(MSG_Y);

				printf("Message Received: %X", msgIn.data);

				gotoXY(STATUS_X,STATUS_Y);
				clearLine(STATUS_Y);
				setColor(RESET);

				if (msgIn.data == 0xE)
				{
					printf("[\033[0;32m OK \033[m]\t Ping Successful");
				}
				else
				{
					printf("[\033[0;31m Error \033[m]\t Message Acknowledgment Failed");
				}
				break;
			}
			case 'R' :
			{
				
				msgOut.data = 0x0;
				sendMessage(msgOut, dataPath);
				msgIn = receiveMessage(dataPath);

				gotoXY(MSG_X,MSG_Y);
				clearLine(MSG_Y);

				printf("Message Received: %X", msgIn.data);

				gotoXY(STATUS_X,STATUS_Y);
				clearLine(STATUS_Y);
				setColor(RESET);

				if (msgIn.data == 0xE)
				{
					printf("[\033[0;32m OK \033[m]\t Reset Successful");
				}
				else
				{
					printf("[\033[0;31m Error \033[m]\t Message Acknowledgment Failed");
				}
				break;
			}
			case 'G' :
			{	

				adcValue = 0;
				voltage = 0;
				msgOut.data = 0x2;
				sendMessage(msgOut, dataPath);

				
				for (i = 2; i >= 0; i--)
				{
					msgIn = receiveMessage(dataPath);
					adcValue |= (msgIn.data << (i * DATA_PATH_SIZE));
					gotoXY(MSG_X,MSG_Y);
					clearLine(MSG_Y);
					printf("Message Received: %X", msgIn.data);
				}

				msgIn = receiveMessage(dataPath);

				if (msgIn.data == 0xE)
				{
					adcValue &= 0x3FF;
					voltage = (float) ((adcValue/1024.0) * 5.0); 
					setColor(YELLOW);
					gotoXY(MSG_X,MSG_Y + 1);
					printf("ADC Value: 0x%X", adcValue);
					gotoXY(MSG_X,MSG_Y + 2);
					printf("Voltage: %lf \033[u", voltage);
					gotoXY(STATUS_X,STATUS_Y);
					setColor(RESET);
					printf("[\033[0;32m OK \033[m]\t ADC Read Successful \033[u");
				}
				else
				{
					gotoXY(STATUS_X,STATUS_Y);
					clearLine(STATUS_Y);
					setColor(RESET);
					printf("[\033[0;31m Error \033[m]\t Message Acknowledgment Failed \033[u");
				}

				break;

			}
			case 'T' :
			{	
				msgOut.data = 0x3;
				sendMessage(msgOut, dataPath);
				msgIn = receiveMessage(dataPath);

				gotoXY(MSG_X,MSG_Y);
				clearLine(MSG_Y);

				printf("Message Received: %X", msgIn.data);

				gotoXY(STATUS_X,STATUS_Y);
				clearLine(STATUS_Y);
				setColor(RESET);


				if (msgIn.data == 0xE)
				{
					printf("[\033[0;32m OK \033[m]\t ADC Toggled On");
				}
				else if (msgIn.data == 0xC)
				{
					printf("[\033[0;32m OK \033[m]\t ADC Toggled Off");
				}
				

				break;
			}
			case 'D':
			{
				pthread_mutex_lock (&cGmutex);
				continueGraphing = true;
				pthread_mutex_unlock (&cGmutex);

				pthread_create(&displayThread, NULL, graphVoltage, &dataPath);


				getchar();


				pthread_mutex_lock (&cGmutex);
				continueGraphing = false;
				pthread_mutex_unlock (&cGmutex);

				pthread_join(displayThread, NULL);

				clearPAGE();

				break;
			}
			case 'Q':
			{
				gotoXY(MSG_X,MSG_Y);
				clearLine(MSG_Y);
				printf("[\033[0;32m OK \033[m]\t ThankYou For UsingLightSensor");
				unexport(Strobe);
				unexportArray(dataPath, DATA_PATH_SIZE);
				printf("\033[2J\033[0;0H\033[m");
				exit(0);
			}


		}
		recallCursor();

	}

	return (0);
}
Exemplo n.º 6
0
void updateLedBat(void){
	static int time1 = 0, state_led_red = 1;
	static int time0 = -1;	
	float tension;
	
	// TODO  accès concurentiel
	tension = volt;
	
	
	if(time0 < 0) time0 = millis(); 
	if((time1 - time0) > (SEC_DSPL_TENSION * 1000) ){
		time0 = time1;
	    printf("Battery's tension = %.1lf V\n", tension);
		if(tension > MAX_THRESHOLD_TENS){
		    writeGPIO(GREEN_LED_BIC, "high");
		    writeGPIO(RED_LED_BIC, "low");
		}
        else{
		    if(tension > MIN_THRESHOLD_TENS){
		        writeGPIO(RED_LED_BIC, "high");
		        writeGPIO(GREEN_LED_BIC, "high");
		    }
		    else{
		    	switch(state_led_red){
		    		case 0 : writeGPIO(RED_LED_BIC, "low"); state_led_red = 1; break;
				    case 1 : writeGPIO(RED_LED_BIC, "high"); state_led_red = 0; break; 
				    default : alert(); perror("Error in funcion ""updateLedBat"" for state_led_red"); break;
				}
				writeGPIO(GREEN_LED_BIC, "low");
		    }
		}
	}
	time1 = millis();
/*	
	// Update orange led in function of button STOP
	pthread_mutex_lock(&mtx_order);
	if(order == MVT){
        writeGPIO(ORANGE_LED, "low");
        writeGPIO(GREEN_LED, "high");
	}
    else{
        writeGPIO(ORANGE_LED, "high");
		writeGPIO(GREEN_LED, "low");
    }
    pthread_mutex_unlock(&mtx_order);
    
    // Update orange led in function of sonar
    int stateLED_Sonar = 0;
	static int time1Sonar = 0;
	static int time0Sonar = -1;
	int dst_sonar;
	
	pthread_mutex_lock(&mtx_distSonar);
	dst_sonar = distSonar;
	pthread_mutex_unlock(&mtx_distSonar);
	
    while(dst_sonar < DIST_MIN_SONAR){
    	time1Sonar = millis();
    	switch(stateLED_Sonar){
			case 0: writeGPIO(ORANGE_LED, "high");
					if((time1Sonar - time0Sonar) > TIME_BLINK_SONAR){
						stateLED_Sonar = 1;
						time0Sonar = millis();
					}
					break;
			case 1: writeGPIO(ORANGE_LED, "low");
					if((time1Sonar - time0Sonar) > TIME_BLINK_SONAR){
						stateLED_Sonar = 0;
						time0Sonar = millis();
					}
					break;
			default: break;
		}
			
    }*/
}