OLED_MISSION1

Dependencies:   mbed Adafruit_GFX

Committer:
leejieun
Date:
Sun May 08 09:36:18 2022 +0000
Revision:
0:be32e7347942
OLED_MISSION1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leejieun 0:be32e7347942 1 #include "mbed.h"
leejieun 0:be32e7347942 2 #include "Adafruit_SSD1306.h" // Adafruit_GFX library
leejieun 0:be32e7347942 3
leejieun 0:be32e7347942 4 #define NUM_CHAR 16
leejieun 0:be32e7347942 5
leejieun 0:be32e7347942 6 Serial pc(SERIAL_TX, SERIAL_RX);
leejieun 0:be32e7347942 7 DigitalOut greenLed(LED1);
leejieun 0:be32e7347942 8 DigitalOut redLed(PA_12);
leejieun 0:be32e7347942 9 AnalogOut myAnalogOut(PA_4);
leejieun 0:be32e7347942 10 AnalogIn lightSensor(PA_0);
leejieun 0:be32e7347942 11 Timer t1, t2;
leejieun 0:be32e7347942 12 Ticker t3, t4;
leejieun 0:be32e7347942 13 InterruptIn myButton(PC_13);
leejieun 0:be32e7347942 14 InterruptIn exButton(PC_11);
leejieun 0:be32e7347942 15
leejieun 0:be32e7347942 16 BusOut my7Seg(PA_8, PA_9, PA_10, PC_9, PC_8, PC_7, PC_6, PA_11); // 8bit data
leejieun 0:be32e7347942 17 // LSB, , MSB
leejieun 0:be32e7347942 18
leejieun 0:be32e7347942 19 char rxData[5];
leejieun 0:be32e7347942 20 bool flagRx = 0;
leejieun 0:be32e7347942 21 int dir = 1; // 1: increase, -1: decrease
leejieun 0:be32e7347942 22 bool flagT3 = 0;
leejieun 0:be32e7347942 23 bool modeT3 = 0; // 0: stop, 1: working
leejieun 0:be32e7347942 24
leejieun 0:be32e7347942 25 void ReceiveInt() {
leejieun 0:be32e7347942 26 char inChar;
leejieun 0:be32e7347942 27 static char rxCount = 0;
leejieun 0:be32e7347942 28 static char rxBuf[4];
leejieun 0:be32e7347942 29
leejieun 0:be32e7347942 30 while(1 == pc.readable()) {
leejieun 0:be32e7347942 31 inChar = pc.getc();
leejieun 0:be32e7347942 32 if ('<' == inChar){
leejieun 0:be32e7347942 33 rxCount = 1;
leejieun 0:be32e7347942 34 }
leejieun 0:be32e7347942 35 else if (rxCount > 0 && rxCount < 5) {
leejieun 0:be32e7347942 36 rxBuf[rxCount-1] = inChar;
leejieun 0:be32e7347942 37 rxCount++;
leejieun 0:be32e7347942 38 }
leejieun 0:be32e7347942 39 else if (5 == rxCount && '>' == inChar) {
leejieun 0:be32e7347942 40 rxCount = 0;
leejieun 0:be32e7347942 41 flagRx = 1;
leejieun 0:be32e7347942 42 memcpy(rxData, rxBuf, 4);
leejieun 0:be32e7347942 43 // pc.putc(rxData[0]);
leejieun 0:be32e7347942 44 // pc.putc(rxData[1]);
leejieun 0:be32e7347942 45 // pc.putc(rxData[2]);
leejieun 0:be32e7347942 46 // pc.putc(rxData[3]);
leejieun 0:be32e7347942 47
leejieun 0:be32e7347942 48 // pc.puts(rxData);
leejieun 0:be32e7347942 49 }
leejieun 0:be32e7347942 50 else {
leejieun 0:be32e7347942 51 rxCount = 0;
leejieun 0:be32e7347942 52 }
leejieun 0:be32e7347942 53 }
leejieun 0:be32e7347942 54 }
leejieun 0:be32e7347942 55
leejieun 0:be32e7347942 56 void tickerFunc3() {
leejieun 0:be32e7347942 57 flagT3 = 1;
leejieun 0:be32e7347942 58 }
leejieun 0:be32e7347942 59
leejieun 0:be32e7347942 60 void Btn1Down() {
leejieun 0:be32e7347942 61 // pc.puts("1 pushed\n"); // for debugging
leejieun 0:be32e7347942 62 dir = -1*dir;
leejieun 0:be32e7347942 63 }
leejieun 0:be32e7347942 64
leejieun 0:be32e7347942 65 void Btn1Up() {
leejieun 0:be32e7347942 66 // pc.puts("1 released\n"); // for debugging
leejieun 0:be32e7347942 67 greenLed = !greenLed;
leejieun 0:be32e7347942 68 }
leejieun 0:be32e7347942 69
leejieun 0:be32e7347942 70 void Btn2Down() {
leejieun 0:be32e7347942 71 // pc.puts("2 pushed\n"); // for debugging
leejieun 0:be32e7347942 72 if (1 == modeT3) t3.detach();
leejieun 0:be32e7347942 73 else t3.attach(tickerFunc3, 0.1);
leejieun 0:be32e7347942 74 modeT3 = !modeT3;
leejieun 0:be32e7347942 75 }
leejieun 0:be32e7347942 76
leejieun 0:be32e7347942 77 void Btn2Up() {
leejieun 0:be32e7347942 78 // pc.puts("2 released\n"); // for debugging
leejieun 0:be32e7347942 79 redLed = !redLed;
leejieun 0:be32e7347942 80 }
leejieun 0:be32e7347942 81
leejieun 0:be32e7347942 82
leejieun 0:be32e7347942 83 //
leejieun 0:be32e7347942 84 int main()
leejieun 0:be32e7347942 85 {
leejieun 0:be32e7347942 86 pc.baud(115200);
leejieun 0:be32e7347942 87 pc.puts("\nStart!\n");
leejieun 0:be32e7347942 88
leejieun 0:be32e7347942 89 myButton.disable_irq(); // to avoid unexpected interrupt
leejieun 0:be32e7347942 90 exButton.disable_irq(); // to avoid unexpected interrupt
leejieun 0:be32e7347942 91
leejieun 0:be32e7347942 92 pc.attach(&ReceiveInt, Serial::RxIrq); // RxIrq, TxIrq
leejieun 0:be32e7347942 93 myButton.fall(&Btn1Down);
leejieun 0:be32e7347942 94 myButton.rise(&Btn1Up);
leejieun 0:be32e7347942 95 exButton.fall(&Btn2Down);
leejieun 0:be32e7347942 96 exButton.rise(&Btn2Up);
leejieun 0:be32e7347942 97
leejieun 0:be32e7347942 98 I2C I2C_Oled(PB_7, PA_15); // SDA, SCL
leejieun 0:be32e7347942 99 I2C_Oled.frequency(400000); // 400kHz clock
leejieun 0:be32e7347942 100 Adafruit_SSD1306_I2c myOled(I2C_Oled, PD_2, 0x78, 64, 128); // reset pin doesn't effect
leejieun 0:be32e7347942 101
leejieun 0:be32e7347942 102 myOled.splash(); // logo output
leejieun 0:be32e7347942 103 myOled.display();
leejieun 0:be32e7347942 104 wait(0.5);
leejieun 0:be32e7347942 105
leejieun 0:be32e7347942 106 myOled.clearDisplay(); // clear buffer
leejieun 0:be32e7347942 107 myOled.printf("%u x %u OLED Display\r\n", myOled.width(), myOled.height());
leejieun 0:be32e7347942 108 myOled.display(); // show a image on the OLED
leejieun 0:be32e7347942 109 wait(1);
leejieun 0:be32e7347942 110
leejieun 0:be32e7347942 111 myButton.enable_irq(); // enable IRQ
leejieun 0:be32e7347942 112 exButton.enable_irq(); // enable IRQ
leejieun 0:be32e7347942 113
leejieun 0:be32e7347942 114 t3.attach(&tickerFunc3, 0.1); // ticker3 start
leejieun 0:be32e7347942 115
leejieun 0:be32e7347942 116 time_t seconds = time(NULL);
leejieun 0:be32e7347942 117
leejieun 0:be32e7347942 118 set_time(1651121217); // Set RTC time to 2022-4월-28, PM 1:46:57
leejieun 0:be32e7347942 119 pc.printf("Time as a basic string = %s", ctime(&seconds));
leejieun 0:be32e7347942 120
leejieun 0:be32e7347942 121 char buffer[32];
leejieun 0:be32e7347942 122 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
leejieun 0:be32e7347942 123 pc.printf("1) Time as a custom formatted string = %s", buffer);
leejieun 0:be32e7347942 124 strftime(buffer, 32, "%y-%m-%d, %H:%M:%S\n", localtime(&seconds));
leejieun 0:be32e7347942 125 pc.printf("2) Time as a custom formatted string = %s", buffer);
leejieun 0:be32e7347942 126
leejieun 0:be32e7347942 127 char tmpCommand[3];
leejieun 0:be32e7347942 128 int rxVal;
leejieun 0:be32e7347942 129 char val7Seg[NUM_CHAR] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
leejieun 0:be32e7347942 130
leejieun 0:be32e7347942 131 modeT3 = 1;
leejieun 0:be32e7347942 132 my7Seg = 0xFF;
leejieun 0:be32e7347942 133
leejieun 0:be32e7347942 134 uint16_t n = 0;
leejieun 0:be32e7347942 135
leejieun 0:be32e7347942 136 while(1)
leejieun 0:be32e7347942 137 {
leejieun 0:be32e7347942 138 //if (1 == flagT3) {
leejieun 0:be32e7347942 139 //flagT3 = 0;
leejieun 0:be32e7347942 140 //n = n + dir;
leejieun 0:be32e7347942 141 //myOled.clearDisplay();
leejieun 0:be32e7347942 142 //myOled.setTextCursor(1, 5);
leejieun 0:be32e7347942 143 //myOled.printf("%S",buffer);
leejieun 0:be32e7347942 144 //myOled.display();
leejieun 0:be32e7347942 145 //my7Seg = ~val7Seg[n%16] & 0x7F;
leejieun 0:be32e7347942 146 //}
leejieun 0:be32e7347942 147
leejieun 0:be32e7347942 148 if (1 == flagRx){
leejieun 0:be32e7347942 149 flagRx = 0;
leejieun 0:be32e7347942 150 tmpCommand[0] = rxData[0];
leejieun 0:be32e7347942 151 tmpCommand[1] = rxData[1];
leejieun 0:be32e7347942 152 tmpCommand[2] = 0;
leejieun 0:be32e7347942 153 rxVal = atoi(rxData+2);
leejieun 0:be32e7347942 154
leejieun 0:be32e7347942 155 if (0 == strcmp(tmpCommand, "LD")) { // control a LED
leejieun 0:be32e7347942 156 pc.printf("val = %d\n", rxVal);
leejieun 0:be32e7347942 157
leejieun 0:be32e7347942 158 greenLed = (1 == rxVal)? 1:0;
leejieun 0:be32e7347942 159 // greenLed = rxVal? 1:0;
leejieun 0:be32e7347942 160 }
leejieun 0:be32e7347942 161 if (0 == strcmp(tmpCommand, "RE")) { // reset all variables
leejieun 0:be32e7347942 162 greenLed = 0;
leejieun 0:be32e7347942 163 redLed = 1;
leejieun 0:be32e7347942 164 n = 0;
leejieun 0:be32e7347942 165 }
leejieun 0:be32e7347942 166 //greenLed = !greenLed;
leejieun 0:be32e7347942 167 //time_t seconds = time(NULL);
leejieun 0:be32e7347942 168
leejieun 0:be32e7347942 169 //pc.printf("\nTime as seconds since Janurary 1, 1970 = %u\n", (unsigned int)seconds);
leejieun 0:be32e7347942 170
leejieun 0:be32e7347942 171 //pc.printf("Time as a basic string = %s" , ctime(&seconds));
leejieun 0:be32e7347942 172
leejieun 0:be32e7347942 173
leejieun 0:be32e7347942 174
leejieun 0:be32e7347942 175 }
leejieun 0:be32e7347942 176
leejieun 0:be32e7347942 177 greenLed = !greenLed;
leejieun 0:be32e7347942 178 time_t seconds = time(NULL);
leejieun 0:be32e7347942 179
leejieun 0:be32e7347942 180 pc.printf("\nTime as seconds since Janurary 1, 1970 = %u\n", (unsigned int)seconds);
leejieun 0:be32e7347942 181
leejieun 0:be32e7347942 182 pc.printf("Time as a basic string = %s" , ctime(&seconds));
leejieun 0:be32e7347942 183
leejieun 0:be32e7347942 184 char buffer[32];
leejieun 0:be32e7347942 185 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
leejieun 0:be32e7347942 186 pc.printf("1) Time as custom formatted string = %s", buffer);
leejieun 0:be32e7347942 187 strftime(buffer, 32, "%y-%m-%d, %H:%M:%S\n", localtime(&seconds));
leejieun 0:be32e7347942 188 pc.printf("2) Time as a custom formatted string = %s", buffer);
leejieun 0:be32e7347942 189 if (1 == flagT3) {
leejieun 0:be32e7347942 190 flagT3 = 0;
leejieun 0:be32e7347942 191 n = n + dir;
leejieun 0:be32e7347942 192 myOled.clearDisplay();
leejieun 0:be32e7347942 193 myOled.setTextCursor(1, 5);
leejieun 0:be32e7347942 194 myOled.printf("%S",buffer);
leejieun 0:be32e7347942 195 myOled.display();
leejieun 0:be32e7347942 196 my7Seg = ~val7Seg[n%16] & 0x7F;
leejieun 0:be32e7347942 197 }
leejieun 0:be32e7347942 198 wait(1);
leejieun 0:be32e7347942 199 }
leejieun 0:be32e7347942 200
leejieun 0:be32e7347942 201 }