コード例 #1
0
ファイル: getRegim.c プロジェクト: drovosekov/AutoWatering
void get_sensors_state(){
	if(PIN_STATE(WATER_LEVER_SENSOR)) {
		if(regim == DISPLAY_REGIM_DEFAULT)
			{regim = DISPLAY_REGIM_NO_WATER;}
		PIN_ON(NO_WATER_LED);
		PIN_OFF(WATERING_RELAY);
	}else{
		if(PIN_STATE(NO_WATER_LED)) {PIN_OFF(NO_WATER_LED);}
	}

	if(PIN_STATE(LIGHT_SENSOR)) {
		//датчик естественного света - выключаем досветку
		if(PIN_STATE(LIGHT_RELAY)) {PIN_OFF(LIGHT_RELAY);}
	}else{
		//текущее врем¤ в разрешенном диапазоне использовани¤ досветки
		RTCTIME rtc_clock;
		RTC_GetTime(&rtc_clock);

		u16 now_time = set_low_n_height(rtc_clock.hour, rtc_clock.min); //текущее врем¤ (часы+минуты)

		//но в заданный промежуток времени
		if (BKP_ReadBackupRegister(tMORNING_LIGHT_TIME_BKP) < now_time &&
			now_time < BKP_ReadBackupRegister(tEVENING_LIGHT_TIME_BKP)) //с утра до вечера
		{
			PIN_ON(LIGHT_RELAY);
		}
	}
}
コード例 #2
0
void lcd_nokia1100_write_data(uint8_t data)
{
	PIN_ON(LCD_NOKIA_1100_CS);

	PIN_OFF(LCD_NOKIA_1100_SCLK);
	PIN_ON(LCD_NOKIA_1100_SDA);
	PIN_ON(LCD_NOKIA_1100_SCLK);

	lcd_nokia1100_write(data);

	PIN_OFF(LCD_NOKIA_1100_CS);
}
コード例 #3
0
ファイル: main.c プロジェクト: kevintjuh93/MicroControllers
void OpdrachtB6()
{
	DDRD = 0xFF;		// All pins PORTD are set to output
	int waitTime = 1000;
	int mod = 1;//changes the delay
	bool check;
	while (1)
	{
		wait(waitTime/mod);
		if (PIN_ON(PINC, 0)) 
		{
			if (!check) {
				mod = mod > 1 ? 1 : 4;//Change the mod to make the led on PORTD7 blink at a different frequent
				check = true;
			}
		}
		else
		{
			if (check)
				check = false;
		}
		
		PORTD ^= BIT(7);
	}
}
コード例 #4
0
void One_Wire_Write_Bit (unsigned char Bit,GPIO_TypeDef * GPIOx, u16 PINx)
{
	PIN_OUT_PP(GPIOx, PINx);
	PIN_OFF(GPIOx, PINx);
	if (Bit==0)
	{
		delay_us(Time_Pulse_Delay_High);
		PIN_ON(GPIOx, PINx);
		delay_us(Time_Pulse_Delay_Low);
	}
	else
	{
		delay_us(Time_Pulse_Delay_Low);
		PIN_ON(GPIOx, PINx);
		delay_us(Time_Pulse_Delay_High);
	}
	PIN_IN(GPIOx, PINx);
}
コード例 #5
0
ファイル: emu.c プロジェクト: RalphFox/GIMX-firmwares
/** Main program entry point. This routine configures the hardware required by the application, then
 *  enters a loop to run the application tasks in sequence.
 */
