Exemple #1
0
int main()
{

 char msg[128],pin[10],machine[10],item[10],success[30];
 uint8_t number;
 uint8_t motorCounter=0;

 DDRB=0xff;
 DDRD=0xf8;
 
 DDRC=0xff;
 DDRA=0b11111110;
 PORTA=0b00000001;
 PORTC=0x00;

 sei();

 initLCD();
 _delay_ms(50);
 LCDClear();
 LCDGotoXY(0,0);
 _delay_ms(50);

 if(initGSM())
  LCDPrint("Vending Machine");
 
 LCDGotoXY(0,0);

 sendCommand(ENABLE_TEXT_MODE); //Enable Text Mode

// uint8_t j=0;

 while(1)
  {
   number=isMessageNotification();

   if(number)
    {

	 readMsg(2,msg);
	 LCDGotoXY(0,0);
	 LCDPrint(msg);
	 //extractPinCode(msg,pin);
     //extractMachineCode(msg,machine);
     //extractItemCode(msg,item);
	 
	 //CDGotoXY(1,1);
	
	 if(!strcmp(machine,"vm001"))
	  {

	   //LCDGotoXY(0,0);
	   //LCDPrint("Good one");
	   //j++;
	   //LCDGotoXY(0,1);
	   //LCDData(j+48);
	  
	   /* motorCounter=item[2]-48;
	  
	   if(motorCounter<9)
	    {
	     PORTC=(1<<(motorCounter-1));
		 LCDPrint(product[motorCounter-1]);
		 LCDPrint("                ");
		}
	   else
	    {
	     PORTA|=(1<<PA7);
		 LCDPrint(product[8]);
		}
	  
	   while(!(PINA&(1<<PA0)));
	   
	   LCDGotoXY(1,1);
	   LCDPrint("Completed       ");

		PORTC=0;
		PORTA&=~(1<<PA7);
		
		strcpy(success,pin);
		strcat(success," SUCCESS");*/
		//deleteMsg();
		//_delay_ms(500);
		//sendMsg(pin);
		//_delay_ms(500);

		machine[0]=0;
		item[0]=0;
		pin[0]=0;
	  }
	}
  }
 
 return 0;

}
Exemple #2
0
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer

    // Setup and pin configurations
    clkSetup();
    directionSetup();
    timerA0Setup();
    boardSetup();
    rtcSetup();
	initUART();
	pinGSM();
