{"id":210,"date":"2016-05-16T07:52:25","date_gmt":"2016-05-16T11:52:25","guid":{"rendered":"https:\/\/ece454designprojects.scranton.edu\/foginator\/?page_id=210"},"modified":"2021-05-24T15:07:16","modified_gmt":"2021-05-24T19:07:16","slug":"code","status":"publish","type":"page","link":"https:\/\/ece454designprojects.scranton.edu\/foginator\/code\/","title":{"rendered":"Code"},"content":{"rendered":"<p>C File<\/p>\n<hr \/>\n<p>#include &lt;Wire.h&gt;<br \/>\n#include &lt;SensorLibrary.h&gt;<br \/>\nSensorLibrary foginator;<\/p>\n<p>#define SLAVE_ADDRESS 0x04<br \/>\nint number = 0;<br \/>\nint state = 0;<br \/>\nint dataRead = 0;<\/p>\n<p>void setup() {<br \/>\n\/\/pinMode(13, OUTPUT);<br \/>\nSerial.begin(9600); \/\/ start serial for output<br \/>\n\/\/ initialize i2c as slave<br \/>\nWire.begin(SLAVE_ADDRESS);<\/p>\n<p>\/\/ define callbacks for i2c communication<br \/>\nWire.onReceive(receiveData);<br \/>\nWire.onRequest(sendData);<\/p>\n<p>\/\/Serial.println(&#8220;Ready!&#8221;);<br \/>\n}<\/p>\n<p>void loop() {<br \/>\ndelay(100);<br \/>\n}<\/p>\n<p>\/\/ callback for received data<br \/>\nvoid receiveData(int byteCount){<\/p>\n<p>while(Wire.available()) {<br \/>\ndataRead = Wire.read();<br \/>\nif (dataRead == 10) {<br \/>\nnumber = foginator.getWpTempData1();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 11) {<br \/>\nnumber = foginator.getWpTempData2();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 12) {<br \/>\nnumber = foginator.getCO2Data();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 13) {<br \/>\nnumber = 22;<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 14) {<br \/>\nnumber = foginator.getPHData();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 15) {<br \/>\nnumber = foginator.getLuxData();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\nelse if (dataRead == 16) {<br \/>\nnumber = foginator.getHumidityData();<br \/>\nSerial.print(number);<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ callback for sending data<br \/>\nvoid sendData(){<br \/>\nWire.write(number);<br \/>\n\/\/Wire.endTransmission();<br \/>\n}<\/p>\n<hr \/>\n<p>CPP File<\/p>\n<hr \/>\n<p>#include &#8220;Arduino.h&#8221;<br \/>\n#include &#8220;SensorLibrary.h&#8221;<br \/>\n#include &#8220;OneWire.h&#8221;<br \/>\n#include &#8220;DallasTemperature.h&#8221;<br \/>\n#include &#8220;SparkFunTSL2561.h&#8221;<br \/>\n#include &#8220;Wire.h&#8221;<br \/>\n#include &#8220;DHT.h&#8221;<\/p>\n<p>SensorLibrary::SensorLibrary()<br \/>\n{<br \/>\npinMode(A0,INPUT); \/\/ CO2 Sensor<br \/>\n}<\/p>\n<p>\/\/ CO2 Sensor<\/p>\n<p>int SensorLibrary::getCO2Data()<br \/>\n{<br \/>\nfloat CO2Curve[3] = {2.602,0.324,(0.020\/(2.602-3))};<br \/>\nint percentage;<br \/>\nfloat volts;<br \/>\nvolts = MGRead(A7);<br \/>\npercentage = MGGetPercentage(volts,CO2Curve);<br \/>\nreturn percentage;<br \/>\n}<\/p>\n<p>float SensorLibrary::MGRead(int mg_pin)<br \/>\n{<br \/>\nint i;<br \/>\nfloat v=0;<\/p>\n<p>for (i=0;i&lt;5;i++) {<br \/>\nv += analogRead(mg_pin);<br \/>\ndelay(50);<br \/>\n}<br \/>\nv = (v\/5)*5\/1024 ;<br \/>\nreturn v;<br \/>\n}<\/p>\n<p>int SensorLibrary::MGGetPercentage(float volts, float *pcurve)<br \/>\n{<br \/>\nif ((volts\/8.5)&gt;=0.324) {<br \/>\nreturn -1;<br \/>\n} else {<br \/>\nreturn pow(10, ((volts\/8.5)-pcurve[1])\/pcurve[2]+pcurve[0]);<br \/>\n}<\/p>\n<p>}<br \/>\n\/\/ * * * * * * * * * * * * * * * * * *<\/p>\n<p>\/\/ Waterproof Temperature Sensor<\/p>\n<p>float SensorLibrary::getWpTempData1()<br \/>\n{<br \/>\nOneWire oneWire(A5);<br \/>\n\/\/ Pass our oneWire reference to Dallas Temperature.<br \/>\nDallasTemperature sensors(&amp;oneWire);<br \/>\nsensors.requestTemperatures(); \/\/ Send the command to get temperatures<br \/>\ndelay(50);<br \/>\nreturn sensors.getTempFByIndex(0);<br \/>\n}<\/p>\n<p>float SensorLibrary::getWpTempData2()<br \/>\n{<br \/>\nOneWire oneWire(A6);<br \/>\n\/\/ Pass our oneWire reference to Dallas Temperature.<br \/>\nDallasTemperature sensors(&amp;oneWire);<br \/>\nsensors.requestTemperatures(); \/\/ Send the command to get temperatures<br \/>\ndelay(50);<br \/>\nreturn sensors.getTempFByIndex(0);<br \/>\n}<br \/>\n\/\/ * * * * * * * * * * * * * * * * * *<\/p>\n<p>\/\/ Lux Light Sensor<\/p>\n<p>double SensorLibrary::getLuxData()<br \/>\n{<br \/>\nSFE_TSL2561 light;<br \/>\nunsigned char time = 2;<br \/>\nunsigned int data0, data1;<br \/>\nunsigned int ms = 1000;<br \/>\nboolean gain = 0;<br \/>\nlight.begin();<br \/>\nlight.setTiming(gain,time,ms);<br \/>\nlight.setPowerUp();<br \/>\n\/\/****<br \/>\nif (light.getData(data0,data1))<br \/>\n{<\/p>\n<p>double lux; \/\/ Resulting lux value<br \/>\nboolean good; \/\/ True if neither sensor is saturated<\/p>\n<p>\/\/ Perform lux calculation:<\/p>\n<p>good = light.getLux(0,1000,data0,data1,lux);<br \/>\nreturn lux;<br \/>\n}<\/p>\n<p>}<\/p>\n<p>\/\/ * * * * * * * * * * * * * * * * * *<\/p>\n<p>\/\/ Humidity Sensor<\/p>\n<p>float SensorLibrary::getHumidityData()<br \/>\n{<br \/>\nDHT dht(A10, DHT22);<br \/>\ndht.begin();<br \/>\nfloat h = dht.readHumidity();<br \/>\nreturn h;<br \/>\n}<\/p>\n<p>\/\/ pH Sensor<br \/>\nfloat SensorLibrary::getPHData()<br \/>\n{<br \/>\nfloat pHdata; \/\/Store the average value of the sensor feedback<br \/>\nfloat pHValue,voltage;<\/p>\n<p>pHdata=analogRead(A9);<br \/>\nvoltage = pHdata*5.0\/1024;<br \/>\npHValue = 3.5*voltage+0.00;<\/p>\n<p>return pHValue;<br \/>\n}<\/p>\n<p>double SensorLibrary::avgArray(int* arr, int number)<br \/>\n{<br \/>\nint i;<br \/>\nint max,min;<br \/>\ndouble avg;<br \/>\nlong amount=0;<br \/>\nif(number&lt;=0){<br \/>\nSerial.println(&#8220;Error number for the array to avraging!\/n&#8221;);<br \/>\nreturn 0;<br \/>\n}<br \/>\nif(number&lt;5){ \/\/less than 5, calculated directly statistics<br \/>\nfor(i=0;i&lt;number;i++){<br \/>\namount+=arr[i];<br \/>\n}<br \/>\navg = amount\/number;<br \/>\nreturn avg;<br \/>\n}else{<br \/>\nif(arr[0]&lt;arr[1]){<br \/>\nmin = arr[0];max=arr[1];<br \/>\n}<br \/>\nelse{<br \/>\nmin=arr[1];max=arr[0];<br \/>\n}<br \/>\nfor(i=2;i&lt;number;i++){<br \/>\nif(arr[i]&lt;min){<br \/>\namount+=min; \/\/arr&lt;min<br \/>\nmin=arr[i];<br \/>\n}else {<br \/>\nif(arr[i]&gt;max){<br \/>\namount+=max; \/\/arr&gt;max<br \/>\nmax=arr[i];<br \/>\n}else{<br \/>\namount+=arr[i]; \/\/min&lt;=arr&lt;=max<br \/>\n}<br \/>\n}\/\/if<br \/>\n}\/\/for<br \/>\navg = (double)amount\/(number-2);<br \/>\n}\/\/if<br \/>\nreturn avg;<br \/>\n}<\/p>\n<p>\/\/ * * * * * * * * * * * * * * * * * *<\/p>\n<hr \/>\n<p>Header File<\/p>\n<hr \/>\n<p>#ifndef SensorLibrary_h<br \/>\n#define SensorLibrary_h<br \/>\n#include &#8220;Arduino.h&#8221;<\/p>\n<p>class SensorLibrary<br \/>\n{<br \/>\npublic:<br \/>\nSensorLibrary();<br \/>\n\/\/CO2 Sensor functions<br \/>\nint getCO2Data();<br \/>\nfloat MGRead(int mg_pin);<br \/>\nint MGGetPercentage(float volts, float *pcurve);<br \/>\nfloat getWpTempData1();<br \/>\nfloat getWpTempData2();<br \/>\ndouble getLuxData();<br \/>\nfloat getHumidityData();<br \/>\nfloat getPHData();<br \/>\ndouble avgArray(int* arr, int number);<br \/>\n\/\/<\/p>\n<p>};<\/p>\n<p>#endif<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C File #include &lt;Wire.h&gt; #include &lt;SensorLibrary.h&gt; SensorLibrary foginator; #define SLAVE_ADDRESS 0x04 int number = 0; int state = 0; int dataRead = 0; void setup() { \/\/pinMode(13, OUTPUT); Serial.begin(9600); \/\/ start serial for output \/\/ initialize i2c as slave Wire.begin(SLAVE_ADDRESS); \/\/ define callbacks for i2c communication Wire.onReceive(receiveData); Wire.onRequest(sendData); \/\/Serial.println(&#8220;Ready!&#8221;); } void loop() { delay(100); } [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-210","page","type-page","status-publish","hentry","post-preview"],"_links":{"self":[{"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/pages\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":1,"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/pages\/210\/revisions"}],"predecessor-version":[{"id":212,"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/pages\/210\/revisions\/212"}],"wp:attachment":[{"href":"https:\/\/ece454designprojects.scranton.edu\/foginator\/wp-json\/wp\/v2\/media?parent=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}