int main(void)
{
  SetupHardware();

  for (;;)
  {
    HID_Task();
    PIN_ON(7);
    USB_USBTask();
    PIN_OFF(7);
  }
}
コード例 #6
0
void lcd_nokia1100_write(uint8_t data)
{
	uint8_t bit_number;

	for (bit_number = 8; bit_number-- > 0;)
	{
		PIN_OFF(LCD_NOKIA_1100_SCLK);

		if (data & 0x80)
		{
			PIN_ON(LCD_NOKIA_1100_SDA);
		}
		else
		{
			PIN_OFF(LCD_NOKIA_1100_SDA);
		}

		PIN_ON(LCD_NOKIA_1100_SCLK);

		data <<= 1;
	}
}
コード例 #7
0
unsigned int One_Wire_Reset(GPIO_TypeDef * GPIOx, u16 PINx)
{
	unsigned int tmp;
	PIN_IN(GPIOx, PINx);
	if ((PIN_SYG(GPIOx, PINx))==0)	return One_Wire_Bus_Low_Error;
	PIN_OUT_PP(GPIOx, PINx);
	PIN_OFF(GPIOx, PINx);
	delay_us(Time_Reset_Low);
	PIN_ON(GPIOx, PINx);
	PIN_IN(GPIOx, PINx);
	delay_us(Time_Pulse_Delay_High);
	if ((PIN_SYG(GPIOx, PINx))==0) tmp=One_Wire_Success;
		else tmp=One_Wire_Error_No_Echo;
	delay_us(Time_After_Reset);
	return tmp;
}
コード例 #8
0
ファイル: main.c プロジェクト: kevintjuh93/MicroControllers
void OpdrachtB3()
{
	DDRD = 0xFF;		// All pins PORTD are set to output
	DDRC = 0;			// All c pins set to output
	PORTD = 0;			// Make sure Port D is set to zero
	while (1)
	{
		wait(250);//need a wait to see the blink :x
		if (PIN_ON(PINC, 0))
		{
			PORTD ^= BIT(7);//xor toggles bit 7 (on/off)
		}
		else
		{
			PORTD = 0;
		}
	}
}
コード例 #9
0
ファイル: main.c プロジェクト: Buka666/STM32F4-Discovery
void main(void)
{
	gpio_init();

	lcd_nokia1100_init();
	lcd_nokia1100_set_position(7, 0);
	lcd_nokia1100_print_string((uint8_t *) "ZiBlog.ru @ 2014");
	lcd_nokia1100_set_position(0, 0);
	lcd_nokia1100_print_string((uint8_t *) "STM32F4Discovery");
	lcd_nokia1100_set_position(4, 1);
	lcd_nokia1100_print_string((uint8_t *) "LCD Nokia 1100");

	while (1)
	{
		if (PIN_SIGNAL(PIN_BUTTON))
		{
			PIN_ON(PIN_LED);
		}
		else
		{
			PIN_OFF(PIN_LED);
		}
	}
}
コード例 #10
0
ファイル: mcu_i2c.c プロジェクト: Buka666/STM32F4-Discovery
void mcu_i2c_read(uint8_t device_address, uint8_t * buffer, uint8_t length)
{
	PIN_ON(PIN_LED);

	// формируем сигнал СТАРТ
	I2C1->CR1 |= I2C_CR1_START;

	// ждем окончания передачи сигнала СТАРТ
	while (!(I2C1->SR1 & I2C_SR1_SB))
	{
	}
	(void) I2C1->SR1;

	// передаем адрес ведомого устройства
	I2C1->DR = (uint8_t) (device_address << 1) | 0x01;

	// ждем окончания передачи адреса
	while (!(I2C1->SR1 & I2C_SR1_ADDR))
	{
	}

	if (length == 1)
	{
		I2C1->CR1 &= ~I2C_CR1_ACK;
	}
	(void) I2C1->SR1;
	(void) I2C1->SR2;

	while (length > 0)
	{
		switch (length--)
		{
			case (1):
			{
				// формируем сигнал СТОП
				I2C1->CR1 |= I2C_CR1_STOP;

				// ждем окончания приема данных
				while (!(I2C1->SR1 & I2C_SR1_RXNE))
				{
				}

				// считываем данные
				*buffer = I2C1->DR;

				break;
			}
			case (2):
			{
				while (!(I2C1->SR1 & I2C_SR1_BTF))
				{
				}

				I2C1->CR1 &= ~I2C_CR1_ACK;

				// считываем данные
				*buffer++ = I2C1->DR;

				// формируем сигнал СТОП
				I2C1->CR1 |= I2C_CR1_STOP;

				// ждем окончания приема данных
				while (!(I2C1->SR1 & I2C_SR1_RXNE))
				{
				}

				// считываем данные
				*buffer++ = I2C1->DR;

				length = 0;

				break;
			}
			default:
			{
				// ждем окончания приема данных
				while (!(I2C1->SR1 & I2C_SR1_RXNE))
				{
				}

				// считываем данные
				*buffer++ = I2C1->DR;
			}
		}
	}
}
コード例 #11
0
char Get_key(void)
{
  char key = 0;
  uint16_t button_port  = 0;
  
  PIN_ON(OUT_1); //in open-drain mode = Hi-Z !
  PIN_ON(OUT_2);
  
   // for(char i=0; i<2; i++)
   // {
  if(key==0)
{ 
    PIN_ON(OUT_1);  //Hi-Z
    PIN_OFF(OUT_2); //open-drain
    button_port = GPIOC->IDR;
    button_port =~button_port;
    button_port &= (uint16_t)0x003F; //select key bits
        switch(button_port)
        {
                case 1: 
            key = 1;
            break;
                case 2: 
            key = 2;
            break;
                case 4: 
            key = 3;
            break;
                case 8: 
            key = 4;
            break;
                case 16: 
            key = 5;
            break;
                case 32: 
            key = 6;
            break;
            default : key = 0;
     }
}
if(key==0)
{ 
    PIN_ON(OUT_2);
    PIN_OFF(OUT_1);    
    button_port = GPIOC->IDR;
    button_port =~button_port;
    button_port &= (uint16_t)0x003F; //select key bits
        switch(button_port)
        {
                case 1: 
            key = 7;
            break;
                case 2: 
            key = 8;
            break;
                case 4: 
            key = 9; //
            break;
                case 8: 
            key = 10; //
            break;
                case 16: 
            key = 11; //
            break;
                case 32: 
            key = 12; //
            break;
            default : key = 0;
     }
 }   
//} 
        
 PIN_ON(OUT_1); //in open-drain mode = Hi-Z !
 PIN_ON(OUT_2);

 if(key)
 {
   //SPI2->DR = key; //To DM
   //send_to_usart(key); //debug OutData
   return key;
 }; 
return 0;
}
コード例 #12
0
ファイル: getRegim.c プロジェクト: drovosekov/AutoWatering
void get_buttons_state(){

	switch(get_keyboard_state()){
	case BTN_STATE_ENTER:
		if(save_pressed_buton(BTN_STATE_ENTER, true))
			{return;}//если кнопка все еще нажата - выходим

		switch(regim){
		case DISPLAY_REGIM_DEFAULT:
		case DISPLAY_REGIM_WATERING:
		case DISPLAY_REGIM_MANUAL_WATERING:
		case DISPLAY_REGIM_NO_WATER:
			init_bright_contrast();
			bright_off_count = 0;
			return;

		case DISPLAY_REGIM_MENU:
			btn_enter_pressed_in_menu();
			break;

		case DISPLAY_REGIM_SET_TIME_DATE:
			btn_enter_pressed_in_set_date_time();
			break;

		case DISPLAY_REGIM_SET_WATERING_TIME:
			btn_enter_pressed_in_set_watering_time();
			break;

		case DISPLAY_REGIM_SET_WAERING_DUR:
			btn_enter_pressed_in_set_watering_duration();
			break;

    	case DISPLAY_REGIM_SET_HUMIDITY:
    		btn_enter_pressed_in_set_humidity();
    		break;

    	case DISPLAY_REGIM_SET_CHK_INTERVAL:
    		btn_enter_pressed_in_set_chk_interval();
    		break;

    	case DISPLAY_REGIM_SET_WATERING_REG:
    		btn_enter_pressed_in_set_watering_reg();
    		break;

    	case DISPLAY_REGIM_SET_LIGHT:
    		btn_enter_pressed_in_set_light_time();
    		break;

		case DISPLAY_REGIM_SET_BRIGHT_CONTR:
    		btn_enter_pressed_in_set_bright_contrast();
			break;
		}

		break;

	case BTN_STATE_MENU:
		if(save_pressed_buton(BTN_STATE_MENU, false))
			{return;}//если кнопка все еще нажата - выходим

		regim = DISPLAY_REGIM_MENU;
		lcd_set_state(LCD_ENABLE, CURSOR_DISABLE);
		init_menu();
		break;

	case BTN_STATE_START:
		if(save_pressed_buton(BTN_STATE_START, false))
			{return;}

		if(get_TIM_state(TIM6) && regim != DISPLAY_REGIM_NO_WATER){
			PIN_ON(WATERING_RELAY);					//запуск полива (вкл.реле)
			regim = DISPLAY_REGIM_MANUAL_WATERING;
		}
		break;

	case BTN_STATE_EXIT:
		if(save_pressed_buton(BTN_STATE_EXIT, true))
			{return;}

		switch(regim){
			case DISPLAY_REGIM_WATERING:
			case DISPLAY_REGIM_MANUAL_WATERING:
			case DISPLAY_REGIM_DEFAULT:
			case DISPLAY_REGIM_NO_WATER:
				break;

			case DISPLAY_REGIM_MENU:

				regim = DISPLAY_REGIM_DEFAULT;
	    		TIM_Cmd(TIM7, ENABLE);
				break;

			case DISPLAY_REGIM_SET_TIME_DATE:
			case DISPLAY_REGIM_SET_WATERING_TIME:
			case DISPLAY_REGIM_SET_WAERING_DUR:
			case DISPLAY_REGIM_SET_HUMIDITY:
			case DISPLAY_REGIM_SET_CHK_INTERVAL:
			case DISPLAY_REGIM_SET_WATERING_REG:
			case DISPLAY_REGIM_SET_LIGHT:
			case DISPLAY_REGIM_SET_BRIGHT_CONTR:
				lcd_set_state(LCD_ENABLE, CURSOR_DISABLE);

				regim = DISPLAY_REGIM_MENU;
				break;
		}
		break;

	case BTN_STATE_LEFT:
		move_by_menu_LR(BTN_STATE_LEFT);
		break;

	case BTN_STATE_RIGHT:
		move_by_menu_LR(BTN_STATE_RIGHT);
		break;

	case BTN_STATE_STOP:
		switch(regim){
			case DISPLAY_REGIM_WATERING:
			case DISPLAY_REGIM_MANUAL_WATERING:
			case DISPLAY_REGIM_DEFAULT:
			case DISPLAY_REGIM_NO_WATER:
				if(save_pressed_buton(BTN_STATE_STOP, false))
					{return;}

				PIN_OFF(WATERING_RELAY);		//стоп полива (откл.реле)
				PIN_OFF(NO_WATER_LED);
				regim = DISPLAY_REGIM_DEFAULT;

				check_humidity_sensor();
				//если влажность ниже заданной - полив запуститьс¤ не зависимо от времени суток!
				check_humidity_value();
	    		TIM_Cmd(TIM7, ENABLE);

	    		init_bright_contrast();
	    		bright_off_count = 0;
				break;

			case DISPLAY_REGIM_MENU:
			case DISPLAY_REGIM_SET_TIME_DATE:
			case DISPLAY_REGIM_SET_WATERING_TIME:
			case DISPLAY_REGIM_SET_WAERING_DUR:
			case DISPLAY_REGIM_SET_HUMIDITY:
			case DISPLAY_REGIM_SET_CHK_INTERVAL:
			case DISPLAY_REGIM_SET_WATERING_REG:
			case DISPLAY_REGIM_SET_LIGHT:
			case DISPLAY_REGIM_SET_BRIGHT_CONTR:
				break;
		}
		break;

	default:
		btn_pressed = BTN_STATE_RESET;
		break;

	}
}