#include #include #include #include #include #include #include "mraa.h" #define R2R_BIT0 0 #define R2R_BIT1 1 #define R2R_BIT2 2 #define R2R_BIT3 3 #define R2R_BIT4 4 #define R2R_BIT5 5 #define R2R_BIT6 6 #define R2R_BIT7 7 const unsigned char sinL[] = { 0x7F,0x8B,0x98,0xA4,0xB0,0xBB,0xC6,0xD0,0xDA,0xE2, 0xE9,0xF0,0xF5,0xF9,0xFC,0xFD,0xFD,0xFC,0xFA,0xF7, 0xF2,0xEC,0xE5,0xDD,0xD4,0xCB,0xC0,0xB5,0xA9,0x9D, 0x90,0x84,0x77,0x6A,0x5E,0x52,0x46,0x3B,0x31,0x27, 0x1E,0x17,0x10,0x0A,0x06,0x02,0x00,0x00,0x00,0x02, 0x05,0x09,0x0E,0x15,0x1C,0x25,0x2E,0x39,0x43,0x4F, 0x5B,0x67,0x74,0x81 }; const unsigned char squL[] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 }; const unsigned char triL[] = { 0x00,0x08,0x10,0x18,0x20,0x29,0x31,0x39,0x41,0x4A, 0x52,0x5A,0x62,0x6A,0x73,0x7B,0x83,0x8B,0x94,0x9C, 0xA4,0xAC,0xB4,0xBD,0xC5,0xCD,0xD5,0xDE,0xE6,0xEE, 0xF6,0xFF,0xFF,0xF6,0xEE,0xE6,0xDE,0xD5,0xCD,0xC5, 0xBD,0xB4,0xAC,0xA4,0x9C,0x94,0x8B,0x83,0x7B,0x73, 0x6A,0x62,0x5A,0x52,0x4A,0x41,0x39,0x31,0x29,0x20, 0x18,0x10,0x08,0x00 }; mraa_aio_context adc_0; mraa_gpio_context gpio_0; mraa_gpio_context gpio_1; mraa_gpio_context gpio_2; mraa_gpio_context gpio_3; mraa_gpio_context gpio_4; mraa_gpio_context gpio_5; mraa_gpio_context gpio_6; mraa_gpio_context gpio_7; mraa_gpio_context ledSquare; mraa_gpio_context ledTriang; mraa_gpio_context ledSine; mraa_gpio_context butMode; int functionMode; int state; int dir; int counter; int sleepFactor; int doDAC; int InitDevices(void) { mraa_init(); adc_0 = mraa_aio_init(0); if(adc_0 == NULL) return(1); gpio_0 = mraa_gpio_init(0); gpio_1 = mraa_gpio_init(1); gpio_2 = mraa_gpio_init(2); gpio_3 = mraa_gpio_init(3); gpio_4 = mraa_gpio_init(4); gpio_5 = mraa_gpio_init(5); gpio_6 = mraa_gpio_init(6); gpio_7 = mraa_gpio_init(7); ledSquare = mraa_gpio_init(11); ledTriang = mraa_gpio_init(12); ledSine = mraa_gpio_init(13); butMode = mraa_gpio_init(10); mraa_gpio_dir(gpio_0, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_1, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_2, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_3, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_4, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_5, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_6, MRAA_GPIO_OUT); mraa_gpio_dir(gpio_7, MRAA_GPIO_OUT); mraa_gpio_dir(ledSquare, MRAA_GPIO_OUT); mraa_gpio_dir(ledTriang, MRAA_GPIO_OUT); mraa_gpio_dir(ledSine, MRAA_GPIO_OUT); mraa_gpio_dir(butMode, MRAA_GPIO_IN); mraa_gpio_use_mmaped(gpio_0,1); mraa_gpio_use_mmaped(gpio_1,1); mraa_gpio_use_mmaped(gpio_2,1); mraa_gpio_use_mmaped(gpio_3,1); mraa_gpio_use_mmaped(gpio_4,1); mraa_gpio_use_mmaped(gpio_5,1); mraa_gpio_use_mmaped(gpio_6,1); mraa_gpio_use_mmaped(gpio_7,1); } void SetPort(unsigned char valor) { unsigned char bitVal; bitVal = ((valor & 0b00000001) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_0, 1); } else { mraa_gpio_write(gpio_0, 0); } bitVal = ((valor & 0b00000010) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_1, 1); } else { mraa_gpio_write(gpio_1, 0); } bitVal = ((valor & 0b00000100) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_2, 1); } else { mraa_gpio_write(gpio_2, 0); } bitVal = ((valor & 0b00001000) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_3, 1); } else { mraa_gpio_write(gpio_3, 0); } bitVal = ((valor & 0b00010000) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_4, 1); } else { mraa_gpio_write(gpio_4, 0); } bitVal = ((valor & 0b00100000) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_5, 1); } else { mraa_gpio_write(gpio_5, 0); } bitVal = ((valor & 0b01000000) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_6, 1); } else { mraa_gpio_write(gpio_6, 0); } bitVal = ((valor & 0b10000000) != 0 ? 1 : 0); if(bitVal) { mraa_gpio_write(gpio_7, 1); } else { mraa_gpio_write(gpio_7, 0); } } void RunDAC(void) { if(functionMode==0) { SetPort(squL[state++]); if(state>=sizeof(squL)-1) state=0; } else if(functionMode==1) { SetPort(triL[state++]); if(state>=sizeof(triL)-1) state=0; } else if(functionMode==2) { SetPort(sinL[state++]); if(state>=sizeof(sinL)-1) state=0; } } int main() { float adc_value_float = 0.0; InitDevices(); state=0; dir=0; functionMode=0; counter=0; sleepFactor=0; doDAC=0; mraa_gpio_write(ledSquare, 1); mraa_gpio_write(ledTriang, 0); mraa_gpio_write(ledSine, 0); while(1) { counter++; doDAC++; if(counter>=5000) { adc_value_float = mraa_aio_read_float(adc_0); //fprintf(stdout, "ADC A0 => %.5f\r", adc_value_float); sleepFactor=(int)(adc_value_float*1500.0F); //fprintf(stdout, "Sleep Factor => %d \r", sleepFactor); if(mraa_gpio_read(butMode)) { while(mraa_gpio_read(butMode)); functionMode++; if(functionMode==3) functionMode=0; if(functionMode==0) { mraa_gpio_write(ledSquare, 1); mraa_gpio_write(ledTriang, 0); mraa_gpio_write(ledSine, 0); } else if(functionMode==1) { mraa_gpio_write(ledSquare, 0); mraa_gpio_write(ledTriang, 1); mraa_gpio_write(ledSine, 0); } else if(functionMode==2) { mraa_gpio_write(ledSquare, 0); mraa_gpio_write(ledTriang, 0); mraa_gpio_write(ledSine, 1); } } counter=0; } if(doDAC>=sleepFactor) { RunDAC(); doDAC=0; } } mraa_aio_close(adc_0); return(MRAA_SUCCESS); }