RS485のレシーバです。 一方通信の最新版です。
Dependencies: mbed
main.cpp
00001 #include "mbed.h" 00002 #define BUFFER 30 00003 00004 Serial rs485(p9,p10); 00005 Serial pc(USBTX,USBRX); 00006 PwmOut servo1(p21); 00007 PwmOut servo2(p22); 00008 DigitalOut Receiver(p5); 00009 DigitalOut LED(p7); 00010 DigitalIn Debug(p6); 00011 AnalogIn phase1(p15); 00012 AnalogIn phase2(p16); 00013 00014 float temp1 = 0.5 ; 00015 float temp2 = 0.5; 00016 float servo1_value = 0.0; 00017 float servo2_value = 0.0; 00018 int data[BUFFER]; 00019 int servo1_data1[5]; 00020 int servo2_data2[5]; 00021 int num1,num2; 00022 00023 00024 int main(){ 00025 rs485.baud(38400); 00026 Receiver = 0; 00027 servo1.period_ms(20); 00028 servo2.period_ms(20); 00029 while(1){ 00030 if(Debug == 0){ 00031 temp1 = phase1; 00032 temp2 = phase2; 00033 LED = 1; 00034 } 00035 else 00036 LED = 0; 00037 int available_temp = 0; 00038 int i = 0; 00039 if((available_temp = rs485.readable()) == 1){ 00040 // Serial.println(available_temp); 00041 wait_us(5); 00042 for(i = 0;i < 4;i++){ 00043 data[i] = rs485.getc(); 00044 //pc.printf("%d\n\r",data[i]); 00045 } 00046 wait_us(1); 00047 } 00048 for(i = 0;i< 4;i++){ 00049 if(data[i] == 'A' && data[i + 1] != -1){ 00050 servo1_value = temp1 + (float)data[i + 1] / 180.0; 00051 if(servo1_value >= 1) 00052 servo1_value = 1; 00053 if(servo1_value <= 0) 00054 servo1_value = 0; 00055 servo1.pulsewidth(0.00093 + servo1_value * (0.00235 - 0.00093)); 00056 wait_us(1); 00057 } 00058 if(data[i] == 'B' && data[i+1] != -1){ 00059 pc.printf("%d\n\r",data[i + 1]); 00060 servo2_value = temp2 + (float)data[i + 1] / 180.0; 00061 if(servo2_value >= 1) 00062 servo2_value = 1; 00063 if(servo2_value <= 0) 00064 servo2_value = 0; 00065 servo2.pulsewidth(0.00093 + servo2_value * (0.00235 - 0.00093)); 00066 wait_us(1); 00067 // Serial.println(data[i+1]); 00068 } 00069 } 00070 } 00071 }
Generated on Wed Nov 16 2022 13:28:19 by
1.7.2