Руслан Бредун
/
stm32-sensor-base2
test
main.cpp
- Committer:
- ruslanbredun
- Date:
- 2020-12-06
- Revision:
- 13:0c732e06d675
- Parent:
- 12:406f75196a12
- Child:
- 14:b3530522908e
File content as of revision 13:0c732e06d675:
#include <global.h> //RS485 RS485(UART2_TX,UART2_RX,DE_TXD_2); // Tx, Rx , !RE and DE MAX485 pin Serial RS2(UART2_TX, UART2_RX); Serial RS1(UART1_TX, UART1_RX); Timer timer; typedef uint8_t byte; DigitalOut Select1(DE_TXD_1); DigitalOut Select2(DE_TXD_2); bool sendFlag = false; bool sendFlag1 = false; int cmd[13] = {0xA5,0x40,0x90,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D}; char inChar[52]; int index = 0; char c = '1'; const unsigned char CRC7_POLY = 0x91; unsigned char getCRC(unsigned char message[], unsigned char length) { unsigned char i, j, crc = 0; for (i = 0; i < length; i++) { crc ^= message[i]; for (j = 0; j < 8; j++) { if (crc & 1) crc ^= CRC7_POLY; crc >>= 1; } } return crc; } void UART2_callback() { c = RS2.getc(); if(c == '4') { sendFlag = true; } else { Select2 = 1; wait_ms(90); Select2 = 0; } } int main() { RS2.baud (115200); Select1 = 0; Select2 = 0; RS2.attach(&UART2_callback); //RS1.attach(&UART1_callback); #if DEMO_CODE int US1_data = 0,US2_data = 0, US3_data = 0; int Lift_IR1 = 0,Lift_IR2 = 0; bool IR1_data = 0,IR2_data = 0; float temp_one_value = -1, temp_two_value = -1, Enc_left_data = 0, Enc_right_data = 0, time = 0; Timer timer1; timer1.start(); OneWire oneWire(PA_11); // substitute D8 with the actual pin name connected to the 1-wire bus int sensorsFound = 0; DigitalIn Lift1 (PB_0); DigitalIn Lift2 (PB_1); AS5045 Enc_left(SP1_NSS1); AS5045 Enc_right(SP1_NSS2); JSN_SR04 US_sensor_left (PB_14, PA_9); JSN_SR04 US_sensor_middle (PB_15, PA_9); JSN_SR04 US_sensor_right (PA_8, PA_9); US_sensor_left.setRanges (20, 300); US_sensor_middle.setRanges (20, 300); US_sensor_right.setRanges (20, 300); E18_D80NK IR_sensor_left (PB_13); E18_D80NK IR_sensor_right (PB_12); for (sensorsFound = 0; sensorsFound < MAX_SENSOSRS; sensorsFound++) { ds1820[sensorsFound] = new DS1820(&oneWire); if (!ds1820[sensorsFound]->begin()) { delete ds1820[sensorsFound]; break; } } while (true) { timer1.reset(); for (int i = 0; i < sensorsFound; i++) { ds1820[i]->startConversion(); wait_ms(1); //temp_one_value = ds1820[i]->read(); //temp_two_value = i; } US_sensor_left.startMeasurement (); US1_data = US_sensor_left.getDistance_cm (); wait_ms(15); US_sensor_middle.startMeasurement (); US2_data = US_sensor_middle.getDistance_cm (); wait_ms(15); US_sensor_right.startMeasurement (); US3_data = US_sensor_right.getDistance_cm (); wait_ms(15); IR1_data = IR_sensor_left.checkObstacle (); IR2_data = IR_sensor_right.checkObstacle (); Enc_left_data = Enc_left.getAngle(); Enc_right_data = Enc_right.getAngle(); Lift_IR1 = Lift1.read(); Lift_IR2 = Lift2.read(); time = timer1.read(); if (ds1820[0]->isPresent() ) { //pc.printf("temp[%d] = %3.1f%cC\r\n", 0, ds1820[0]->read(), 176); // read temperature temp_one_value = ds1820[0]->read(); } if (ds1820[1]->isPresent() ) { //pc.printf("temp[%d] = %3.1f%cC\r\n", 1, ds1820[1]->read(), 176); // read temperature temp_two_value = ds1820[1]->read(); } //if(sendFlag) { Select2 = 1; RS2.printf ("%d_%d_%d_%d_%d_%d_%d_%3.1f_%3.1f_%3.1f_%3.1f_%f\r\n", US1_data, US2_data, US3_data, IR1_data, IR2_data, Lift_IR1, Lift_IR2, temp_one_value, temp_two_value, Enc_right_data, Enc_left_data, time); //,(int)((Vcc -24 ) * 5 + 50)); wait_ms(5); sendFlag = false; Select2 = 0; // } } #endif #if TEST_REQUEST while (true) { // if(RS1.readable()) { // Select1 = 1; // RS1.putc(RS1.getc()); // wait_ms (1000); // Select1 = 0; // }else{ Select1 = 1; RS1.printf ("nothing \n"); wait_ms (5); Select1 = 0; wait_ms (1000); //} } #endif }