Project_colorSensor

Dependencies:   USBDevice mbed-rtos mbed

main.cpp

Committer:
harryhuhhh
Date:
19 months ago
Revision:
0:e479cf804a1d

File content as of revision 0:e479cf804a1d:

#include "mbed.h"
#include "USBKeyboard.h"
#include "rtos.h"

Serial pc(USBTX, USBRX);
AnalogIn red1(p20);
AnalogIn green1(p19);
AnalogIn red2(p18);
AnalogIn green2(p17);
Timer session;

DigitalOut led1(p10);

volatile float delayTime;
volatile float RedValue1;
volatile float GreenValue1;
volatile float RedValue2;
volatile float GreenValue2;
volatile bool started = 0;
volatile int mode = 0; //white mode=0, black mode=1, no jump mode=3

USBKeyboard keyboard;
Mutex key;

void keyboardUpThread(void const *argument) {
    while (1) {
        RedValue1 = red1.read()*1000;
        GreenValue1 = green1.read()*1000;
        RedValue2 = red2.read()*1000;
        GreenValue2 = green2.read()*1000;
        
        if (mode == 0) {
            led1 = 0;
            if (((RedValue1+GreenValue1)<17 || (RedValue2+GreenValue2)<17)) {
                delayTime = 300-session.read()*3.5;
                if (delayTime>0) {
                    Thread::wait(delayTime);
                }
                key.lock();
                keyboard.keyCode(UP_ARROW);
                key.unlock();
                if (!started) {
                    session.start();
                    started = 1;
                }
//                Thread::wait(200);
            }
            
            if ((session.read()>=55.5 && session.read()<=68.5) or (session.read()>=98)){
                mode = 2;
            }
        } else if (mode == 1) {
            led1=1;
            if (((RedValue1+GreenValue1)>7 || (RedValue2+GreenValue2)>7)) {
                delayTime = 300-session.read()*3;
                if (delayTime>0) {
                    Thread::wait(delayTime);
                }
                key.lock();
                keyboard.keyCode(UP_ARROW);
                key.unlock();
//                Thread::wait(200);

                
                if ((session.read()>=68.5)){
                    mode = 2;
                }
            }
        } else if (mode ==2) {
            if (session.read()>=98.1) mode = 1;
            else if (session.read()>=68.65) mode = 0;
            else if (session.read()>=56) mode = 1;
        }
        
    }
}

int main() {
    Thread thread1(keyboardUpThread);
    while(1) {
        key.lock();
//        pc.printf("red1: %f,\ngreen1: %f,\n",RedValue1,GreenValue1);
//        pc.printf("red2: %f,\ngreen2: %f,\n",RedValue2,GreenValue2);
        pc.printf("time: %f, mode: %d\n",session.read(),mode);
        key.unlock();
    }
}