Dependencies: mbed mbed-rtos C12832_lcd EthernetInterface
Revision 0:fe9e5099378a, committed 2020-11-01
- Comitter:
- lamondt
- Date:
- Sun Nov 01 13:46:36 2020 +0000
- Commit message:
- CW2
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C12832_lcd.lib Sun Nov 01 13:46:36 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/dreschpe/code/C12832_lcd/#8f86576007d6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetInterface.lib Sun Nov 01 13:46:36 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/EthernetInterface/#183490eb1b4a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 01 13:46:36 2020 +0000 @@ -0,0 +1,247 @@ +#include "mbed.h" // Incluide the main Mbed library +#include "C12832_lcd.h" // Include the LCD library +#include <EthernetInterface.h> // Include the Ethernet Library +#include "mbed_debug.h" // Include the Mbed debug library + +DigitalOut RedLed (p23); +DigitalOut BlueLed (p25); // Declare digital outs for the RGB located on the application board +DigitalOut GreenLed (p24); + +C12832_LCD lcd; // Declare object called LCD from the C12832_LCD Class + +Ticker StrobeRoutine; // Declare ticker object called StrobeRoutine + +DigitalOut SecurityLightFront (LED1); // Declare object and define pin as a digital output +DigitalOut SecurityLightBack (LED2); // Declare object and define pin as a digital output +DigitalOut IndoorStrobe (LED4); // Declare object and define pin as a digital output + +InterruptIn Button (p13); // Declare button to send data +InterruptIn Reset (p14); // Declare object and define pin as an input with interrupt functionality +InterruptIn FrontDoorPIR(p21); // Declare object and define pin as an input with interrupt functionality +InterruptIn BackDoorPIR(p22); // Declare object and define pin as an input with interrupt functionality + +#define Success 0 +#define Failure -1 // Defining terms to logical values in order to +#define On Success // make programming more intuitive later on +#define Off 1 + + +int FrontDoorCounter = 0; // Creating counter variables to store the +int BackDoorCounter = 0; // number of times the sensor has been activated + +bool StartProcessing = 0; +bool Setup = 1; +bool FrontDoorStatus =0; // Declaring various varibales and setting their starting values +bool BackDoorStatus = 0; +bool ResetButtonStatus = 0; + + +void Flash() // Declare function called flash +{ + IndoorStrobe=!IndoorStrobe; // Alternate the indoor strobe state +} + +void ISR_BackDoorPIR() // Interrupt service routine (ISR) to +{ // run when back door PIR is activated + BackDoorStatus = 1; // ISR creates and sets variable to logic 1 +} + +void ISR_FrontDoorPIR() // ISR to run when front door PIR is activated +{ + FrontDoorStatus = 1; // ISR creates and sets variable to logic 1 +} + +void ISR_Reset() // ISR to run when reset button is activated +{ + ResetButtonStatus = 1; // ISR creates and sets variable to logic 1 +} + +void ISR_Data (void) // ISR to run when data transfer is required +{ + StartProcessing = 1; // ISR creates and sets variable to logic 1 +} + + + +int main() +{ + RedLed = BlueLed = GreenLed = 1; // Using inverse logic on RBG LED sets to off + lcd.cls (); + lcd.locate (0,0); // Print text + lcd.printf("Starting"); + + int ConnectionStatus = 0; // Creating variable to hold connection status values when returned + + EthernetInterface myEthernetInterface; // Creating objects from the ethernet and TCP classes + TCPSocketConnection myTCPSocketConnection; + + ConnectionStatus = myEthernetInterface.init(); // Initialise the interface and stores return value in ConnectionStatus + ConnectionStatus = myEthernetInterface.connect(10000); // Bring up the interface and store return value in ConnectionStatus + + lcd.cls (); + lcd.locate (0,10); + + if (ConnectionStatus == Failure){ + lcd.printf("Connection Error"); // Displaying the connection status of the ethernetInterface + wait(2); // if a failure value is returned for the ".init" or ".connect" functions + } // then connecton error is displayed on the LCD else Connected is displayed. + else { + lcd.printf("Connected"); // If Connection is successful connected is displayed + wait(2); // Wait to make message visible to user + } + + int TramissionStatus; // Variable created to store socket connection status + + const char* GroupName = "Group 7"; + const char* ClientIPAddress = myEthernetInterface.getIPAddress (); // Data required for trasnsmission is defined + const char* ClientMacAddress = myEthernetInterface.getMACAddress (); + const char* ServerIPAddress = "192.168.0.21"; + const int PortNumber = 29; + + + TramissionStatus = myTCPSocketConnection.connect (ServerIPAddress,PortNumber); // Connect the TCP socket to the server and store result in variable + lcd.locate (0,10); + lcd.printf("Transmission: %d",TramissionStatus); // Result of socket conection printed to LCD + + if (TramissionStatus == Success) // Green LED activated if connection is successful + { + GreenLed = On; + } + + Button.rise (&ISR_Data); // Interrupt for data transfe to server + Button.enable_irq (); + FrontDoorPIR.rise(&ISR_FrontDoorPIR); // Interrupt for Front Door PIR detection on the rise of the signal and calls the ISR + BackDoorPIR.rise(&ISR_BackDoorPIR); // Interrupt for Back Door PIR detection on the rise of the signal and calls the ISR + Reset.rise(&ISR_Reset); // Interrupt for Reset button activation on the rise of the signal and calls the ISR + + + while(1) + { + if (Setup == 1) // Statement activated only on start up or reset + { + IndoorStrobe = 0; + SecurityLightFront = 0; // Set lights initial state to off + SecurityLightBack = 0; + lcd.cls(); // Clear LCD + lcd.locate(0,0); // Set text position + lcd.printf ("System Active"); // Print text to LCD + Setup = 0; // Clear Setup variable so statement does not run again + goto Start; // Exits the if statement + } + + Start: + + if (FrontDoorStatus ==1) // If statement acitvated by Front Door PIR activation + { + FrontDoorCounter ++; // Incease counter value by 1 to keep record of total activations + lcd.locate (0,0); + lcd.printf(" "); // Clear the the screen except for the status of the other PIR activation + lcd.locate (0,20); + lcd.printf(" "); + lcd.locate(0,20); // Set text position + lcd.printf("Intruder at front door!!"); // Print text to LCD + StrobeRoutine.attach(&Flash,1); // Attach the StrobeRoutine object to the flash function to flash the LED at a set frequency + SecurityLightBack = 1; // Turn on security light + SecurityLightFront = 1; // Turn on security light + FrontDoorStatus = 0; // Reset variable so the if statement doesnt run repeatedly + } + + if (BackDoorStatus == 1) // If statement acitvated by Front Door PIR activation + { + BackDoorCounter ++; // Incease counter value by 1 to keep record of total activations + lcd.locate (0,0); + lcd.printf(" "); // Clear the the screen except for the status of the other PIR activation + lcd.locate(0,10); + lcd.printf(" "); + lcd.locate(0,10); // Set text position + lcd.printf("Intruder at Back door!! "); // Print text to LCD + StrobeRoutine.attach(&Flash,1); // Attach the stroberoutine object to the flash function to flash the LED at a set frequency + SecurityLightBack = 1; // Turn on security light + SecurityLightFront = 1; // Turn on security light + BackDoorStatus = 0; + } + + if (ResetButtonStatus ==1) + { + StrobeRoutine.detach(); // Turn off the indoor StrobeRoutine + IndoorStrobe = 0; // Set the Indoor LED to off(Inverse logic) + SecurityLightBack = 0; // Set the Outdoor security lights to off + SecurityLightFront = 0; // Set the Outdoor security lights to off + lcd.cls(); // Clear LCD display + lcd.locate(0,0); // Set text position + lcd.printf("System Reset"); // Print text to LCD + wait (3); // Wait to allow system stability + ResetButtonStatus = 0; + Setup = 1; // Run the setup function and return system to active status + + } + + if (StartProcessing) + { + BlueLed = On; + wait (0.5); + char *ReceiveBuffer = new char [256]; + char *SendBuffer = new char [256]; + int FD = FrontDoorCounter; + int BD = BackDoorCounter; // variables declared including type and size + int WrittenByteCount = 0; + int ReadByteCount = 0; + char ResultBuffer [10]; + char *Information = new char [100]; + + strcat (Information, "Front Door: "); + sprintf(ResultBuffer, "%d ", FD); + strcat (Information, ResultBuffer); // Values to be sent to the database are converted to string format + strcat (Information, "Back Door: "); + sprintf(ResultBuffer, "%d", BD); + strcat (Information, ResultBuffer); + + strcat (SendBuffer, GroupName); + strcat (SendBuffer, "|"); + strcat (SendBuffer, ClientMacAddress); + strcat (SendBuffer, "|"); // Format and sequence of information to be sent + strcat (SendBuffer, ClientIPAddress); + strcat (SendBuffer, "|"); + strcat (SendBuffer, Information); + strcat (SendBuffer, "\r\n"); + + debug (SendBuffer); + + WrittenByteCount = myTCPSocketConnection.send_all (SendBuffer, strlen (SendBuffer)); // Send data + + lcd.cls(); + lcd.locate (10,10); // Print byte value of data sent to LCD + lcd.printf("Write: %d",WrittenByteCount); + + if (WrittenByteCount == Failure) + { // LED to red if data sending failure + RedLed = On; // doesnt reset StartProcessing so the loop repeats. + } // ie it attempts to transfer the data again + + else + { + ReadByteCount = myTCPSocketConnection.receive_all (ReceiveBuffer, strlen (ReceiveBuffer)); + + lcd.locate (20,0); + lcd.printf("Read: %d",ReadByteCount); // Print the read return byte value from the server + if (ReadByteCount == Failure) + { + RedLed = On; + } + else + { + StartProcessing = false; // If data transfer is successful reset variable to false + } // so data isnt sent again + } + BlueLed = Off; + + delete[] ReceiveBuffer; + delete[] SendBuffer; + wait(2); + lcd.cls(); + lcd.locate(0,0); + lcd.printf ("System Active"); // Print text to LCD + } // End of If (StartProcessing) + } // End of While + } // End of Main +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Sun Nov 01 13:46:36 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed-rtos/#5713cbbdb706
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Nov 01 13:46:36 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file