void dclean() { // гасим все разряды portWrite(PORTD, HI, DIG1); portWrite(PORTD, HI, DIG2); portWrite(PORTD, HI, DIG3); portWrite(PORTD, HI, DIG4); }
void drepaint() { // печатаем очередной разряд // к этому моменту все разряды должны быть выключены // подготовим вывод byte* disp_data = m2_disp(); // show DIG byte val = ~disp_data[cur_dig]; portWrite(PORTC, (val >> 7) & 1, DIGA); portWrite(PORTC, (val >> 6) & 1, DIGB); portWrite(PORTC, (val >> 5) & 1, DIGC); portWrite(PORTC, (val >> 4) & 1, DIGD); portWrite(PORTC, (val >> 3) & 1, DIGE); portWrite(PORTC, (val >> 2) & 1, DIGF); portWrite(PORTD, (val >> 1) & 1, DIGG); portWrite(PORTD, (val >> 0) & 1, DIGh); // включим разряд // select DIG switch (cur_dig) { case 0: portWrite(PORTD, LO, DIG1); break; case 1: portWrite(PORTD, LO, DIG2); break; case 2: portWrite(PORTD, LO, DIG3); break; case 3: portWrite(PORTD, LO, DIG4); break; } if (cur_dig ++ > 2) cur_dig = 0; }
void m2_time_task(void) { timeInc(); showTimeMode.updateDisp(); // check timer if (setTimerMode.state.on == 0) { portWrite(PORTB, LO, RELE_1_PIN); // off } else { Time time = timeGet(); if(timeLE(setTimerMode.state.timeOn, setTimerMode.state.timeOff)) { if (timeGE(time, setTimerMode.state.timeOn) && timeLE(time, setTimerMode.state.timeOff) ) { portWrite(PORTB, HI, RELE_1_PIN); } else { portWrite(PORTB, LO, RELE_1_PIN); } } else { if (timeLE(time, setTimerMode.state.timeOff) || timeGE(time, setTimerMode.state.timeOn) ) { portWrite(PORTB, HI, RELE_1_PIN); } else { portWrite(PORTB, LO, RELE_1_PIN); } } } }
int8_t SIM900GSM::sendSMS(const char *number, const char *message) { portFlushRX(); portWrite( "AT+CMGS=\"%s\"\r\n", number ); if( waitResponse( ">", 5000 ) < 0 ) return (-1); portFlushRX(); portWrite( "%s%c", message, (char)0x1A ); // append CTRL+Z return waitResponse("+CMGS", 10000); }
int8_t SIM900GSM::deleteSMS( int16_t index, delete_flag flag ) { if( index<1 || flag<DEL_INDEX || flag>DEL_ALL ) return (-1); portFlushRX(); //dprint("deleteSMS %d (flag=%d)\r\n", index, flag); portWrite("AT+CMGD=%d,%d\r\n", index, (int)flag); return waitResponse("OK", 5000); }
int8_t SIM900GSM::getSMS( int16_t index, char *msg_txt, int16_t msg_len, char *sender, char *timestamp ) { char *p1; char *p2; int16_t len; if( index<1 ) return (-1); portFlushRX(); portWrite("AT+CMGR=%d\r\n", index); portReceiveRaw(); //dprint("getSMS: m_rxbuff = %s\n", m_rxbuff); // format: //<CR><LF>+CMGR: "<message_status>","<sender>","","<timestamp>"<CR><LF><message_body><CR><LF>OK<CR><LF> // decode sender number/string p1 = strstr(m_rxbuff, "\",\""); if(!p1) return (-1); p2 = strstr(p1+3, "\""); if(p2<p1) return (-1); if(sender) memcpy(sender, p1+3, p2-p1-3); // decode timestamp p1 = strstr(p2+2, ",\""); if(!p1) return (-1); p2 = strstr(p1+2, "\""); if(p2<p1) return (-1); if(timestamp) memcpy(timestamp, p1+2, p2-p1-2); // decode message p1 = strstr(p2, "\r\n"); if(!p1) return (-1); //len = strlen( p1+2 ); p2 = strrchr(p1+2, 'O'); // ...<CR><LF>OK<CR><LF> len = (p2-3) - (p1+2); if(len<1) return (-1); if(msg_txt) memcpy(msg_txt, p1+2, msg_len<len? msg_len:len); // getSMS success! //if( strstr(m_rxbuff, "\r\n+CMGR: \"REC UNREAD\"") == m_rxbuff ) return REC_UNREAD; //if( strstr(m_rxbuff, "\r\n+CMGR: \"REC READ\"") == m_rxbuff ) return REC_READ; return 0; }