//mega 48 на погодной станции #include #include enum { SPI_SS_PIN = 10, NRF_CE_PIN = 8,//9 NRF_CHANNEL = 5, NRF_POWER_UP_DELAY = 2, NRF_PAYLOAD_LENGTH = 16 }; boolean mode; char payload1[NRF_PAYLOAD_LENGTH]; char test_data[17] ; void setup() { SPI.begin(); pinMode(SPI_SS_PIN, OUTPUT); digitalWrite(SPI_SS_PIN, HIGH); pinMode(NRF_CE_PIN, OUTPUT); digitalWrite(NRF_CE_PIN, HIGH); uint8_t address[5] = { 0xE2, 0xE4, 0x23, 0xE4, 0x02 }; nrf_initp(address); pinMode(A5, OUTPUT); pinMode(9, INPUT); digitalWrite(9, HIGH); Serial.begin(9600); Serial.println("Init"); } //***************************************************************************** void loop() {digitalWrite(A5, LOW); //Serial.println("Waiting for a packet..."); mode = digitalRead(9);//ожидаем приема с эфира для передачи по сериалу if (mode==LOW) { do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_RX_DR))); nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_RX_DR); static char payload[NRF_PAYLOAD_LENGTH]; nrf24l01p_read_rx_payload((uint8_t*)payload);//, sizeof(payload)); digitalWrite(A5, HIGH); // Serial.print(">>");//передачи по сериалу Serial.println(payload); delay (200); } //******************************* //***********************Передача в эфир при поступлении данных через сериал************************************* if (Serial.available() > 0) { for (int i=0;i<16;i++) {// считываем входящий байт:1d24.8h50.0p7630 2u+07.10h63.8s92 test_data[i]= Serial.read(); } // показываем, что именно мы получили: // Serial.print("I received: "); // Serial.println(test_data); // delay(5000); while(Serial.available()){Serial.read();} digitalWrite(A5, HIGH); delay (100); digitalWrite(A5, LOW); delay (100); digitalWrite(NRF_CE_PIN, LOW); uint8_t address[5] = { 0xE2, 0xE4, 0x23, 0xE4, 0x02 }; nrf_initr(address); static uint8_t payload[NRF_PAYLOAD_LENGTH]; strcpy((char*)payload, test_data); nrf24l01p_write_tx_payload(payload, sizeof(payload)); digitalWrite(NRF_CE_PIN, HIGH); delay(1); digitalWrite(NRF_CE_PIN, LOW); do {} while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS))); nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS); Serial.println(" done"); nrf_initp(address); digitalWrite(NRF_CE_PIN, HIGH); digitalWrite(A5, HIGH); } delay (300); //******************************************** } //****************************************************************** void nrf_initp(uint8_t *address)//priem { delay(100); nrf24l01p_get_clear_irq_flags(); nrf24l01p_close_pipe(NRF24L01P_ALL); nrf24l01p_open_pipe(NRF24L01P_PIPE0, false); nrf24l01p_set_crc_mode(NRF24L01P_CRC_16BIT); nrf24l01p_set_address_width(NRF24L01P_AW_5BYTES); nrf24l01p_set_address(NRF24L01P_PIPE0, address); nrf24l01p_set_operation_mode(NRF24L01P_PRX); nrf24l01p_set_rx_payload_width(NRF24L01P_PIPE0, NRF_PAYLOAD_LENGTH); nrf24l01p_set_rf_channel(100); nrf24l01p_set_power_mode(NRF24L01P_PWR_UP); delay(NRF_POWER_UP_DELAY); } void nrf24l01p_spi_ss(nrf24l01p_spi_ss_level_t level) { digitalWrite(SPI_SS_PIN, (level == NRF24L01P_SPI_SS_LOW ? LOW : HIGH)); } uint8_t nrf24l01p_spi_rw(uint8_t value) { return SPI.transfer(value); } void nrf_initr(uint8_t *address)//peredat { delay(200); nrf24l01p_get_clear_irq_flags(); nrf24l01p_close_pipe(NRF24L01P_ALL); nrf24l01p_open_pipe(NRF24L01P_TX, false); nrf24l01p_set_rx_payload_width(NRF24L01P_PIPE0, NRF_PAYLOAD_LENGTH); nrf24l01p_set_crc_mode(NRF24L01P_CRC_16BIT); nrf24l01p_set_address_width(NRF24L01P_AW_5BYTES); nrf24l01p_set_address(NRF24L01P_TX, address); nrf24l01p_set_operation_mode(NRF24L01P_PTX); nrf24l01p_set_rf_channel(5); nrf24l01p_set_power_mode(NRF24L01P_PWR_UP); delay(NRF_POWER_UP_DELAY); }