Etch a Sketch on the uLCD screen with wheel encoders as the knobs.
Dependencies: 4DGL-uLCD-SE mbed
main.cpp
- Committer:
- simplyellow
- Date:
- 2017-03-13
- Revision:
- 0:c1245c18d07e
- Child:
- 1:876e9cc9088b
File content as of revision 0:c1245c18d07e:
#include "mbed.h" //#include "uLCD_4DGL.h" Serial pc(USBTX, USBRX); InterruptIn chA(p26); InterruptIn chB(p25); int chanA; int chanB; int currState; int prevState; int change; //uLCD_4GDL uLCD(p9,p10,p11); volatile int count1 = 0; //volatile int count2 = 0; InterruptIn pb(p21); DigitalOut led(LED1); /* Implemented barebones version of "QEI.h" by Aaron Berk for the sake of understanding the concept of X4 encoding 00 01 11 10 00 4 different states */ void encode() { change = 0; chanA = chA.read(); chanB = chB.read(); currState = (chanA << 1) | (chanB); if (((currState ^ prevState) != 0x3) && (currState != prevState)) { // example 01 <- 11 // change = (11&01 = 01) ^ (01&10 = 00>>1) = 1 // example 10 -> 00 // change = (10&01 = 00) ^ (00&10 = 00>>1) = 0 // change = (if(left) ^ change = (prevState & 0x1) ^ ((currState & 0x2) >> 1); if (change == 0) { change = -1; } count1 += change; } prevState = currState; } void clear() { //uLCD.cls(); led = !led; } int main() { chA.mode(PullUp); chB.mode(PullUp); chanA = chA.read(); chanB = chB.read(); currState = (chanA << 1) | (chanB); prevState = currState; chA.rise(&encode); chA.fall(&encode); chB.rise(&encode); chB.fall(&encode); pb.mode(PullUp); pb.fall(&clear); //pb to clear screen //add a pb to turn on and off pen //add a pot to go through colors //have something display current color and RGB val while(1) { /*if(count1 < 0) { pc.printf("CW \n\r"); } else { pc.printf("CCW \n\r"); }*/ pc.printf("count1: %d\r\n", count1); pc.printf("change: %d\r\n", change); pc.printf("---------\r\n"); wait(.1); } }