RS485のレシーバです。 一方通信の最新版です。

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }