Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <mcp_can.h>
- #include <SPI.h>
- #include <SoftwareSerial.h>
- #define rxPin 7
- #define txPin 8
- MCP_CAN CAN0(10);
- int numbersCount = 2;
- String phoneNumbers[] = {"+48600123456", "+48500123456"};
- int phoneNumberLength = 12;
- int climateControlThreshold = 15;
- SoftwareSerial phone = SoftwareSerial(rxPin, txPin);
- int iterator = 0;
- int state = 0;
- unsigned long lastStateTimestamp = 0;
- boolean enabledClimateControl = false;
- unsigned long lastClipTimestamp = 0;
- void setup()
- {
- Serial.begin(115200);
- if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
- {
- Serial.println("MCP2515 Initialized Successfully!");
- }
- else
- {
- Serial.println("Error Initializing MCP2515...");
- }
- CAN0.setMode(MCP_NORMAL);
- pinMode(rxPin, INPUT);
- pinMode(txPin, OUTPUT);
- phone.begin(9600);
- delay(5000);
- phone.println("AT+CLIP=1");
- }
- void loop(){
- if (millis() - lastClipTimestamp > 86400000UL)
- {
- lastClipTimestamp = millis();
- phone.println("AT+CLIP=1");
- }
- if ((enabledClimateControl) && (millis() - lastStateTimestamp > 60000UL * climateControlThreshold))
- {
- enabledClimateControl = !disableClimateControl();
- Serial.println("Disabled climate control");
- }
- if (phone.available())
- {
- int input = phone.read();
- if (isStringMatch(input))
- {
- iterator++;
- }
- else
- {
- iterator = 0;
- }
- if (iterator == phoneNumberLength)
- {
- if (millis() - lastStateTimestamp > 7000)
- {
- state = 0;
- }
- lastStateTimestamp = millis();
- state++;
- if ((state == 1) && (enabledClimateControl))
- {
- phone.println("ATH");
- enabledClimateControl = !disableClimateControl();
- Serial.println("Disabled climate control");
- }
- if ((state == 3) && (!enabledClimateControl))
- {
- phone.println("ATH");
- enabledClimateControl = enableClimateControl();
- Serial.println("Enabled climate control");
- }
- }
- }
- }
- boolean isStringMatch(int input)
- {
- for (int i = 0; i < numbersCount; i++)
- {
- if ((iterator < phoneNumberLength) && (phoneNumbers[i].charAt(iterator) == input))
- {
- return true;
- }
- }
- return false;
- }
- boolean enableClimateControl()
- {
- byte dataWakeUp[1] = {0x00};
- byte sndStat = CAN0.sendMsgBuf(0x68C, 0, 1, dataWakeUp);
- if (sndStat != CAN_OK)
- {
- return false;
- }
- delay(50);
- byte dataClimateEnable[1] = {0x4E};
- sndStat = CAN0.sendMsgBuf(0x56E, 0, 1, dataClimateEnable);
- if (sndStat != CAN_OK)
- {
- return false;
- }
- return true;
- }
- boolean disableClimateControl()
- {
- byte dataClimateDisable[1] = {0x56};
- return (CAN0.sendMsgBuf(0x56E, 0, 1, dataClimateDisable) == CAN_OK);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement