2つのanalogスティックのanalog値をserial通信で送信、LEDをpwm制御するプログラムの受信側。2本入力時は正常,1本のみ入力時不具合(LED点滅)あり。直したら使えるようになります。

Dependencies:   mbed

※解決策思いつかず。放置済み。※

main.cpp

Committer:
eil4nyqn
Date:
2014-12-21
Revision:
0:4bcbb11cf9b1

File content as of revision 0:4bcbb11cf9b1:

#include "mbed.h"

Serial pc(USBTX,USBRX);
Serial mc(p13,p14);
//PwmOut myled[] = {p21,p22,p23,p24};
PwmOut myled[] = {LED1,LED2,LED3,LED4};
BusOut select(p5,p6,p7,p8);
Timer test;
Timer test2;

int main() {
    double signal,signal2;
    uint8_t i = 0,data,data2;
    int style = 0,style2 = 0;
    double time = 0,time2 = 0;
    
    while(1) {
        if(mc.readable() == 1){
            data = mc.getc();
            test.reset();
            test.start();
            
            if(data < 64 && data > 2){
                signal = data/50.00;
                i = 0;
                myled[i] = signal;
                style = 1;
                select = style;                                
            }else if(data > 64 && data < 128){
                signal = (data-64)/50.00;
                i = 1;
                myled[i] = signal;
                style = 2;
                select = style;
            }else if(data < 196 && data > 128){
                signal = (data-126)/50.00;
                i = 2;
                myled[i] = signal;
                style = 4;
                select = style;
            }else if(data > 196 && data < 256){
                signal = (data-196)/50.00;
                i = 3;
                myled[i] = signal;
                style = 8;
                select = style;
            }else{
                myled[0] = 0;
                myled[1] = 0;
                myled[2] = 0;
                myled[3] = 0;
            }
            test.stop();
            time = test.read();
            pc.printf("%u_%f_%f_%u\n",data,signal,time,style);
            
            if(mc.readable() == 1){
                data2 = mc.getc();
                test2.start();
                if(data2 < 64 && data2 > 2){
                    signal2 = data2/50.00;
                    myled[0] = signal2;
                    
                    if(i > 1){
                        
                }else if(data2 > 64 && data2 < 128){
                    signal2 = (data2-64)/50.00;
                    myled[1] = signal2;
                    style2 = 2;
                    style2 +=style;
                    myled[i] = signal;
                    mosw = style2;
            }else if(data2 < 196 && data2 > 128){
                signal2 = (data2-126)/50.00;
                myled[3] = signal2;
                style2 = 4;
                style2 += style;
                myled[i] = signal;
                mosw = style2;
                //test2.start();                                
            }else if(data2 < 256 && data2 > 196){
                signal2 = (data2-196)/50.00;
                myled[3] = signal2;
                style2 = 4;
                style2 += style;
                myled[i] = signal;
                mosw = style;
                //test2.start();
            }else{
                myled[0] = 0;
                myled[1] = 0;
                myled[2] = 0;
                myled[3] = 0;
            }
            test2.stop();
            time2 = test2.read();
            pc.printf("%u_%f_%f_%u\n",data2,signal2,time2,style2);
            i = 0;
        }else{
            myled[0] = 0;
            myled[1] = 0;
            myled[2] = 0;
            myled[3] = 0;
        }
    }
}