//	clkDebug();
	readDip();
	// test
	V4Stop();
	V5Stop();

	// Sensor variables
	int sensorValue = 0;
	int sensorData[LengthOfSensordata] = {0};
	char dataEnable = 0; 				// != 0 if the vector is filled ones
	int dataPosition = 0;
	int overflowCount = 0;
	char alarm = '0';

	// Parameters (From and to the flash)
	int lowerThresholds = readFlashLowTolerance();
	int upperThresholds = readFlashHighTolerance();
	int normalLvl = readFlashSensorOffset();			// Default higth over the water lvl

	// GSM decision variable
	char execution = '0';
	char disableAlarmFlag = '0';	// Disable = 1

	// RTC variable time offset1 = 1 min
	unsigned int rtcOffsetH = 0xFC6C;
	unsigned int rtcOffsetL = 0x78FF;

	__enable_interrupt();

	while(1)
	{
		V5Start();

		_no_operation();
		char c = '0';
		if(loop2Mode == '1' || startMode == '1')
		{	// Power on the GSM regulator
			V4Start(); 	// Enable power to GSMJa
			if(P8IN &= BIT4)
			{
				c = checkAT();
				if(c =='0') pwrOnOff();
			}
			else
			{
				pwrOnOff();
				Delay();
				c = '0';
			}
		}
		sensorValue = mainFunctionSensor(sensorData, LengthOfSensordata, &dataPosition, &dataEnable, &overflowCount);

		if (loop2Mode == '1' || startMode == '1')
		{	// wait for connection and check if SMS
			unsigned int count = 0;

			while(!(P8IN &= BIT4) || count < 40000)
			{
				count++;
				__delay_cycles(100);
			}
			if(c == '0') c = checkAT();

			if(c == '0')
			{
				V4Stop();
				Delay();
				Delay();
				V5Start();
				V4Start();
				if(P8IN &= BIT4)
				{
					c = checkAT();
					if(c =='0') pwrOnOff();
				}
				else
				{
					pwrOnOff();
					Delay();
				}
			}
			initGSM();
			execution = readSMS();

			if (execution == '0')
			{	// Nothing
				_no_operation();// test
			}
			else if (execution == 'S')
			{	// Status report
				responseStatus("STATUS i ", (normalLvl-sensorValue));
				deleteSMS();
			}
			else if (execution == 'N')
			{	// Confirm Nr change
				responseNrChange("Nummerlista uppdaterad i ");
				deleteSMS();
			}
			else if (execution == 'L')
			{	// Confirm changed normal level
				normalLvl = readFlashSensorOffset();
				responseLvlChange("Offset i ", normalLvl);
				deleteSMS();
			}
			else if (execution == 'T')
			{	// Confirm changed thresholds
				lowerThresholds = readFlashLowTolerance();
				upperThresholds = readFlashHighTolerance();
				responseThChange("Toleranser i ", lowerThresholds, upperThresholds);
				deleteSMS();
			}
			else if (execution == 'E')
			{	// Enable SMS
				sendSMS("Modulen har blivit aktiverad i ");
				disableAlarmFlag = '0';
				deleteSMS();
			}
			else if (execution == 'D')
			{	// Disable SMS
				sendSMS("Modulen har blivit inaktiverad i");
				disableAlarmFlag = '1';
				deleteSMS();
			}
			else if (execution == 'A')
			{	// Disable SMS with when alarm
				sendSMS("Larmet stoppat");
				deleteSMS();
				disableAlarmFlag = '1';		// Reseted when the lvl goes back to normal.
			}
			else
			{	/* Nothing */  }
		}

		// if the GSM mode disable turn off the power
		if (loop2Mode != '1' && startMode != '1')
		{
			V5Stop();
			V4Stop();
		}

		if (dataEnable != 0 && overflowCount == 0)
		{	// Process the sensor value
			alarm = evaluateData(sensorValue, normalLvl, upperThresholds, lowerThresholds, &rtcOffsetH, &rtcOffsetL, &timerAlarmFlag);
		}
		else if (overflowCount > 10)
		{	// Alarm overflow (Problem om man minskar RTC och något ligger ivägen!!!!)
			alarm = 'O';
		}
		else
		{}
		if (alarm != '0')
		{
			if (loop2Mode != '1' && startMode != '1' && disableAlarmFlag != '1' && timerAlarmFlag == '1')
				startGSMmodule();
			if(loop2Mode == '1' && startMode == '1' && disableAlarmFlag != '1' && timerAlarmFlag == '1')
			{
				c = checkAT();
				if(c == '0')
					startGSMmodule();
			}
			if (alarm == '+')
			{	// Alarm for high water lvl
				if (disableAlarmFlag != '1' && timerAlarmFlag == '1')
				{
					sendAlarm("Hog vattenniva i ", (normalLvl-sensorValue));
					timerAlarmFlag = '0';
				}
			}
			else if (alarm == '-')
			{	// Alarm for low water lvl
				if (disableAlarmFlag != '1' && timerAlarmFlag == '1')
				{
					sendAlarm("Lag vattenniva i ", (normalLvl-sensorValue));
					timerAlarmFlag = '0';
				}
			}
			else if (alarm == 'O' && timerAlarmFlag == '1')
			{	// Alarm for overflow
				sendSMS("Sensor kan vara ur funktion i ");
				timerAlarmFlag = '0';
			}
			else {}

			if (loop2Mode != '1' && startMode != '1' && timerAlarmFlag == '1')
			{
				V5Stop();
				V4Stop();
			}
		}
		else if (alarm == '0' && timerAlarmFlag == '1')
		{	// return to normal mode
			disableAlarmFlag = '0';
			// RTC for Repeat alarm
			// Send sms
		}
		rtcStart(rtcOffsetH, rtcOffsetL);
	}
}