Beispiel #1
0
void dclean() {
	// гасим все разряды
	portWrite(PORTD, HI, DIG1);
	portWrite(PORTD, HI, DIG2);
	portWrite(PORTD, HI, DIG3);
	portWrite(PORTD, HI, DIG4);
}
Beispiel #2
0
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;
}
Beispiel #3
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);
			}
		}
	}
}
Beispiel #4
0
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);
}
Beispiel #5
0
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);
}
Beispiel #6
0
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;
}