Dependencies:   mbed

main.cpp

Committer:
James1208
Date:
2011-08-02
Revision:
0:954607bc2d95

File content as of revision 0:954607bc2d95:

#include "mbed.h"

DigitalIn enc_pb (p5);
InterruptIn enc_A (p6);
InterruptIn enc_B (p7);
PwmOut led1 (p22);
PwmOut led2 (p23);

void enc_int_routine (void);

bool enc_A_state;
bool enc_B_state;
bool old_enc_A_state;
bool old_enc_B_state;
int val_min = 0;
int val_max = 100;
int val = ((val_max - val_min) / 2) + val_min;
int val_old = val;

int main() {
    enc_pb.mode(PullUp);
    enc_A.mode(PullUp);
    enc_B.mode(PullUp);
    enc_A_state = enc_A;
    enc_B_state = enc_B;
    enc_A.rise(&enc_int_routine);
    enc_B.rise(&enc_int_routine);
    enc_A.fall(&enc_int_routine);
    enc_B.fall(&enc_int_routine);
    while (1) {
        if (val != val_old) {
            printf("\n\r%i",val);
        } // if (val != val_old)
        val_old = val;
        if (enc_pb) {
            led1 = val / 100.0;
            led2 = 1.0 - (val / 100.0);
        } else {
            printf("button\n\r");
            led1 = 0;
            led2 = 0;
        } // if (enc_pb)
    } // while(1)
} // end main

void enc_int_routine (void) {
    old_enc_A_state = enc_A_state;
    old_enc_B_state = enc_B_state;
    enc_A_state = enc_A;
    enc_B_state = enc_B;
    if (((enc_A_state != old_enc_A_state) && (enc_B_state != old_enc_B_state)) || ((enc_A_state == old_enc_A_state) && (enc_B_state == old_enc_B_state))) {
        val = val;
    } else {
        if (enc_A_state ^ old_enc_B_state) {
            val -= 1;
        } else {
            val += 1;
        } // (enc_A_state ^ old_enc_B_state)
    } // if ((enc_A_state != old_enc_A_state) && (enc_B_state != old_enc_B_state))
} // end enc_A_int_routine