int main(void){ //DDRA = 0xff; //ENCODER_DDR &= ~(_BV(ENCODER_PIN)); //ENCODER_PORT |= (_BV(ENCODER_PIN)); sim900_init(); //ntp_decode_UTC(3580318410); sim900_data_connect(); while(1) {} if (sim900_poweron()) { for (uint8_t i=0; i < 20; i++) { sim900_cmd_wait_response("AT+CCALR?"); if (sim900_test_last_response("1")) { sim900_send_sms(send_to_number, "How are you today?"); break; } _delay_ms(500); } /* if (sim900_cmd_wait_response("AT+CCALR?")) { if (sim900_test_last_response("1")) { sim900_send_sms(send_to_number, "How are you today?"); } }*/ } sim900_cmd_wait_response("AT+CPOWD=1"); while(1) { } while(1) { _delay_ms(2000); //read_dials(); } }
void sim900_connect(void) { uint8_t i = 0; uint8_t retry = 3; printk("connect...\r\n"); while(1) { switch(status) { case STATUS_POWERON: sim900_poweron(); clear_rx_buf(); printk("wait for at done\r\n"); for(i = 0; i < retry; i++) { sim900_write("AT\r\n", 4); //sim900_wait(5000000); OSTimeDlyHMSM(0, 0, 0, 400); if(!check_at()) { status = STATUS_CONFIG; break; } clear_rx_buf(); } break; //case STATUS_INIT: case STATUS_CONFIG: printk("wait for config done\r\n"); OSTimeDlyHMSM(0, 0, 10, 0); sim900_write("AT+CREG?\r\n", 10); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CIPMODE=1\r\n", 14); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CGATT?\r\n", 11); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CSTT=\"CMNET\"\r\n", 17); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CIICR\r\n", 10); OSTimeDlyHMSM(0, 0, 2, 0); printk("try to get ip address\r\n"); sim900_write("AT+CIFSR\r\n", 10); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CGATT=1\r\n", 12); OSTimeDlyHMSM(0, 0, 0, 100); sim900_write("AT+CGSN\r\n", 9); OSTimeDlyHMSM(0, 0, 0, 100); status = STATUS_CONNECTING; break; case STATUS_CONNECTING: printk("wait for connecting...\r\n"); sim900_write("AT+CIPSTATUS\r\n", 14); OSTimeDlyHMSM(0, 0, 2, 0); for(i = 0; i < 1; i++) { clear_rx_buf(); sim900_write(connect_cmd, strlen((char *)&connect_cmd[0])); OSTimeDlyHMSM(0, 0, 3, 0); if(!check_at()) { status = STATUS_CONNECTED; break; } clear_rx_buf(); } if(i >= 1) { //retry failed sim900_write("+++\r\n", 5); OSTimeDlyHMSM(0, 0, 1, 0); sim900_write("AT+CIPCLOSE\r\n", 13); OSTimeDlyHMSM(0, 0, 1, 0); sim900_write("AT+CIPSHUT\r\n", 12); OSTimeDlyHMSM(0, 0, 1, 0); status = STATUS_CONFIG; } break; case STATUS_CONNECTED: printk("Connect done!\r\n"); clear_buf(); return; default: break; } } }