node.jsとmbedを使ってインターネット越しに多人数でマウスをクリックする
Fork of AutoCookieClicker by
Diff: main.cpp
- Revision:
- 3:35d8318e31bc
- Parent:
- 2:8e5fb73637e5
--- a/main.cpp Wed Sep 18 12:00:07 2013 +0000 +++ b/main.cpp Fri Sep 20 10:31:16 2013 +0000 @@ -1,21 +1,100 @@ -//sw connect p30 and gnd +// sw - p30 +// servo control - p25 #include "mbed.h" +#include "rtos.h" #include "USBMouse.h" - +#include "PinDetect.h" +#include "Servo.h" + +Serial pc(USBTX, USBRX); USBMouse mouse; -DigitalIn sw(p30); -DigitalOut led(LED1); - +PinDetect sw(p30); + +DigitalOut ledEnable(LED1); +DigitalOut ledClick(LED2); +DigitalOut ledClickContinue(LED3); +DigitalOut ledMbedAlive(LED4); + +volatile uint32_t clickCount; +volatile bool clickEnable; + +Mutex printMutex; + +//servo Thread +void servoMove(void const *arg){ + Servo servo(p25); + servo = 0.5; + while(true){ + if(clickEnable && clickCount > 0){ + ledClick = 1; + servo = 0; + wait(0.2); + servo = 0.3; + wait(0.1); + }else{ + servo = 0.5; + ledClick = 0; + } + } +} + +//serial Thread +void serialRecieve(void const *arg){ + while(true){ + if(pc.readable() > 0){ + printMutex.lock(); + clickCount += pc.getc(); + pc.printf("%d\n" , clickCount); + printMutex.unlock(); + } + } +} + +//sw isr +void swPressedIsr(){ + ledEnable = !ledEnable; + //restart click and clear clickCount + if(!clickEnable) clickCount = 0; + clickEnable = !clickEnable; +} + +//mbed is alive +void ledBlinkIsr(){ + ledMbedAlive = !ledMbedAlive; +} + int main() { sw.mode(PullUp); - + + clickCount = 0; + clickEnable = true; + ledEnable = 1; + + //sw debounce + sw.attach_deasserted(&swPressedIsr); + sw.setSampleFrequency(); + //led + Ticker ledBlinker; + ledBlinker.attach(&ledBlinkIsr,0.5); + + Thread servoThread(servoMove); + Thread serialThread(serialRecieve); + printMutex.lock(); + pc.printf("\nStart!\n"); + printMutex.unlock(); while (1) { - if(sw.read()!=1) { - led = !led; + if(clickCount > 0 && clickEnable){ + ledClickContinue = 1; + printMutex.lock(); + pc.printf("click!\n"); + printMutex.unlock(); mouse.click(MOUSE_LEFT); + clickCount--; + Thread::wait(0.02); + }else{ + ledClickContinue = 0; } - wait(0.25); } } \ No newline at end of file