netudenntui

Dependencies:   mbed SDFileSystem

Files at this revision

API Documentation at this revision

Comitter:
mitinori
Date:
Wed Nov 27 08:39:48 2019 +0000
Commit message:
netudenntui

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
max6675.cpp Show annotated file Show diff for this revision Revisions of this file
max6675.h Show annotated file Show diff for this revision Revisions of this file
max6675_2.cpp Show annotated file Show diff for this revision Revisions of this file
max6675_2.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/SDFileSystem/#8db0d3b02cec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,204 @@
+#include "mbed.h"
+#include "max6675.h"
+#include "max6675_2.h"
+#include "SDFileSystem.h"
+#include <time.h>
+#include <stdio.h>
+ 
+DigitalOut led_1(LED1);
+DigitalOut led_2(LED2);
+DigitalOut led_3(LED3);
+DigitalOut led_4(LED4);
+SPI spi(p11,p12,p13);
+max6675 max(spi,p18);
+SPI spi_2(p11,p12,p13);
+max6675_2 max_2(spi_2,p21);
+AnalogIn LM61(p15);
+SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
+Serial pc(USBTX,USBRX);
+DigitalIn swi_1(p23);   //p5~p30のどれでも良い
+DigitalIn swi_2(p22);   //p5~p30のどれでも良い
+
+void led()
+{
+   led_1 = 1;
+   led_2 = 1;
+   led_3 = 1;
+   led_4 = 1;
+   wait(.2);
+   
+   led_1 = 0;
+   led_2 = 0;
+   led_3 = 0;
+   led_4 = 0;
+   wait(.2);
+   
+   led_1 = 1;
+   led_2 = 1;
+   led_3 = 1;
+   led_4 = 1;
+   wait(.2);
+   
+   led_1 = 0;
+   led_2 = 0;
+   led_3 = 0;
+   led_4 = 0;
+   wait(.2);
+}
+ 
+int main() 
+{  
+   int r = 9;  //平均する値の個数
+   double w_h = .42; //加熱waitの時間
+   double w_c = .417; //冷却waitの時間
+   clock_t start_h;
+   clock_t start_c;
+   float tempC, sum, sum_2, ave, ave_2;
+   int i, j;   //平均化処理に使用
+   swi_1.mode(PullUp);
+   swi_2.mode(PullUp);
+    
+   mkdir("/sd/mydir", 0777);
+   printf("test start!\n");
+   
+  
+   if( swi_1 == 1 && swi_2 == 0 )  //スイッチをマイコン側に倒したとき
+     {
+       printf("\n\n\nheating start\n\n\n");
+      
+       led();
+       
+       while (1)
+        {
+           start_h = clock();
+             printf("%f\n", (double)start_h/CLOCKS_PER_SEC);
+           
+            max.select();                       
+            max_2.deselect_2();
+ 
+          //平均化処理      
+          
+            sum = 0;
+            ave = 0;
+            i = 0;
+           for( i = 0; i < r; i++)            
+             {
+              float temp = max.read_temp();
+              sum += temp;
+             }   
+            
+            ave = sum / r;
+            printf("\n\rT: %f",ave );
+            
+            
+           
+            max.deselect();
+            max_2.select_2();
+             
+        //平均化処理  
+            sum_2 = 0;
+            ave_2 = 0;
+            j = 0;
+           for( j = 0; j < r; j++)            
+           {
+              float temp_2 = max_2.read_temp_2();
+              sum_2 += temp_2;
+           }   
+            
+            ave_2 = sum_2 / r;
+            printf("\n\rT: %f",ave_2 );
+            
+          
+             //conversion to degrees C - from sensor output voltage per LM61 data sheet
+            tempC = ((LM61*3.3)-0.600)*100.0;
+           
+            printf("\nC: %5.2F \n\n\n\r", tempC);
+              
+            FILE *fp = fopen("/sd/mydir/test_heating.csv", "a");
+            if(fp == NULL) 
+               { error("Could not open file for write\n");
+               }
+        
+           fprintf(fp, "t=,%f,,,T_1,%f,,,T_2,%f,,tempC,%f\n",(double)start_h/CLOCKS_PER_SEC, ave, ave_2, tempC);
+           fclose(fp); 
+           wait(w_h);
+        }//while_h
+    
+     }//if_h
+     
+     
+     if( swi_1 == 0 && swi_2 == 1 ) //スイッチをマイコンの逆側に倒したとき
+      {   
+         printf("\n\n\ncolling start\n\n\n");
+         
+         led();
+         
+        while (1)
+         {
+            start_c = clock();
+            printf("%f\n", (double)start_c/CLOCKS_PER_SEC);
+   //        double sum_time = start_h/CLOCKS_PER_SEC + start_c/CLOCKS_PER_SEC;
+   //         printf("%f\n", sum_time);
+          
+           
+            max.select();                       
+            max_2.deselect_2();
+ 
+          //平均化処理      
+          
+            sum = 0;
+            ave = 0;
+            i = 0;
+           for( i = 0; i < r; i++)            
+             {
+              float temp = max.read_temp();
+              sum += temp;
+             }   
+            
+            ave = sum / r;
+            printf("\n\rT: %f",ave );
+            
+            
+           
+            max.deselect();
+            max_2.select_2();
+             
+        //平均化処理  
+            sum_2 = 0;
+            ave_2 = 0;
+            j = 0;
+           for( j = 0; j < r; j++)            
+           {
+              float temp_2 = max_2.read_temp_2();
+              sum_2 += temp_2;
+           }   
+            
+            ave_2 = sum_2 / r;
+            printf("\n\rT: %f",ave_2 );
+            
+          
+             //conversion to degrees C - from sensor output voltage per LM61 data sheet
+            tempC = ((LM61*3.3)-0.600)*100.0;
+           
+            printf("\nC: %5.2F \n\n\n\r", tempC);
+              
+            FILE *fp = fopen("/sd/mydir/test_cooling.csv", "a");
+            if(fp == NULL) 
+               { error("Could not open file for write\n");
+               }
+        
+           fprintf(fp, "t=,%f,,,T_1,%f,,,T_2,%f,,tempC,%f\n",(double)start_c/CLOCKS_PER_SEC, ave, ave_2, tempC);
+           fclose(fp); 
+           wait(w_c);
+        }//while_c
+    
+     }//if_c
+     
+     
+      if( swi_1 == 1 && swi_2 == 1 )  // スイッチを倒さない時(真ん中の時)
+         { 
+           led();
+           printf("\n\n\nsotp\n\n\n");
+         }
+         
+} //main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max6675.cpp	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,42 @@
+
+#include <mbed.h>
+#include "max6675.h"
+
+max6675::max6675(SPI& _spi, PinName _ncs) : spi(_spi), ncs(_ncs) {
+
+}
+
+float max6675::read_temp() {
+    short value = 0;
+    float temp = 0;
+    
+    uint8_t highByte=0;
+    uint8_t lowByte=0;
+    
+    select();
+    wait(.25); //This delay is needed else it does'nt seem to update the temp
+
+    highByte = spi.write(0);
+    lowByte = spi.write(0);
+    deselect();
+
+
+    if (lowByte & (1<<2)) {
+        error("No Probe");
+    } else {
+        value = (highByte << 5 | lowByte>>3);
+    }
+
+    temp = (value*0.25); // Multiply the value by 0.25 to get temp in ˚C or
+                         //  * (9.0/5.0)) + 32.0;   // Convert value to ˚F (ensure proper floats!)
+
+return temp;
+}
+
+void max6675::select() {
+    ncs = 0;
+}
+
+void max6675::deselect() {
+    ncs = 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max6675.h	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,25 @@
+#ifndef MAX6675_h
+#define MAX6675_h
+
+#include "mbed.h"
+
+class max6675
+{
+    SPI& spi;
+    DigitalOut ncs;
+  public:
+  
+    max6675(SPI& _spi, PinName _ncs);
+    void select();
+    void deselect();
+    
+    float read_temp();
+  private:
+    PinName _CS_pin;
+    PinName _SO_pin;
+    PinName _SCK_pin;
+    int _units;
+    float _error;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max6675_2.cpp	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,42 @@
+
+#include <mbed.h>
+#include "max6675_2.h"
+
+max6675_2::max6675_2(SPI& _spi_2, PinName _ncs_2) : spi_2(_spi_2), ncs_2(_ncs_2) {
+
+}
+
+float max6675_2::read_temp_2() {
+    short value_2 = 0;
+    float temp_2 = 0;
+    
+    uint8_t highByte_2=0;
+    uint8_t lowByte_2=0;
+    
+    select_2();
+    wait(.25); //This delay is needed else it does'nt seem to update the temp
+
+    highByte_2 = spi_2.write(0);
+    lowByte_2 = spi_2.write(0);
+    deselect_2();
+
+
+    if (lowByte_2 & (1<<2)) {
+        error("No Probe");
+    } else {
+        value_2 = (highByte_2 << 5 | lowByte_2>>3);
+    }
+
+    temp_2 = (value_2*0.25); // Multiply the value by 0.25 to get temp in ˚C or
+                         //  * (9.0/5.0)) + 32.0;   // Convert value to ˚F (ensure proper floats!)
+
+return temp_2;
+}
+
+void max6675_2::select_2() {
+    ncs_2 = 0;
+}
+
+void max6675_2::deselect_2() {
+    ncs_2 = 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max6675_2.h	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,25 @@
+#ifndef MAX6675_2_h
+#define MAX6675_2_h
+
+#include "mbed.h"
+
+class max6675_2
+{
+    SPI& spi_2;
+    DigitalOut ncs_2;
+  public:
+  
+    max6675_2(SPI& _spi_2, PinName _ncs_2);
+    void select_2();
+    void deselect_2();
+    
+    float read_temp_2();
+  private:
+    PinName _CS_pin_2;
+    PinName _SO_pin_2;
+    PinName _SCK_pin_2;
+    int _units_2;
+    float _error_2;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Nov 27 08:39:48 2019 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/e1686b8d5b90
\ No newline at end of file