Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import controlP5.*;
- import processing.serial.*;
- import gohai.glvideo.*;
- GLCapture video;
- ControlP5 cp5;
- //Capture cam;
- Serial ser;
- String username, password; //destID = "SYS", sourceID = "GUI"
- float waterLevel = 0;
- int level = 0;
- PImage bg;
- public void setup() {
- size(800, 480, P2D);
- bg = loadImage("apss.jpg");
- //GUI Library
- cp5 = new ControlP5(this);
- // for RPI Camera
- video = new GLCapture(this, 0);
- video.play();
- //Serial initizalization
- String portName = Serial.list()[0];
- ser = new Serial(this, portName, 9600);
- login();
- }
- void draw() {
- background(bg);
- }
- /////////////////////////////
- /*********GUI*******/
- ////////////////////////////
- public void login() {
- cp5.addTextfield("USERNAME").setPosition(100, 150).setSize(200, 40).setAutoClear(false);
- cp5.addTextfield("PASSWORD").setPosition(100, 220).setSize(200, 40).setAutoClear(false);
- cp5.addBang("Submit").setPosition(160, 290).setSize(80, 40);
- }
- public void Submit() {
- username = cp5.get(Textfield.class, "USERNAME").getText();
- password = cp5.get(Textfield.class, "PASSWORD").getText();
- //cp5.setAutoDraw(false);
- if ( username.equals("SYS") && password.equals("flash") ) {
- clear();
- mainGUI();
- enquiry();
- checkSerial();
- } else {
- println("Wrong username or password.");
- }
- }
- public void mainGUI() {
- cp5.get("USERNAME").hide();
- cp5.get("PASSWORD").hide();
- cp5.get("Submit").hide();
- cp5.addBang("Feed").setPosition(50, 75).setSize(200, 60);
- cp5.addBang("Bath").setPosition(300, 75).setSize(200, 60);
- cp5.addBang("Camera").setPosition(550, 75).setSize(200, 60);
- cp5.addBang("Level").setPosition(50, 195).setSize(200, 60);
- cp5.addBang("Clean").setPosition(300, 195).setSize(200, 60);
- cp5.addBang("Light").setPosition(550, 195).setSize(200, 60);
- cp5.addBang("Temperature").setPosition(300, 315).setSize(200, 60);
- }
- public void Feed() {
- mode = "";
- mode+="FEED";
- writeData();
- println(data);
- }
- public void Bath() {
- mode = "";
- mode+="BATH";
- writeData();
- println(data);
- }
- public void Level() {
- mode = "";
- mode+="LVEL";
- writeData();
- println(data);
- cp5.get("USERNAME").hide();
- cp5.get("PASSWORD").hide();
- cp5.get("Submit").hide();
- cp5.get("Feed").hide();
- cp5.get("Bath").hide();
- cp5.get("Camera").hide();
- cp5.get("Level").hide();
- cp5.get("Clean").hide();
- cp5.get("Light").hide();
- cp5.addBang("Food").setPosition(360, 120).setSize(80, 40);
- cp5.addBang("Water").setPosition(360, 190).setSize(80, 40);
- cp5.addBang("Back").setPosition(700, 400).setSize(80, 40);
- }
- public void Food() {
- checkLevel();
- }
- public void Water() {
- checkLevel();
- }
- public void Camera() {
- cp5.get("USERNAME").hide();
- cp5.get("PASSWORD").hide();
- cp5.get("Submit").hide();
- cp5.get("Feed").hide();
- cp5.get("Bath").hide();
- cp5.get("Camera").hide();
- cp5.get("Level").hide();
- cp5.get("Clean").hide();
- cp5.get("Light").hide();
- if (video.available()) {
- video.read();
- }
- image(video, 0, 0, width, height);
- }
- public void Clean() {
- mode = "";
- mode+="CLIN";
- writeData();
- }
- public void Temperature() {
- mode = "";
- mode+="TEMP";
- writeData();
- println(data);
- }
- public void Light() {
- cp5.get("USERNAME").hide();
- cp5.get("PASSWORD").hide();
- cp5.get("Submit").hide();
- cp5.get("Feed").hide();
- cp5.get("Bath").hide();
- cp5.get("Camera").hide();
- cp5.get("Level").hide();
- cp5.get("Clean").hide();
- cp5.get("Light").hide();
- cp5.addBang("LightOff").setPosition(360, 120).setSize(80, 40);
- cp5.addBang("LightOn").setPosition(360, 190).setSize(80, 40);
- cp5.addBang("Back").setPosition(700, 400).setSize(80, 40);
- }
- public void LightOff() {
- mode = "";
- mode+="LGHF";
- writeData();
- println(data);
- }
- public void LightOn() {
- mode = "";
- mode+="LGHT";
- writeData();
- }
- public void Back() {
- cp5.get("Feed").show();
- cp5.get("Bath").show();
- cp5.get("Camera").show();
- cp5.get("Level").show();
- cp5.get("Clean").show();
- cp5.get("Light").show();
- cp5.get("LightOff").hide();
- cp5.get("LightOn").hide();
- cp5.get("Back").hide();
- }
- public void checkLevel() {
- if (ser.available() > 0) {
- level = ser.read();
- println(level);
- }
- // Draw the Level
- noStroke();
- fill(0, 0, 255);
- rect(160, 390 - waterLevel, 480, waterLevel);
- // Draw the container
- stroke(255);
- strokeWeight(2.0);
- noFill();
- rect(160, 90, 480, 300);
- waterLevel = level;
- }
- ///////////////////////////////
- ////// COMMUNICATIONS ////////
- //////////////////////////////
- byte SOH = 0x02;
- byte SOT = 0x07;
- byte EOH = 0x04;
- byte EOT = 0x09;
- byte ENQ = 0x05;
- byte ACK = 0x06;
- byte NAK = 0x21;
- String destID = "SYS";
- String srcID = "GUI";
- String pass = "flash";
- String data = "";
- String SOHh = Integer.toHexString(SOH);
- String SOTh = Integer.toHexString(SOT);
- String EOTh = Integer.toHexString(EOT);
- String EOHh = Integer.toHexString(EOH);
- String ENQh = Integer.toHexString(ENQ);
- String ACKh = Integer.toHexString(ACK);
- String NAKh = Integer.toHexString(NAK);
- String mode = "";
- String checkSer;
- ////////////////////////
- String CRCPoly = "11000000000000101";
- public void checkSerial() {
- while (ser.available() > 0) {
- checkSer = ser.readString();
- } //***CHECK
- if (checkSer.equals("ACK") {
- println("REQUEST ACKNOWLEDGED. COMMUNICATION ESTABLISHED!");
- } else {
- if (checkSer.equals("NAK")) {
- println("RECEIVER IS BUSY.");
- delay(500);
- enquiry();
- } else if (checkSer.equals("CDATA")) {
- println("CORRECT DATA WAS SENT!");
- } else if (checkSer.equals("WRNME")) {
- println("WRONG USERNAME AND SOURCE ID");
- println("DATA HAS ERRORS, RETRANSMITTING DATA");
- delay(500);
- buildFrame();
- } else if (checkSer.equals("WRPASS")) {
- println("INCORRECT PASSWORD, BREACHING OCCURS.");
- println("DATA HAS ERRORS, RETRANSMITTING DATA");
- delay(500);
- buildFrame();
- } else if (checkSer.equals("WRCRC")) {
- println("INCORRECT CRC, RECOMPUTING..");
- println("DATA HAS ERRORS, RETRANSMITTING DATA");
- delay(500);
- buildFrame();
- }
- }
- }
- public void enquiry() {
- ser.write("ENQ");
- }
- public void writeData() {
- println(data);
- ser.write(data);
- }
- public void buildFrame() {
- data = ""; //CLEAR PREVIOUS DATA
- data+=SOHh;
- data+=destID;
- data+=srcID;
- data+=pass;
- data+=SOTh;
- data+=mode;
- data+=EOTh;
- String CRC = compCRC();
- data+=CRC;
- data+=EOHh;
- }
- public String compCRC() {
- byte[] y = mode.getBytes();
- String a = binary(y[0], 8);
- String b = binary(y[1], 8);
- String c = binary(y[2], 8);
- String d = binary(y[3], 8);
- String abcd = a+b+c+d+"0000000000000000";
- String got= "", recX, finalget1="", finalget2 = "";
- char CRCOUT1 = 0, CRCOUT2 = 0;
- int rGot, rPoly, xorMo=0;
- int c1 = 0, c2 = 17;
- rPoly = unbinary(CRCPoly);
- while (c2<49) {
- got = abcd.substring(c1, c2);
- //print(got);
- char getc = got.charAt(0);
- if (getc=='0') {
- c1++;
- c2++;
- } else if (getc=='1') {
- rGot = unbinary(got);
- xorMo= rGot^rPoly;
- recX = binary(xorMo, 17);
- abcd = abcd.replaceFirst(got, recX);
- //println("abcd is " +abcd);
- }
- }
- finalget1 = abcd.substring(32, 40);
- finalget2 = abcd.substring(40, 48);
- CRCOUT1 = char(unbinary(finalget1));
- CRCOUT2 = char(unbinary(finalget2));
- char xa = CRCOUT1;
- char xb = CRCOUT2;
- String xc = Character.toString(xa);
- String xd = Character.toString(xb);
- String res = xc+xd;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement