Potenciometro digital x9c103 con oled

Dependencies:   BluetoothSerial SeeedShieldBot mbed

Committer:
dany54543
Date:
Sat Nov 26 21:29:37 2022 +0000
Revision:
0:b2139d0d6c90
Potenciometro Digital x9c103 con pantalla oled

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dany54543 0:b2139d0d6c90 1 #include "mbed.h"
dany54543 0:b2139d0d6c90 2 #include "Adafruit_SSD1306.h"
dany54543 0:b2139d0d6c90 3 #include "Adafruit_GFX.h"
dany54543 0:b2139d0d6c90 4
dany54543 0:b2139d0d6c90 5 //Configuracion OLED
dany54543 0:b2139d0d6c90 6 class I2CPreInit : public I2C
dany54543 0:b2139d0d6c90 7 {
dany54543 0:b2139d0d6c90 8 public:
dany54543 0:b2139d0d6c90 9 I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
dany54543 0:b2139d0d6c90 10 {
dany54543 0:b2139d0d6c90 11 frequency(100000);
dany54543 0:b2139d0d6c90 12 start();
dany54543 0:b2139d0d6c90 13 };
dany54543 0:b2139d0d6c90 14 };
dany54543 0:b2139d0d6c90 15 I2C gI2C(PB_9,PB_8);
dany54543 0:b2139d0d6c90 16 //I2C i2c(PB_9, PB_8);
dany54543 0:b2139d0d6c90 17 Adafruit_SSD1306_I2c Oled(gI2C,D2);
dany54543 0:b2139d0d6c90 18 //
dany54543 0:b2139d0d6c90 19
dany54543 0:b2139d0d6c90 20 int pct, PD=0;
dany54543 0:b2139d0d6c90 21
dany54543 0:b2139d0d6c90 22 AnalogIn pot(A0); //Potenciometro Analogo
dany54543 0:b2139d0d6c90 23
dany54543 0:b2139d0d6c90 24 DigitalOut CS(D1); //Pines del PD
dany54543 0:b2139d0d6c90 25 DigitalOut UD(D2);
dany54543 0:b2139d0d6c90 26 DigitalOut INC(D3);
dany54543 0:b2139d0d6c90 27
dany54543 0:b2139d0d6c90 28 Thread hilo_cero;
dany54543 0:b2139d0d6c90 29 Thread hilo_mover;
dany54543 0:b2139d0d6c90 30 Thread hilo_porcentaje;
dany54543 0:b2139d0d6c90 31
dany54543 0:b2139d0d6c90 32 void cero(void); //Llevar el PD a la posicion cero
dany54543 0:b2139d0d6c90 33 void mover(void); //Mover el PD, compara el valor actual y el nuevo valor
dany54543 0:b2139d0d6c90 34 int porcentaje(void); //Convierte el PA en un valor porcentual (0-100)
dany54543 0:b2139d0d6c90 35
dany54543 0:b2139d0d6c90 36 int main()
dany54543 0:b2139d0d6c90 37 {
dany54543 0:b2139d0d6c90 38 hilo_cero.start(cero);
dany54543 0:b2139d0d6c90 39 hilo_mover.start(mover);
dany54543 0:b2139d0d6c90 40 hilo_porcentaje.start(porcentaje);
dany54543 0:b2139d0d6c90 41
dany54543 0:b2139d0d6c90 42 Oled.begin();
dany54543 0:b2139d0d6c90 43 Oled.display();
dany54543 0:b2139d0d6c90 44 ThisThread::sleep_for(3000ms);
dany54543 0:b2139d0d6c90 45 Oled.clearDisplay();
dany54543 0:b2139d0d6c90 46 Oled.display();
dany54543 0:b2139d0d6c90 47
dany54543 0:b2139d0d6c90 48 cero();
dany54543 0:b2139d0d6c90 49 while (true) {
dany54543 0:b2139d0d6c90 50 pct = porcentaje();
dany54543 0:b2139d0d6c90 51 mover();
dany54543 0:b2139d0d6c90 52 ThisThread::sleep_for(198ms);
dany54543 0:b2139d0d6c90 53 PD=pct;
dany54543 0:b2139d0d6c90 54 Oled.setTextCursor(1, 1);
dany54543 0:b2139d0d6c90 55 Oled.setTextColor(1);
dany54543 0:b2139d0d6c90 56 Oled.setTextSize(1);
dany54543 0:b2139d0d6c90 57 Oled.printf("Valor del PD: %5u", PD);
dany54543 0:b2139d0d6c90 58 Oled.display();
dany54543 0:b2139d0d6c90 59 }
dany54543 0:b2139d0d6c90 60 }
dany54543 0:b2139d0d6c90 61
dany54543 0:b2139d0d6c90 62 void cero(void) { // Dejar en 0 el potenciometro
dany54543 0:b2139d0d6c90 63 CS = 1;
dany54543 0:b2139d0d6c90 64 INC = 1;
dany54543 0:b2139d0d6c90 65
dany54543 0:b2139d0d6c90 66 CS = 0;
dany54543 0:b2139d0d6c90 67 wait_us(1);
dany54543 0:b2139d0d6c90 68 UD = 0;
dany54543 0:b2139d0d6c90 69 for (int n=0; n<100; n++){
dany54543 0:b2139d0d6c90 70 INC = 0;
dany54543 0:b2139d0d6c90 71 wait_us (1);
dany54543 0:b2139d0d6c90 72 INC=1;
dany54543 0:b2139d0d6c90 73 wait_us (1);
dany54543 0:b2139d0d6c90 74
dany54543 0:b2139d0d6c90 75 }
dany54543 0:b2139d0d6c90 76
dany54543 0:b2139d0d6c90 77 INC = 1;
dany54543 0:b2139d0d6c90 78 wait_us (1);
dany54543 0:b2139d0d6c90 79 CS = 1;
dany54543 0:b2139d0d6c90 80 }
dany54543 0:b2139d0d6c90 81
dany54543 0:b2139d0d6c90 82 void mover(void) { //Valor del PA, Valor actual del PD y comparar
dany54543 0:b2139d0d6c90 83
dany54543 0:b2139d0d6c90 84 int d=0;
dany54543 0:b2139d0d6c90 85 if (pct>PD){
dany54543 0:b2139d0d6c90 86 d = pct-PD;
dany54543 0:b2139d0d6c90 87 UD = 1;
dany54543 0:b2139d0d6c90 88 CS = 0;
dany54543 0:b2139d0d6c90 89 wait_us (1);
dany54543 0:b2139d0d6c90 90 for (int o=0; o<d; o++){
dany54543 0:b2139d0d6c90 91 INC = 0;
dany54543 0:b2139d0d6c90 92 wait_us (1);
dany54543 0:b2139d0d6c90 93 INC=1;
dany54543 0:b2139d0d6c90 94 wait_us (1);
dany54543 0:b2139d0d6c90 95 }
dany54543 0:b2139d0d6c90 96 INC = 1;
dany54543 0:b2139d0d6c90 97 wait_us (1);
dany54543 0:b2139d0d6c90 98 CS = 1;
dany54543 0:b2139d0d6c90 99 }
dany54543 0:b2139d0d6c90 100
dany54543 0:b2139d0d6c90 101 if (pct<PD){
dany54543 0:b2139d0d6c90 102 d = PD-pct;
dany54543 0:b2139d0d6c90 103 UD = 0;
dany54543 0:b2139d0d6c90 104 CS = 0;
dany54543 0:b2139d0d6c90 105 wait_us (1);
dany54543 0:b2139d0d6c90 106 for (int o=0; o<d; o++){
dany54543 0:b2139d0d6c90 107 INC = 0;
dany54543 0:b2139d0d6c90 108 wait_us (1);
dany54543 0:b2139d0d6c90 109 INC=1;
dany54543 0:b2139d0d6c90 110 wait_us (1);
dany54543 0:b2139d0d6c90 111 }
dany54543 0:b2139d0d6c90 112 INC = 1;
dany54543 0:b2139d0d6c90 113 wait_us (1);
dany54543 0:b2139d0d6c90 114 CS = 1;
dany54543 0:b2139d0d6c90 115 }
dany54543 0:b2139d0d6c90 116
dany54543 0:b2139d0d6c90 117 Oled.setTextCursor(1, 40);
dany54543 0:b2139d0d6c90 118 Oled.setTextColor(1);
dany54543 0:b2139d0d6c90 119 Oled.setTextSize(1);
dany54543 0:b2139d0d6c90 120 Oled.printf("Pasos del PD: %u", d);
dany54543 0:b2139d0d6c90 121 Oled.display();
dany54543 0:b2139d0d6c90 122 }
dany54543 0:b2139d0d6c90 123
dany54543 0:b2139d0d6c90 124 int porcentaje(void){
dany54543 0:b2139d0d6c90 125 int p, v=0;
dany54543 0:b2139d0d6c90 126 v = pot*3.3;
dany54543 0:b2139d0d6c90 127 p = (v*100)/3.3;
dany54543 0:b2139d0d6c90 128 return p;
dany54543 0:b2139d0d6c90 129 }