Feng Hong / Mbed OS Nucleo_rtos_basic
Revision:
20:ec9d4f6a16ac
Parent:
19:0356e54240cc
Child:
21:5c6b3657c3cb
--- a/main.cpp	Tue Sep 24 14:05:58 2019 +0000
+++ b/main.cpp	Sat Oct 19 02:10:12 2019 +0000
@@ -6,13 +6,37 @@
 #include "SB1602E.h"
 #include "yoda2.h"
 #include "TextLCD.h"
+#include "DS3231.h"
+
+
+DigitalOut relay4(RELAY_4);
+DigitalOut relay3(RELAY_3);
+DigitalOut relay2(RELAY_2);
+DigitalOut relay1(RELAY_1);
+DigitalIn din1(DIN1);
+DigitalIn din2(DIN2);
+DigitalIn din3(DIN3);
+DigitalIn din4(DIN4);
+DigitalIn din5(DIN5);
+DigitalIn din6(DIN6);
+DigitalIn din7(DIN7);
+DigitalIn din8(DIN8);
+
+extern int moveMotor(int motornumber, int distance_mm, bool direction, bool freemove, bool gobackhome);
+extern int moveMotor1(int distance_mm, bool direction, bool freemove, bool gobackhome);
+extern int moveMotor2(int distance_mm, bool direction, bool freemove, bool gobackhome);
+extern int moveMotor3(int distance_mm, bool direction, bool freemove, bool gobackhome);
+extern int moveMotor3Until(bool direction, DigitalIn sensorpin);
+extern DigitalOut motor3_pul;
+extern DigitalOut motor3_en;
+extern DigitalOut motor3_dir;
 
 EventFlags button_event_flags;
 EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32);
 extern void eeprom_test(void);
 #ifdef YODA2
 // I2C Communication
-I2C i2c_lcd(PB_9, PB_8); // SDA, SCL
+I2C i2c_lcd(LCD_SDA, LCD_SCL); // SDA, SCL
 TextLCD_I2C_N lcd(&i2c_lcd, ST7032_SA, TextLCD::LCD16x2, NC, TextLCD::ST7032_3V3);
 #endif
 #if 1
@@ -45,7 +69,7 @@
 HX711 hx711(PA_14, PA_15);
 #endif
 #ifdef YODA2
-HX711 hx711(PA_1, PA_0);
+HX711 hx711(SCALE_SDA, SCALE_SCL);
 #endif
 #endif
 extern void scaleCalibration(bool release_led);
@@ -73,7 +97,7 @@
 #ifdef LCD_1602
 SB1602E lcd(D14, D15 );  //  SDA, SCL
 #endif
-CAN can1(PA_11, PA_12); // RD, TD
+CAN can1(CAN_RD, CAN_TD); // RD, TD
 DigitalOut led1(LED1);  // only one LED PA_5
 DigitalOut led2(LED2);  // only one LED PA_5
 #endif
@@ -136,7 +160,8 @@
     if (button_status == 0)
     {    
         printf("button0 down\r\n");
-        scaleCalibration(true);
+//        scaleCalibration(true);
+        moveMotor3(100, true, true, false);
         button_status = button0.read();
         if (button_status == 0)
         {
@@ -329,7 +354,7 @@
              }
         }
 #endif
-//        wait(0.2);
+        wait(0.2);
     }
 }
 #endif
@@ -368,8 +393,49 @@
     int loop = 0;
     int8_t ival;
     unsigned int can_id;
+    int distance = 0;
+#if 0    
+    int hour;
+    int minute;
+    int second;
+
+    int dayOfWeek;
+    int date;
+    int month;
+    int year;
+    DS3231 rtc_test(SDA, SCL);
+//    DS3231 rtc_test(PF_0, PF_1);
+        printf("\r\n\nDS3231 Library test program\r\nremi cormier 2012\r\n\n");
+    
+    rtc_test.setI2Cfrequency(400000);
+    
+    //rtc_test.writeRegister(DS3231_Aging_Offset,0); // uncomment to set Aging Offset 1LSB = approx. 0.1 ppm according from datasheet = 0.05 ppm @ 21 °C from my measurments
+     
+    rtc_test.convertTemperature();
+      
+    int reg=rtc_test.readRegister(DS3231_Aging_Offset);
+    if (reg>127)
+        {reg=reg-256;}
+    printf("Aging offset : %i\r\n",reg);
+         
+    printf("OSF flag : %i",rtc_test.OSF());
+    printf("\r\n");
+     
+    rtc_test.readDate(&date,&month,&year);
+    printf("date : %02i-%02i-%02i",date,month,year);
+    printf("\r\n");
+     
+    rtc_test.setTime(19,48,45); // uncomment to set time
+     
+    rtc_test.readTime(&hour,&minute,&second);
+    printf("time : %02i:%02i:%02i",hour,minute,second);
+    printf("\r\n");
+     
+    rtc_test.setDate(6,22,12,2012); // uncomment to set date
+ #endif   
+     
     printf("\n\n*** RTOS starts ***\r\n");
