Advertisement
Guest User

Code

a guest
Nov 6th, 2016
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. import controlP5.*;
  2. import processing.serial.*;
  3. import gohai.glvideo.*;
  4. GLCapture video;
  5. ControlP5 cp5;
  6. //Capture cam;
  7. Serial ser;
  8.  
  9. String username, password; //destID = "SYS", sourceID = "GUI"
  10. float waterLevel = 0;
  11. int level = 0;
  12. PImage bg;
  13. public void setup() {
  14. size(800, 480, P2D);
  15. bg = loadImage("apss.jpg");
  16. //GUI Library
  17. cp5 = new ControlP5(this);
  18. // for RPI Camera
  19. video = new GLCapture(this, 0);
  20. video.play();
  21. //Serial initizalization
  22. String portName = Serial.list()[0];
  23. ser = new Serial(this, portName, 9600);
  24. login();
  25. }
  26.  
  27. void draw() {
  28. background(bg);
  29. }
  30. /////////////////////////////
  31. /*********GUI*******/
  32. ////////////////////////////
  33.  
  34. public void login() {
  35. cp5.addTextfield("USERNAME").setPosition(100, 150).setSize(200, 40).setAutoClear(false);
  36. cp5.addTextfield("PASSWORD").setPosition(100, 220).setSize(200, 40).setAutoClear(false);
  37. cp5.addBang("Submit").setPosition(160, 290).setSize(80, 40);
  38. }
  39.  
  40. public void Submit() {
  41. username = cp5.get(Textfield.class, "USERNAME").getText();
  42. password = cp5.get(Textfield.class, "PASSWORD").getText();
  43. //cp5.setAutoDraw(false);
  44. if ( username.equals("SYS") && password.equals("flash") ) {
  45. clear();
  46. mainGUI();
  47. enquiry();
  48. checkSerial();
  49. } else {
  50. println("Wrong username or password.");
  51. }
  52. }
  53.  
  54. public void mainGUI() {
  55. cp5.get("USERNAME").hide();
  56. cp5.get("PASSWORD").hide();
  57. cp5.get("Submit").hide();
  58. cp5.addBang("Feed").setPosition(50, 75).setSize(200, 60);
  59. cp5.addBang("Bath").setPosition(300, 75).setSize(200, 60);
  60. cp5.addBang("Camera").setPosition(550, 75).setSize(200, 60);
  61. cp5.addBang("Level").setPosition(50, 195).setSize(200, 60);
  62. cp5.addBang("Clean").setPosition(300, 195).setSize(200, 60);
  63. cp5.addBang("Light").setPosition(550, 195).setSize(200, 60);
  64. cp5.addBang("Temperature").setPosition(300, 315).setSize(200, 60);
  65. }
  66.  
  67.  
  68. public void Feed() {
  69. mode = "";
  70. mode+="FEED";
  71. writeData();
  72. println(data);
  73. }
  74. public void Bath() {
  75. mode = "";
  76. mode+="BATH";
  77. writeData();
  78. println(data);
  79. }
  80. public void Level() {
  81. mode = "";
  82. mode+="LVEL";
  83. writeData();
  84. println(data);
  85.  
  86. cp5.get("USERNAME").hide();
  87. cp5.get("PASSWORD").hide();
  88. cp5.get("Submit").hide();
  89. cp5.get("Feed").hide();
  90. cp5.get("Bath").hide();
  91. cp5.get("Camera").hide();
  92. cp5.get("Level").hide();
  93. cp5.get("Clean").hide();
  94. cp5.get("Light").hide();
  95. cp5.addBang("Food").setPosition(360, 120).setSize(80, 40);
  96. cp5.addBang("Water").setPosition(360, 190).setSize(80, 40);
  97. cp5.addBang("Back").setPosition(700, 400).setSize(80, 40);
  98. }
  99. public void Food() {
  100. checkLevel();
  101. }
  102. public void Water() {
  103. checkLevel();
  104. }
  105.  
  106. public void Camera() {
  107. cp5.get("USERNAME").hide();
  108. cp5.get("PASSWORD").hide();
  109. cp5.get("Submit").hide();
  110. cp5.get("Feed").hide();
  111. cp5.get("Bath").hide();
  112. cp5.get("Camera").hide();
  113. cp5.get("Level").hide();
  114. cp5.get("Clean").hide();
  115. cp5.get("Light").hide();
  116. if (video.available()) {
  117. video.read();
  118. }
  119. image(video, 0, 0, width, height);
  120. }
  121.  
  122. public void Clean() {
  123. mode = "";
  124. mode+="CLIN";
  125. writeData();
  126. }
  127. public void Temperature() {
  128. mode = "";
  129. mode+="TEMP";
  130. writeData();
  131. println(data);
  132. }
  133. public void Light() {
  134. cp5.get("USERNAME").hide();
  135. cp5.get("PASSWORD").hide();
  136. cp5.get("Submit").hide();
  137. cp5.get("Feed").hide();
  138. cp5.get("Bath").hide();
  139. cp5.get("Camera").hide();
  140. cp5.get("Level").hide();
  141. cp5.get("Clean").hide();
  142. cp5.get("Light").hide();
  143. cp5.addBang("LightOff").setPosition(360, 120).setSize(80, 40);
  144. cp5.addBang("LightOn").setPosition(360, 190).setSize(80, 40);
  145. cp5.addBang("Back").setPosition(700, 400).setSize(80, 40);
  146. }
  147. public void LightOff() {
  148. mode = "";
  149. mode+="LGHF";
  150. writeData();
  151. println(data);
  152. }
  153. public void LightOn() {
  154. mode = "";
  155. mode+="LGHT";
  156. writeData();
  157. }
  158. public void Back() {
  159. cp5.get("Feed").show();
  160. cp5.get("Bath").show();
  161. cp5.get("Camera").show();
  162. cp5.get("Level").show();
  163. cp5.get("Clean").show();
  164. cp5.get("Light").show();
  165. cp5.get("LightOff").hide();
  166. cp5.get("LightOn").hide();
  167. cp5.get("Back").hide();
  168. }
  169.  
  170. public void checkLevel() {
  171.  
  172. if (ser.available() > 0) {
  173. level = ser.read();
  174. println(level);
  175. }
  176. // Draw the Level
  177. noStroke();
  178. fill(0, 0, 255);
  179. rect(160, 390 - waterLevel, 480, waterLevel);
  180.  
  181. // Draw the container
  182. stroke(255);
  183. strokeWeight(2.0);
  184. noFill();
  185. rect(160, 90, 480, 300);
  186.  
  187. waterLevel = level;
  188. }
  189.  
  190. ///////////////////////////////
  191. ////// COMMUNICATIONS ////////
  192. //////////////////////////////
  193.  
  194. byte SOH = 0x02;
  195. byte SOT = 0x07;
  196. byte EOH = 0x04;
  197. byte EOT = 0x09;
  198. byte ENQ = 0x05;
  199. byte ACK = 0x06;
  200. byte NAK = 0x21;
  201. String destID = "SYS";
  202. String srcID = "GUI";
  203. String pass = "flash";
  204. String data = "";
  205. String SOHh = Integer.toHexString(SOH);
  206. String SOTh = Integer.toHexString(SOT);
  207. String EOTh = Integer.toHexString(EOT);
  208. String EOHh = Integer.toHexString(EOH);
  209. String ENQh = Integer.toHexString(ENQ);
  210. String ACKh = Integer.toHexString(ACK);
  211. String NAKh = Integer.toHexString(NAK);
  212. String mode = "";
  213. String checkSer;
  214.  
  215. ////////////////////////
  216. String CRCPoly = "11000000000000101";
  217. public void checkSerial() {
  218. while (ser.available() > 0) {
  219. checkSer = ser.readString();
  220. } //***CHECK
  221. if (checkSer.equals("ACK") {
  222. println("REQUEST ACKNOWLEDGED. COMMUNICATION ESTABLISHED!");
  223. } else {
  224. if (checkSer.equals("NAK")) {
  225. println("RECEIVER IS BUSY.");
  226. delay(500);
  227. enquiry();
  228. } else if (checkSer.equals("CDATA")) {
  229. println("CORRECT DATA WAS SENT!");
  230. } else if (checkSer.equals("WRNME")) {
  231. println("WRONG USERNAME AND SOURCE ID");
  232. println("DATA HAS ERRORS, RETRANSMITTING DATA");
  233. delay(500);
  234. buildFrame();
  235. } else if (checkSer.equals("WRPASS")) {
  236. println("INCORRECT PASSWORD, BREACHING OCCURS.");
  237. println("DATA HAS ERRORS, RETRANSMITTING DATA");
  238. delay(500);
  239. buildFrame();
  240. } else if (checkSer.equals("WRCRC")) {
  241. println("INCORRECT CRC, RECOMPUTING..");
  242. println("DATA HAS ERRORS, RETRANSMITTING DATA");
  243. delay(500);
  244. buildFrame();
  245. }
  246. }
  247. }
  248. public void enquiry() {
  249. ser.write("ENQ");
  250. }
  251.  
  252.  
  253. public void writeData() {
  254. println(data);
  255. ser.write(data);
  256. }
  257. public void buildFrame() {
  258. data = ""; //CLEAR PREVIOUS DATA
  259. data+=SOHh;
  260. data+=destID;
  261. data+=srcID;
  262. data+=pass;
  263. data+=SOTh;
  264. data+=mode;
  265. data+=EOTh;
  266. String CRC = compCRC();
  267. data+=CRC;
  268. data+=EOHh;
  269. }
  270.  
  271. public String compCRC() {
  272. byte[] y = mode.getBytes();
  273. String a = binary(y[0], 8);
  274. String b = binary(y[1], 8);
  275. String c = binary(y[2], 8);
  276. String d = binary(y[3], 8);
  277. String abcd = a+b+c+d+"0000000000000000";
  278. String got= "", recX, finalget1="", finalget2 = "";
  279. char CRCOUT1 = 0, CRCOUT2 = 0;
  280. int rGot, rPoly, xorMo=0;
  281. int c1 = 0, c2 = 17;
  282. rPoly = unbinary(CRCPoly);
  283. while (c2<49) {
  284. got = abcd.substring(c1, c2);
  285. //print(got);
  286. char getc = got.charAt(0);
  287. if (getc=='0') {
  288. c1++;
  289. c2++;
  290. } else if (getc=='1') {
  291. rGot = unbinary(got);
  292. xorMo= rGot^rPoly;
  293. recX = binary(xorMo, 17);
  294. abcd = abcd.replaceFirst(got, recX);
  295. //println("abcd is " +abcd);
  296. }
  297. }
  298. finalget1 = abcd.substring(32, 40);
  299. finalget2 = abcd.substring(40, 48);
  300. CRCOUT1 = char(unbinary(finalget1));
  301. CRCOUT2 = char(unbinary(finalget2));
  302. char xa = CRCOUT1;
  303. char xb = CRCOUT2;
  304. String xc = Character.toString(xa);
  305. String xd = Character.toString(xb);
  306. String res = xc+xd;
  307. return res;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement