mbed base board 2016 Check program check for SD card read&write (3 switches, 6 leds, I2C LCD, SD card)

Dependencies:   SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by mbed official

Committer:
tamaki
Date:
Wed Oct 26 08:13:51 2016 +0000
Revision:
2:0ee1c0236a11
Parent:
1:a41c274f95e2
mbed base board 2016 Check program check for SD card read&write (3 switches, 6 leds, I2C LCD, SD card)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamaki 2:0ee1c0236a11 1 #define CPP1 1
tamaki 2:0ee1c0236a11 2 #define C1 0
tamaki 1:a41c274f95e2 3
tamaki 1:a41c274f95e2 4 #if CPP1
tamaki 2:0ee1c0236a11 5 //SD card check program C++ version
mbed_official 0:bdbd3d6fc5d5 6 #include "mbed.h"
mbed_official 0:bdbd3d6fc5d5 7 #include "SDFileSystem.h"
tamaki 1:a41c274f95e2 8 #include "ACM1602NI.h"
tamaki 1:a41c274f95e2 9 DigitalOut led1(p21);
tamaki 1:a41c274f95e2 10 DigitalOut led2(p22);
tamaki 1:a41c274f95e2 11 DigitalOut led3(p23);
tamaki 1:a41c274f95e2 12 DigitalOut led4(p24);
tamaki 1:a41c274f95e2 13 DigitalOut led5(p25);
tamaki 1:a41c274f95e2 14 DigitalOut led6(p26);
tamaki 1:a41c274f95e2 15 //DigitalIn sw1(p14);
tamaki 1:a41c274f95e2 16 //DigitalIn sw2(p15);
tamaki 1:a41c274f95e2 17 //DigitalIn sw3(p16);
tamaki 1:a41c274f95e2 18 AnalogIn vr(p17);
tamaki 1:a41c274f95e2 19
tamaki 1:a41c274f95e2 20 FILE *fp;
mbed_official 0:bdbd3d6fc5d5 21 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
tamaki 1:a41c274f95e2 22 ACM1602NI lcd(p28, p27); //sda scl
tamaki 1:a41c274f95e2 23
tamaki 1:a41c274f95e2 24 class cChkSw
tamaki 1:a41c274f95e2 25 {
tamaki 1:a41c274f95e2 26 public:
tamaki 1:a41c274f95e2 27 int st[3];
tamaki 1:a41c274f95e2 28 int counter[3];//past counter
tamaki 1:a41c274f95e2 29 cChkSw(PinName, PinName, PinName);
tamaki 1:a41c274f95e2 30 DigitalIn *sw1;
tamaki 1:a41c274f95e2 31 DigitalIn *sw2;
tamaki 1:a41c274f95e2 32 DigitalIn *sw3;
tamaki 1:a41c274f95e2 33 void init();
tamaki 1:a41c274f95e2 34 void chksw();
mbed_official 0:bdbd3d6fc5d5 35
tamaki 1:a41c274f95e2 36 protected:
tamaki 1:a41c274f95e2 37 };
tamaki 1:a41c274f95e2 38
tamaki 1:a41c274f95e2 39 void cChkSw::init()
tamaki 1:a41c274f95e2 40 {
tamaki 1:a41c274f95e2 41 }
tamaki 1:a41c274f95e2 42
tamaki 1:a41c274f95e2 43 cChkSw::cChkSw(PinName s1, PinName s2, PinName s3)
tamaki 1:a41c274f95e2 44 {
tamaki 2:0ee1c0236a11 45 //Create instance SW1,SW2,SW3
tamaki 1:a41c274f95e2 46 sw1 = new DigitalIn(s1);
tamaki 1:a41c274f95e2 47 sw2 = new DigitalIn(s2);
tamaki 1:a41c274f95e2 48 sw3 = new DigitalIn(s3);
tamaki 2:0ee1c0236a11 49 //All SW pin set Pull Up
tamaki 1:a41c274f95e2 50 sw1->mode(PullUp);
tamaki 1:a41c274f95e2 51 sw2->mode(PullUp);
tamaki 1:a41c274f95e2 52 sw3->mode(PullUp);
tamaki 1:a41c274f95e2 53 }
tamaki 1:a41c274f95e2 54
tamaki 1:a41c274f95e2 55 void cChkSw::chksw()
tamaki 1:a41c274f95e2 56 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 1:a41c274f95e2 57 {
tamaki 1:a41c274f95e2 58 static int ssw[3], psw[3], cnt[3], tcnt[3];
tamaki 1:a41c274f95e2 59 int i;
tamaki 1:a41c274f95e2 60 psw[0] = sw1->read();
tamaki 1:a41c274f95e2 61 psw[1] = sw2->read();
tamaki 1:a41c274f95e2 62 psw[2] = sw3->read();
tamaki 1:a41c274f95e2 63 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 1:a41c274f95e2 64 for(i = 0; i < 3; i++){
tamaki 1:a41c274f95e2 65 if((ssw[i] == 0)&&(psw[i] == 0)){
tamaki 1:a41c274f95e2 66 st[i] = 2;//on
tamaki 1:a41c274f95e2 67 tcnt[i] ++;
tamaki 1:a41c274f95e2 68 counter[i] = tcnt[i];
tamaki 1:a41c274f95e2 69 }
tamaki 1:a41c274f95e2 70 if((ssw[i] == 0)&&(psw[i] == 1)){
tamaki 1:a41c274f95e2 71 st[i] = 3;//negEdge
tamaki 1:a41c274f95e2 72 cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 73 tcnt[i] = 0;
tamaki 1:a41c274f95e2 74 counter[i] = tcnt[i];
tamaki 1:a41c274f95e2 75 }
tamaki 1:a41c274f95e2 76 if((ssw[i] == 1)&&(psw[i] == 1)){
tamaki 1:a41c274f95e2 77 st[i] = 0;//off
tamaki 1:a41c274f95e2 78 tcnt[i] ++;
tamaki 1:a41c274f95e2 79 }
tamaki 1:a41c274f95e2 80 if((ssw[i] == 1)&&(psw[i] == 0)){
tamaki 1:a41c274f95e2 81 st[i] = 1;//posEdge
tamaki 1:a41c274f95e2 82 cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 83 tcnt[i] = 0;
tamaki 1:a41c274f95e2 84 counter[i] = tcnt[i];
tamaki 1:a41c274f95e2 85 }
tamaki 1:a41c274f95e2 86 ssw[i] = psw[i];
tamaki 1:a41c274f95e2 87 }
tamaki 1:a41c274f95e2 88 }
tamaki 1:a41c274f95e2 89
tamaki 1:a41c274f95e2 90 int main() {
tamaki 1:a41c274f95e2 91 char str[80];
tamaki 1:a41c274f95e2 92
tamaki 1:a41c274f95e2 93 lcd.cls();
tamaki 1:a41c274f95e2 94 lcd.locate(0,0);
tamaki 1:a41c274f95e2 95 lcd.printf("SD Card chkpgm");
tamaki 1:a41c274f95e2 96 lcd.locate(0,1);
tamaki 1:a41c274f95e2 97
tamaki 1:a41c274f95e2 98 // mkdir("/sd/mydir", 0777);
tamaki 1:a41c274f95e2 99 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 100 int counter = 0;
tamaki 1:a41c274f95e2 101
tamaki 1:a41c274f95e2 102 cChkSw cs(p14,p15,p16);
tamaki 1:a41c274f95e2 103 while(1){
tamaki 1:a41c274f95e2 104 cs.chksw();
tamaki 1:a41c274f95e2 105 led6 = 1;
tamaki 1:a41c274f95e2 106
tamaki 1:a41c274f95e2 107 if(cs.st[0] == 1){
tamaki 1:a41c274f95e2 108 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 109 led4 = 1;
tamaki 1:a41c274f95e2 110 counter++;
tamaki 1:a41c274f95e2 111 FILE *fp = fopen("/sd/sdtest.txt", "w");
tamaki 1:a41c274f95e2 112 if(fp == NULL) {
tamaki 1:a41c274f95e2 113 error("Could not open file for write\n");
tamaki 1:a41c274f95e2 114 led2 = 1;
tamaki 1:a41c274f95e2 115 }else{
tamaki 1:a41c274f95e2 116 fprintf(fp, "SDcard#%d\n", counter);
tamaki 1:a41c274f95e2 117 fclose(fp);
tamaki 1:a41c274f95e2 118 lcd.locate(0,1);
tamaki 1:a41c274f95e2 119 lcd.printf(" ");
tamaki 1:a41c274f95e2 120 lcd.locate(0,1);
tamaki 1:a41c274f95e2 121 lcd.printf("counter = %d", counter);
tamaki 1:a41c274f95e2 122 led1 = 1;
tamaki 1:a41c274f95e2 123 }
tamaki 1:a41c274f95e2 124 }
tamaki 1:a41c274f95e2 125 if(cs.st[1] == 1){
tamaki 1:a41c274f95e2 126 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 127 led5 = 1;
tamaki 1:a41c274f95e2 128 fp = fopen("/sd/sdtest.txt", "r");
tamaki 1:a41c274f95e2 129 if(fp == NULL) {
tamaki 1:a41c274f95e2 130 error("Could not open file for write\n\r");
tamaki 1:a41c274f95e2 131 led2 = 1;
tamaki 1:a41c274f95e2 132 }else{
tamaki 1:a41c274f95e2 133 fscanf(fp, "%s\n", str);//read from SD card
tamaki 1:a41c274f95e2 134 lcd.locate(0,1);
tamaki 1:a41c274f95e2 135 lcd.printf(" ");//output string to LCD
tamaki 1:a41c274f95e2 136 lcd.locate(0,1);
tamaki 1:a41c274f95e2 137 lcd.printf("text = %s", str);//output string to USB serial
tamaki 1:a41c274f95e2 138 fclose(fp);
tamaki 1:a41c274f95e2 139 led1 = 1;
tamaki 1:a41c274f95e2 140 }
tamaki 1:a41c274f95e2 141 }
tamaki 1:a41c274f95e2 142 if(cs.st[2] == 1){
tamaki 1:a41c274f95e2 143 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 144 led6 = 1;
tamaki 1:a41c274f95e2 145 counter = 0;
tamaki 1:a41c274f95e2 146 lcd.locate(0,1);
tamaki 1:a41c274f95e2 147 lcd.printf(" ");
tamaki 1:a41c274f95e2 148 }
mbed_official 0:bdbd3d6fc5d5 149 }
tamaki 1:a41c274f95e2 150 }
tamaki 1:a41c274f95e2 151 #endif
tamaki 1:a41c274f95e2 152
tamaki 1:a41c274f95e2 153 #if C1
tamaki 2:0ee1c0236a11 154 //SD card check program C version
tamaki 1:a41c274f95e2 155 //
tamaki 1:a41c274f95e2 156 //
tamaki 1:a41c274f95e2 157 //
tamaki 1:a41c274f95e2 158 #include "mbed.h"
tamaki 1:a41c274f95e2 159 #include "SDFileSystem.h"
tamaki 1:a41c274f95e2 160 #include "ACM1602NI.h"
tamaki 1:a41c274f95e2 161
tamaki 1:a41c274f95e2 162 DigitalOut led1(p21);
tamaki 1:a41c274f95e2 163 DigitalOut led2(p22);
tamaki 1:a41c274f95e2 164 DigitalOut led3(p23);
tamaki 1:a41c274f95e2 165 DigitalOut led4(p24);
tamaki 1:a41c274f95e2 166 DigitalOut led5(p25);
tamaki 1:a41c274f95e2 167 DigitalOut led6(p26);
tamaki 2:0ee1c0236a11 168 //Create instance SW1,SW2,SW3
tamaki 1:a41c274f95e2 169 DigitalIn sw1(p14);
tamaki 1:a41c274f95e2 170 DigitalIn sw2(p15);
tamaki 1:a41c274f95e2 171 DigitalIn sw3(p16);
tamaki 1:a41c274f95e2 172 AnalogIn vr(p17);
tamaki 1:a41c274f95e2 173
tamaki 1:a41c274f95e2 174 FILE *fp;
tamaki 1:a41c274f95e2 175 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
tamaki 1:a41c274f95e2 176 ACM1602NI lcd(p28, p27); //sda scl
tamaki 1:a41c274f95e2 177
tamaki 1:a41c274f95e2 178 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 1:a41c274f95e2 179 int sw_st[3];
tamaki 1:a41c274f95e2 180 int sw_cnt[3];//past counter
tamaki 1:a41c274f95e2 181
tamaki 1:a41c274f95e2 182 void chksw(void)
tamaki 1:a41c274f95e2 183 {
tamaki 1:a41c274f95e2 184 static int ssw[3], psw[3], cnt[3], tcnt[3];
tamaki 1:a41c274f95e2 185 int i;
tamaki 1:a41c274f95e2 186 psw[0] = sw1;
tamaki 1:a41c274f95e2 187 psw[1] = sw2;
tamaki 1:a41c274f95e2 188 psw[2] = sw3;
tamaki 1:a41c274f95e2 189 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 1:a41c274f95e2 190 for(i = 0; i < 3; i++){
tamaki 1:a41c274f95e2 191 if((ssw[i] == 0)&&(psw[i] == 0)){
tamaki 1:a41c274f95e2 192 sw_st[i] = 2;//on
tamaki 1:a41c274f95e2 193 tcnt[i] ++;
tamaki 1:a41c274f95e2 194 sw_cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 195 }
tamaki 1:a41c274f95e2 196 if((ssw[i] == 0)&&(psw[i] == 1)){
tamaki 1:a41c274f95e2 197 sw_st[i] = 3;//negEdge
tamaki 1:a41c274f95e2 198 cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 199 tcnt[i] = 0;
tamaki 1:a41c274f95e2 200 sw_cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 201 }
tamaki 1:a41c274f95e2 202 if((ssw[i] == 1)&&(psw[i] == 1)){
tamaki 1:a41c274f95e2 203 sw_st[i] = 0;//off
tamaki 1:a41c274f95e2 204 tcnt[i] ++;
tamaki 1:a41c274f95e2 205 }
tamaki 1:a41c274f95e2 206 if((ssw[i] == 1)&&(psw[i] == 0)){
tamaki 1:a41c274f95e2 207 sw_st[i] = 1;//posEdge
tamaki 1:a41c274f95e2 208 cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 209 tcnt[i] = 0;
tamaki 1:a41c274f95e2 210 sw_cnt[i] = tcnt[i];
tamaki 1:a41c274f95e2 211 }
tamaki 1:a41c274f95e2 212 ssw[i] = psw[i];
tamaki 1:a41c274f95e2 213 }
tamaki 1:a41c274f95e2 214 }
tamaki 1:a41c274f95e2 215
tamaki 1:a41c274f95e2 216 int main() {
tamaki 1:a41c274f95e2 217 char str[80];
tamaki 2:0ee1c0236a11 218
tamaki 2:0ee1c0236a11 219 //All SW pin set Pull Up
tamaki 2:0ee1c0236a11 220 sw1.mode(PullUp);
tamaki 2:0ee1c0236a11 221 sw2.mode(PullUp);
tamaki 2:0ee1c0236a11 222 sw3.mode(PullUp);
tamaki 2:0ee1c0236a11 223
tamaki 1:a41c274f95e2 224 lcd.cls();
tamaki 1:a41c274f95e2 225 lcd.locate(0,0);
tamaki 1:a41c274f95e2 226 lcd.printf("SD Card chkpgm");
tamaki 1:a41c274f95e2 227 lcd.locate(0,1);
mbed_official 0:bdbd3d6fc5d5 228
tamaki 1:a41c274f95e2 229 // mkdir("/sd/mydir", 0777);
tamaki 1:a41c274f95e2 230 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 231 int counter = 0;
tamaki 1:a41c274f95e2 232
tamaki 1:a41c274f95e2 233 while(1){
tamaki 1:a41c274f95e2 234 chksw();
tamaki 1:a41c274f95e2 235 led6 = 1;
tamaki 1:a41c274f95e2 236 if(sw_st[0] == 1){
tamaki 1:a41c274f95e2 237 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 238 led4 = 1;
tamaki 1:a41c274f95e2 239 counter++;
tamaki 1:a41c274f95e2 240 FILE *fp = fopen("/sd/sdtest.txt", "w");
tamaki 1:a41c274f95e2 241 if(fp == NULL) {
tamaki 1:a41c274f95e2 242 error("Could not open file for write\n");
tamaki 1:a41c274f95e2 243 led2 = 1;
tamaki 1:a41c274f95e2 244 }else{
tamaki 1:a41c274f95e2 245 fprintf(fp, "SDcard#%d\n", counter);
tamaki 1:a41c274f95e2 246 fclose(fp);
tamaki 1:a41c274f95e2 247 lcd.locate(0,1);
tamaki 1:a41c274f95e2 248 lcd.printf(" ");
tamaki 1:a41c274f95e2 249 lcd.locate(0,1);
tamaki 1:a41c274f95e2 250 lcd.printf("counter = %d", counter);
tamaki 1:a41c274f95e2 251 led1 = 1;
tamaki 1:a41c274f95e2 252 }
tamaki 1:a41c274f95e2 253 }
tamaki 1:a41c274f95e2 254 if(sw_st[1] == 1){
tamaki 1:a41c274f95e2 255 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 256 led5 = 1;
tamaki 1:a41c274f95e2 257 fp = fopen("/sd/sdtest.txt", "r");
tamaki 1:a41c274f95e2 258 if(fp == NULL) {
tamaki 1:a41c274f95e2 259 error("Could not open file for write\n\r");
tamaki 1:a41c274f95e2 260 led2 = 1;
tamaki 1:a41c274f95e2 261 }else{
tamaki 1:a41c274f95e2 262 fscanf(fp, "%s\n", str);//read from SD card
tamaki 1:a41c274f95e2 263 lcd.locate(0,1);
tamaki 1:a41c274f95e2 264 lcd.printf(" ");//output string to LCD
tamaki 1:a41c274f95e2 265 lcd.locate(0,1);
tamaki 1:a41c274f95e2 266 lcd.printf("text = %s", str);//output string to USB serial
tamaki 1:a41c274f95e2 267 fclose(fp);
tamaki 1:a41c274f95e2 268 led1 = 1;
tamaki 1:a41c274f95e2 269 }
tamaki 1:a41c274f95e2 270 }
tamaki 1:a41c274f95e2 271 if(sw_st[2] == 1){
tamaki 1:a41c274f95e2 272 led1=led2=led3=led4=led5=led6 = 0;
tamaki 1:a41c274f95e2 273 led6 = 1;
tamaki 1:a41c274f95e2 274 counter = 0;
tamaki 1:a41c274f95e2 275 lcd.locate(0,1);
tamaki 1:a41c274f95e2 276 lcd.printf(" ");
tamaki 1:a41c274f95e2 277 }
tamaki 1:a41c274f95e2 278 }
mbed_official 0:bdbd3d6fc5d5 279 }
tamaki 1:a41c274f95e2 280 #endif