-  
+
 //    wait(1);
 #if 1
     ep.read((uint32_t)EEPROM_DEVICE_ADDRESS_ADDRESS,device_address); 
@@ -385,11 +451,13 @@
  //   lcd.printf("ABCDEFGHI"); // Standard printf function, All ASCII characters will display
 #endif  
 #ifdef YODA2
+#if 1
     lcd.cls();
     lcd.setContrast(31);
     lcd.setCursor(TextLCD::CurOff_BlkOff);
     lcd.setAddress(0,0);
     lcd.printf("Hello Yoda2!");
+#endif    
 #endif
 #ifdef LCD_1602
 //    lcd.printf( 0, "Hello world!" );    //  line# (0 or 1), string
@@ -404,6 +472,8 @@
 
 //    can1.reset();
 //    can2.reset();
+
+#if 1
     printf("device_address =0x%08x \r\n", (device_address<<18));
     can1.frequency(100000);
     can1.filter((device_address<<18), 0x1FFC0000, CANExtended, init_filter_handle);  // 0x1FFC0000 to filter the last 18bits 0-17
@@ -414,6 +484,8 @@
     //button0.mode(PullUp); // Activate pull-up
     can_receivethread.start(can_rxthread);  
     can_handlethread.start(analyzePayload);   
+#endif    
+
 #endif
     button1.mode(PullUp);
     button2.mode(PullUp);
@@ -454,9 +526,70 @@
     mainmenu_thread.start(main_menu);
 
 #endif
+    moveMotor3(0, true, false, false);
+    wait(2);
     while(1) {
-        wait(2);    
-#if 1               
+        wait(2); 
+#if 0        
+        distance = 0;
+        distance = moveMotor3Until(true, din5);
+        printf("F distance=%d \r\n", distance);
+        printf("Sensors:\r\n");
+        printf("%d %d %d %d \r\n", din1.read(), din2.read(), din3.read(), din4.read());
+        printf("%d %d %d %d \r\n", din5.read(), din6.read(), din7.read(), din8.read());  
+        wait(1);
+        distance = 0;
+        distance = moveMotor3Until(false, din5);  
+        printf("Sensors:\r\n");
+        printf("%d %d %d %d \r\n", din1.read(), din2.read(), din3.read(), din4.read());
+        printf("%d %d %d %d \r\n", din5.read(), din6.read(), din7.read(), din8.read()); 
+        printf("B distance=%d \r\n", distance);
+#endif
+#if 0        
+        relay4 = 1;
+        printf("relay4 turn on\r\n");
+        wait(2);
+        relay3 = 1;
+        printf("relay3 turn on\r\n");
+        wait(2);        
+        relay2 = 1;
+        printf("relay2 turn on\r\n");
+        wait(2);  
+        relay1 = 1;
+        printf("relay1 turn on\r\n");
+        wait(2); 
+        relay4 = 0;
+        relay3 = 0;
+        relay2 = 0;
+        relay1 = 0;
+#endif
+#if 0        
+        rtc_test.readDateTime(&dayOfWeek,&date,&month,&year,&hour,&minute,&second);
+        printf("date time : %i / %02i-%02i-%02i %02i:%02i:%02i",dayOfWeek,date,month,year,hour,minute,second);
+        printf("\r\n");
+     
+        printf("temperature :%6.2f", rtc_test.readTemp());
+        printf("\r\n");
+#endif        
+#if 0
+        moveMotor3(850, true, false, false);
+        wait(5);
+        moveMotor3(850, false, false, false);  
+#endif        
+#if 0             
+        moveMotor1(100, true, false, false);
+        moveMotor2(100, true, false, false);
+        moveMotor3(100, true, false, false);
+        wait(1);
+        moveMotor1(150, true, false, false);
+        moveMotor2(150, true, false, false);
+        moveMotor3(150, true, false, false);
+        wait(1);
+        moveMotor1(250, false, false, false);
+        moveMotor2(250, false, false, false);
+        moveMotor3(250, false, false, false);
+#endif        
+#if 1        
         if (!can_register_success)
         {    
             can_txdata_frame.cmd = COMMAND_REGISTER;