Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:209a69808812, committed 2016-12-14
- Comitter:
- poorin31632
- Date:
- Wed Dec 14 07:03:54 2016 +0000
- Parent:
- 0:8cbdfc228814
- Commit message:
- finish
Changed in this revision
| P6-Sensor_Actuator.cpp | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/P6-Sensor_Actuator.cpp Wed Dec 14 07:03:54 2016 +0000
@@ -0,0 +1,369 @@
+#include "mbed.h"
+#include "eeprom.h"
+#include "string.h"
+
+Serial db(D1, D0);
+Serial pc(PA_11, PA_12);
+EEPROM memory(D14,D15,0);
+PwmOut mypwm(D9);
+AnalogIn rain(A2);
+DigitalOut IN1(D10);
+DigitalOut IN2(D11);
+BusIn on(D3,D4);
+I2C i2c(D5,D7); //sda,scl
+uint8_t temp_read();
+uint8_t humidity();
+int motor_on(uint8_t, uint8_t); // dir input(1,2) and pwm input(1-100)
+void Rx_interrupt();
+DigitalOut myled(LED1);
+DigitalIn butt(USER_BUTTON);
+
+char command[100];
+int8_t valu;
+char rx_line[100];
+
+int main() {
+
+
+ myled = 1;
+
+ int user = 0;
+ int8_t humid1 = 0;
+ int8_t speed1 = 0;
+ int8_t freq1 = 0;
+ int8_t humid2 = 0;
+ int8_t speed2 = 0;
+ int8_t freq2 = 0;
+ int8_t ctemp = 0;
+ int8_t chumid = 0;
+ int8_t atemp1[15]={0};
+ int8_t ahumi1[7]={0};
+ int8_t atemp2[15]={0};
+ int8_t ahumi2[7]={0};
+ int mode = 0;
+
+ memory.read(11,speed1);
+ memory.read(12,humid1);
+ memory.read(13,freq1);
+ memory.read(14,speed2);
+ memory.read(15,humid2);
+ memory.read(16,freq2);
+ Timer t;
+ int clock=0;
+ int c1 = 0;
+ int i1 = 0;
+ int c2 = 0;
+ int i2 = 0;
+ int t1 = -1;
+ int t2 = -1;
+ /*eeprom address
+ u1spd = 11
+ u1humit = 12
+ u1ti = 13
+ u2spd = 14
+ u2humit = 15
+ u2ti = 16
+ atemp1[15] = 21-34
+ ahumi1[7] = 41-46
+ atemp2[15] = 51-64
+ ahumi2[7] = 71-76
+ */
+
+ pc.baud(9600);
+
+ t.start();
+ while(1) {
+ chumid = humidity();
+ ctemp = temp_read();
+ //sampling
+ clock = t.read();
+ if(clock%freq1==0 && clock != t1){ ///////////// USER1
+ t1=clock;
+ if(c1<=13){ //temp array
+ atemp1[c1]=ctemp;
+ c1++;
+ }
+ else{
+ for(int i=0;i<13;i++){
+ atemp1[i] = atemp1[i+1];
+ }
+ atemp1[13] = ctemp;
+ }
+
+ if(i1<=5){ //humid array
+ ahumi1[i1]=chumid;
+ i1++;
+ }
+ else{
+ for(int i=0;i<5;i++){
+ ahumi1[i] = ahumi1[i+1];
+ }
+ ahumi1[5] = chumid;
+ }
+ //save data
+ for(int i=0;i<=13;i++){
+ memory.write(i+21,atemp1[i]);
+ }
+ for(int i=0;i<=5;i++){
+ memory.write(i+41,ahumi1[i]);
+ }
+ /* debugger
+ db.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp1[0],atemp1[1],atemp1[2],atemp1[3],atemp1[4],atemp1[5],atemp1[6],atemp1[7],atemp1[8],atemp1[9],atemp1[10],atemp1[11],atemp1[12],atemp1[13]);
+ db.printf("%d:%d:%d:%d:%d:%d\n",ahumi1[0],ahumi1[1],ahumi1[2],ahumi1[3],ahumi1[4],ahumi1[5]);
+ db.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp2[0],atemp2[1],atemp2[2],atemp2[3],atemp2[4],atemp2[5],atemp2[6],atemp2[7],atemp2[8],atemp2[9],atemp2[10],atemp2[11],atemp2[12],atemp2[13]);
+ db.printf("%d:%d:%d:%d:%d:%d\n",ahumi2[0],ahumi2[1],ahumi2[2],ahumi2[3],ahumi2[4],ahumi2[5]);
+ */
+ }
+
+ if(clock%freq2==0 && clock != t2){ /////////////USER2
+ t2 = clock;
+
+ if(c2<=13){ //temp array
+ atemp2[c2]=ctemp;
+ c2++;
+ }
+ else{
+ for(int i=0;i<13;i++){
+ atemp2[i] = atemp2[i+1];
+ }
+ atemp2[13] = ctemp;
+ }
+
+ if(i2<=5){ //humid array
+ ahumi2[i2]=chumid;
+ i2++;
+ }
+ else{
+ for(int i=0;i<5;i++){
+ ahumi2[i] = ahumi2[i+1];
+ }
+ ahumi2[5] = chumid;
+ }
+ //save data
+ for(int i=0;i<=13;i++){
+ memory.write(i+51,atemp2[i]);
+ }
+ for(int i=0;i<=5;i++){
+ memory.write(i+71,ahumi2[i]);
+ }
+ }
+
+ //auto mode
+ if(mode==1){
+ if(user==1){
+ if(chumid>humid1){
+ if(on.read()!=2){
+ motor_on(2,speed1);
+ }
+ }
+ else if(chumid<humid1){
+ if(on.read()!=1){
+ motor_on(1,speed1);
+ }
+ }
+ }
+ else if(user==2){
+ if(chumid>humid2){
+ if(on.read()==1){
+ motor_on(2,speed2);
+ }
+ }
+ else if(chumid<humid1){
+ if(on.read()!=1){
+ motor_on(1,speed2);
+ }
+ }
+ }
+ }
+
+
+
+ //get serial command
+
+ if(pc.readable()){
+ pc.scanf("%[^:]:%d",command,&valu);
+
+ //db.printf("%s/%d\n",command,valu); //debugger
+ //wait_ms(50);
+ //pc.printf("command = %s valu = %d user = %d\n",command,valu,user);
+
+
+
+
+ //call function
+ if (strcmp(command,"user1")==0 || strcmp(command,"\nuser1")==0) {
+ //return spd:humid_trsh:samp_frq USER1
+ user = 1;
+ memory.read(11,speed1);
+ memory.read(12,humid1);
+ memory.read(13,freq1);
+
+ pc.printf("%d:%d:%d\n",speed1,humid1,freq1);
+
+ }
+ else if(strcmp(command,"user2")==0 || strcmp(command,"\nuser2")==0){
+ //return spd:humid_trsh:samp_frq USER2
+ user = 2;
+ memory.read(14,speed2);
+ memory.read(15,humid2);
+ memory.read(16,freq2);
+
+ pc.printf("%d:%d:%d\n",speed2,humid2,freq2);
+
+ }
+ else if(strcmp(command,"auto")==0 || strcmp(command,"\nauto")==0){
+ //auto mode
+ //return 'ok'
+ mode = 1;
+ pc.printf("ok\n");
+ }
+ else if(strcmp(command,"on")==0 || strcmp(command,"\non")==0){
+ //motor on
+ mode = 0;
+ if(user==1){
+ motor_on(1,speed1);
+ }
+ else{
+ motor_on(1,speed2);
+ }
+ //return 'ok'
+ pc.printf("ok\n");
+
+ }
+ else if(strcmp(command,"off")==0 || strcmp(command,"\noff")==0){
+ //off motor
+ mode = 0;
+ if(user==1){
+ motor_on(2,speed1);
+ }
+ else{
+ motor_on(2,speed2);
+ }
+ //return 'ok'
+ pc.printf("ok\n");
+ }
+ else if(strcmp(command,"speed")==0 || strcmp(command,"\nspeed")==0){
+ //motor spd = int8_t valu
+ if(user == 1){
+ memory.write(11,valu);
+ }
+ else if(user == 2){
+ memory.write(14,valu);
+ }
+ //return 'ok'
+ pc.printf("ok\n");
+ }
+ else if(strcmp(command,"humidity")==0 || strcmp(command,"\nhumidity")==0){
+ //humid_trsh = int8_t valu
+ if(user == 1){
+ memory.write(12,valu);
+ }
+ else if(user == 2){
+ memory.write(15,valu);
+ }
+ //return 'ok'
+ pc.printf("ok\n");
+ }
+ else if(strcmp(command,"time")==0 || strcmp(command,"\ntime")==0){
+ //samp_frq = int8_t valu
+ if(user == 1){
+ memory.write(13,valu);
+ }
+ else if(user == 2){
+ memory.write(16,valu);
+ }
+ //return 'ok'
+ pc.printf("ok\n");
+ }
+ else if(strcmp(command,"get")==0 || strcmp(command,"gget")==0 || strcmp(command,"\nget")==0 || strcmp(command,"\ngget")==0){
+ //return temp:humid
+ pc.printf("%d:%d\n",ctemp,chumid);
+ //db.printf("---%d:%d\n",ctemp,chumid);
+ }
+ else if(strcmp(command,"gettemp")==0 || strcmp(command,"\ngettemp")==0){
+ //return temp t:t:t:t x14
+ if(user==1){
+ pc.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp1[0],atemp1[1],atemp1[2],atemp1[3],atemp1[4],atemp1[5],atemp1[6],atemp1[7],atemp1[8],atemp1[9],atemp1[10],atemp1[11],atemp1[12],atemp1[13]);
+ }
+ else if(user==2){
+ pc.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp2[0],atemp2[1],atemp2[2],atemp2[3],atemp2[4],atemp2[5],atemp2[6],atemp2[7],atemp2[8],atemp2[9],atemp2[10],atemp2[11],atemp2[12],atemp2[13]);
+ }
+ }
+ else if(strcmp(command,"gethumi")==0 || strcmp(command,"\ngethumi")==0){
+ //return humid h:h:h:h x6
+ if(user==1){
+ pc.printf("%d:%d:%d:%d:%d:%d\n",ahumi1[0],ahumi1[1],ahumi1[2],ahumi1[3],ahumi1[4],ahumi1[5]);
+ }
+ else if(user==2){
+ pc.printf("%d:%d:%d:%d:%d:%d\n",ahumi2[0],ahumi2[1],ahumi2[2],ahumi2[3],ahumi2[4],ahumi2[5]);
+ }
+ }
+
+
+ }
+
+
+
+
+ }//mainwhile
+}//main
+
+
+int motor_on(uint8_t dir, uint8_t pwm)
+{
+ float a;
+ a=pwm;
+ a=a/100;
+ mypwm.write(a);
+ if(dir==1) {
+ do {
+ IN1=1;
+ IN2=0;
+ } while(on.read()!=1);
+ IN1=0;
+ IN2=0;
+ }//end on
+ if(dir==2) {
+ do {
+ IN1=0;
+ IN2=1;
+ } while(on.read()!=2);
+ IN1=0;
+ IN2=0;
+ }//end off
+ return 0;
+}// end function
+
+uint8_t humidity()
+{
+ return 100-(rain.read()*100);
+}// end function
+
+uint8_t temp_read()
+{
+ uint8_t ch;
+ char p1,p2;
+ float temp;
+ i2c.start();
+ ch=i2c.write(0xB4);
+
+ if(!ch)return false;
+ ch=i2c.write(0x07);
+
+ if(!ch)return false;
+ i2c.start();
+ ch=i2c.write(0xB5);
+
+ if(!ch)return false;
+
+ p1=i2c.read(1); //Tobj low byte
+ p2=i2c.read(1); //Tobj heigh byte
+ i2c.read(0);
+
+ i2c.stop();
+
+
+ temp=((((p2&0x007f)<<8)+p1)*0.02)-0.01;
+ //printf("%.0f\n", temp-273);
+ return (int)temp-273;
+}
--- a/main.cpp Wed Dec 14 05:41:40 2016 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,369 +0,0 @@
-#include "mbed.h"
-#include "eeprom.h"
-#include "string.h"
-
-Serial db(D1, D0);
-Serial pc(PA_11, PA_12);
-EEPROM memory(D14,D15,0);
-PwmOut mypwm(D9);
-AnalogIn rain(A2);
-DigitalOut IN1(D10);
-DigitalOut IN2(D11);
-BusIn on(D3,D4);
-I2C i2c(D5,D7); //sda,scl
-uint8_t temp_read();
-uint8_t humidity();
-int motor_on(uint8_t, uint8_t); // dir input(1,2) and pwm input(1-100)
-void Rx_interrupt();
-DigitalOut myled(LED1);
-DigitalIn butt(USER_BUTTON);
-
-char command[100];
-int8_t valu;
-char rx_line[100];
-
-int main() {
-
-
- myled = 1;
-
- int user = 0;
- int8_t humid1 = 0;
- int8_t speed1 = 0;
- int8_t freq1 = 0;
- int8_t humid2 = 0;
- int8_t speed2 = 0;
- int8_t freq2 = 0;
- int8_t ctemp = 0;
- int8_t chumid = 0;
- int8_t atemp1[15]={0};
- int8_t ahumi1[7]={0};
- int8_t atemp2[15]={0};
- int8_t ahumi2[7]={0};
- int mode = 0;
-
- memory.read(11,speed1);
- memory.read(12,humid1);
- memory.read(13,freq1);
- memory.read(14,speed2);
- memory.read(15,humid2);
- memory.read(16,freq2);
- Timer t;
- int clock=0;
- int c1 = 0;
- int i1 = 0;
- int c2 = 0;
- int i2 = 0;
- int t1 = -1;
- int t2 = -1;
- /*eeprom address
- u1spd = 11
- u1humit = 12
- u1ti = 13
- u2spd = 14
- u2humit = 15
- u2ti = 16
- atemp1[15] = 21-34
- ahumi1[7] = 41-46
- atemp2[15] = 51-64
- ahumi2[7] = 71-76
- */
-
- pc.baud(9600);
-
- t.start();
- while(1) {
- chumid = humidity();
- ctemp = temp_read();
- //sampling
- clock = t.read();
- if(clock%freq1==0 && clock != t1){ ///////////// USER1
- t1=clock;
- if(c1<=13){ //temp array
- atemp1[c1]=ctemp;
- c1++;
- }
- else{
- for(int i=0;i<13;i++){
- atemp1[i] = atemp1[i+1];
- }
- atemp1[13] = ctemp;
- }
-
- if(i1<=5){ //humid array
- ahumi1[i1]=chumid;
- i1++;
- }
- else{
- for(int i=0;i<5;i++){
- ahumi1[i] = ahumi1[i+1];
- }
- ahumi1[5] = chumid;
- }
- //save data
- for(int i=0;i<=13;i++){
- memory.write(i+21,atemp1[i]);
- }
- for(int i=0;i<=5;i++){
- memory.write(i+41,ahumi1[i]);
- }
- /* debugger
- db.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp1[0],atemp1[1],atemp1[2],atemp1[3],atemp1[4],atemp1[5],atemp1[6],atemp1[7],atemp1[8],atemp1[9],atemp1[10],atemp1[11],atemp1[12],atemp1[13]);
- db.printf("%d:%d:%d:%d:%d:%d\n",ahumi1[0],ahumi1[1],ahumi1[2],ahumi1[3],ahumi1[4],ahumi1[5]);
- db.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp2[0],atemp2[1],atemp2[2],atemp2[3],atemp2[4],atemp2[5],atemp2[6],atemp2[7],atemp2[8],atemp2[9],atemp2[10],atemp2[11],atemp2[12],atemp2[13]);
- db.printf("%d:%d:%d:%d:%d:%d\n",ahumi2[0],ahumi2[1],ahumi2[2],ahumi2[3],ahumi2[4],ahumi2[5]);
- */
- }
-
- if(clock%freq2==0 && clock != t2){ /////////////USER2
- t2 = clock;
-
- if(c2<=13){ //temp array
- atemp2[c2]=ctemp;
- c2++;
- }
- else{
- for(int i=0;i<13;i++){
- atemp2[i] = atemp2[i+1];
- }
- atemp2[13] = ctemp;
- }
-
- if(i2<=5){ //humid array
- ahumi2[i2]=chumid;
- i2++;
- }
- else{
- for(int i=0;i<5;i++){
- ahumi2[i] = ahumi2[i+1];
- }
- ahumi2[5] = chumid;
- }
- //save data
- for(int i=0;i<=13;i++){
- memory.write(i+51,atemp2[i]);
- }
- for(int i=0;i<=5;i++){
- memory.write(i+71,ahumi2[i]);
- }
- }
-
- //auto mode
- if(mode==1){
- if(user==1){
- if(chumid>humid1){
- if(on.read()!=2){
- motor_on(2,speed1);
- }
- }
- else if(chumid<humid1){
- if(on.read()!=1){
- motor_on(1,speed1);
- }
- }
- }
- else if(user==2){
- if(chumid>humid2){
- if(on.read()==1){
- motor_on(2,speed2);
- }
- }
- else if(chumid<humid1){
- if(on.read()!=1){
- motor_on(1,speed2);
- }
- }
- }
- }
-
-
-
- //get serial command
-
- if(pc.readable()){
- pc.scanf("%[^:]:%d",command,&valu);
-
- //db.printf("%s/%d\n",command,valu); //debugger
- //wait_ms(50);
- //pc.printf("command = %s valu = %d user = %d\n",command,valu,user);
-
-
-
-
- //call function
- if (strcmp(command,"user1")==0 || strcmp(command,"\nuser1")==0) {
- //return spd:humid_trsh:samp_frq USER1
- user = 1;
- memory.read(11,speed1);
- memory.read(12,humid1);
- memory.read(13,freq1);
-
- pc.printf("%d:%d:%d\n",speed1,humid1,freq1);
-
- }
- else if(strcmp(command,"user2")==0 || strcmp(command,"\nuser2")==0){
- //return spd:humid_trsh:samp_frq USER2
- user = 2;
- memory.read(14,speed2);
- memory.read(15,humid2);
- memory.read(16,freq2);
-
- pc.printf("%d:%d:%d\n",speed2,humid2,freq2);
-
- }
- else if(strcmp(command,"auto")==0 || strcmp(command,"\nauto")==0){
- //auto mode
- //return 'ok'
- mode = 1;
- pc.printf("ok\n");
- }
- else if(strcmp(command,"on")==0 || strcmp(command,"\non")==0){
- //motor on
- mode = 0;
- if(user==1){
- motor_on(1,speed1);
- }
- else{
- motor_on(1,speed2);
- }
- //return 'ok'
- pc.printf("ok\n");
-
- }
- else if(strcmp(command,"off")==0 || strcmp(command,"\noff")==0){
- //off motor
- mode = 0;
- if(user==1){
- motor_on(2,speed1);
- }
- else{
- motor_on(2,speed2);
- }
- //return 'ok'
- pc.printf("ok\n");
- }
- else if(strcmp(command,"speed")==0 || strcmp(command,"\nspeed")==0){
- //motor spd = int8_t valu
- if(user == 1){
- memory.write(11,valu);
- }
- else if(user == 2){
- memory.write(14,valu);
- }
- //return 'ok'
- pc.printf("ok\n");
- }
- else if(strcmp(command,"humidity")==0 || strcmp(command,"\nhumidity")==0){
- //humid_trsh = int8_t valu
- if(user == 1){
- memory.write(12,valu);
- }
- else if(user == 2){
- memory.write(15,valu);
- }
- //return 'ok'
- pc.printf("ok\n");
- }
- else if(strcmp(command,"time")==0 || strcmp(command,"\ntime")==0){
- //samp_frq = int8_t valu
- if(user == 1){
- memory.write(13,valu);
- }
- else if(user == 2){
- memory.write(16,valu);
- }
- //return 'ok'
- pc.printf("ok\n");
- }
- else if(strcmp(command,"get")==0 || strcmp(command,"gget")==0 || strcmp(command,"\nget")==0 || strcmp(command,"\ngget")==0){
- //return temp:humid
- pc.printf("%d:%d\n",ctemp,chumid);
- //db.printf("---%d:%d\n",ctemp,chumid);
- }
- else if(strcmp(command,"gettemp")==0 || strcmp(command,"\ngettemp")==0){
- //return temp t:t:t:t x14
- if(user==1){
- pc.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp1[0],atemp1[1],atemp1[2],atemp1[3],atemp1[4],atemp1[5],atemp1[6],atemp1[7],atemp1[8],atemp1[9],atemp1[10],atemp1[11],atemp1[12],atemp1[13]);
- }
- else if(user==2){
- pc.printf("%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",atemp2[0],atemp2[1],atemp2[2],atemp2[3],atemp2[4],atemp2[5],atemp2[6],atemp2[7],atemp2[8],atemp2[9],atemp2[10],atemp2[11],atemp2[12],atemp2[13]);
- }
- }
- else if(strcmp(command,"gethumi")==0 || strcmp(command,"\ngethumi")==0){
- //return humid h:h:h:h x6
- if(user==1){
- pc.printf("%d:%d:%d:%d:%d:%d\n",ahumi1[0],ahumi1[1],ahumi1[2],ahumi1[3],ahumi1[4],ahumi1[5]);
- }
- else if(user==2){
- pc.printf("%d:%d:%d:%d:%d:%d\n",ahumi2[0],ahumi2[1],ahumi2[2],ahumi2[3],ahumi2[4],ahumi2[5]);
- }
- }
-
-
- }
-
-
-
-
- }//mainwhile
-}//main
-
-
-int motor_on(uint8_t dir, uint8_t pwm)
-{
- float a;
- a=pwm;
- a=a/100;
- mypwm.write(a);
- if(dir==1) {
- do {
- IN1=1;
- IN2=0;
- } while(on.read()!=1);
- IN1=0;
- IN2=0;
- }//end on
- if(dir==2) {
- do {
- IN1=0;
- IN2=1;
- } while(on.read()!=2);
- IN1=0;
- IN2=0;
- }//end off
- return 0;
-}// end function
-
-uint8_t humidity()
-{
- return 100-(rain.read()*100);
-}// end function
-
-uint8_t temp_read()
-{
- uint8_t ch;
- char p1,p2;
- float temp;
- i2c.start();
- ch=i2c.write(0xB4);
-
- if(!ch)return false;
- ch=i2c.write(0x07);
-
- if(!ch)return false;
- i2c.start();
- ch=i2c.write(0xB5);
-
- if(!ch)return false;
-
- p1=i2c.read(1); //Tobj low byte
- p2=i2c.read(1); //Tobj heigh byte
- i2c.read(0);
-
- i2c.stop();
-
-
- temp=((((p2&0x007f)<<8)+p1)*0.02)-0.01;
- //printf("%.0f\n", temp-273);
- return (int)temp-273;
-}