#include  "pneumatic_solenoid.h"
#include "stm32f10x.h"
#include "uart_log.h"


//控制气动电磁阀的高低电平
void Pneumatic_Solenoid_Control(uint8_t index,unsigned char bitValue) {
    switch (index) {
    case 0 :
		    if (bitValue != 0) {
            // 如果bitValue不为0，设置PF13为高电平
            GPIOF->ODR |= (1 << 13);
        } else {
            // 如果bitValue为0，设置PF13为低电平
            GPIOF->ODR &= ~(1 << 13);
        }
        break;
    case 0x01:
        if (bitValue != 0) {
            // 如果bitValue不为0，设置PF14为高电平
            GPIOF->ODR |= (1 << 14);
        } else {
            // 如果bitValue为0，设置PF14为低电平
            GPIOF->ODR &= ~(1 << 14);
        }
        break;
    case 0x02:
        if (bitValue != 0) {
            // 如果bitValue不为0，设置PF15为高电平
            GPIOF->ODR |= (1 << 15);
        } else {
            // 如果bitValue为0，设置PF15为低电平
            GPIOF->ODR &= ~(1 << 15);
        }
        break;
	  case 0x03:
			  if (bitValue != 0) {
            // 如果bitValue不为0，设置PG0为高电平
            GPIOG->ODR |= (1 << 0);
        } else {
            // 如果bitValue为0，设置PG0为低电平
            GPIOG->ODR &= ~(1 << 0);
        }

        break;
	  case 0x04:
		   if (bitValue != 0) {
            // 如果bitValue不为0，设置PG1为高电平
            GPIOG->ODR |= (1 << 1);
        } else {
            // 如果bitValue为0，设置PG1为低电平
            GPIOG->ODR &= ~(1 << 1);
        }

        break;
		case 0x05:
	     if (bitValue != 0) {
            // 如果bitValue不为0，设置PE7为高电平
            GPIOE->ODR |= (1 << 7);
        } else {
            // 如果bitValue为0，设置PE7为低电平
            GPIOE->ODR &= ~(1 << 7);
        }

        break;	 
	   case 0x06:
		    if (bitValue != 0) {
            // 如果bitValue不为0，设置PE8为高电平
            GPIOE->ODR |= (1 << 8);
        } else {
            // 如果bitValue为0，设置PE8为低电平
            GPIOE->ODR &= ~(1 << 8);
        }

        break;
    default : 
			Serial_Print("不存在阀门! \n");
        break;
    }
}

// 查询气动电磁阀的电平
unsigned char find_Pneumatic_Solenoid(uint8_t index) {
    switch (index) {
        case 0:
            return (GPIOF->IDR & (1 << 13)) ? 1 : 0;
        case 1:
            return (GPIOF->IDR & (1 << 14)) ? 1 : 0;
        case 2:
            return (GPIOF->IDR & (1 << 15)) ? 1 : 0;
        case 3:
            return (GPIOG->IDR & (1 << 0)) ? 1 : 0;
        case 4:
            return (GPIOG->IDR & (1 << 1)) ? 1 : 0;
        case 5:
            return (GPIOE->IDR & (1 << 7)) ? 1 : 0;
        case 6:
            return (GPIOE->IDR & (1 << 8)) ? 1 : 0;
        default:
            Serial_Print("不存在阀门! \n");
            return 0;
    }
}
