HalCa-2 diag test program

Dependencies:   SDFileSystem mbed

main.cpp

Committer:
yone2
Date:
2015-08-05
Revision:
0:86eefbc31367

File content as of revision 0:86eefbc31367:

#include "mbed.h"
#include "string"
#include "SDFileSystem.h"
 
DigitalOut blue_led(P0_20);
DigitalOut white_led(P0_23);

SDFileSystem sd(P0_9, P0_8, P0_10, P0_15, "sd"); // mosi, miso, sclk, cs

InterruptIn in1(P0_19); //for mbed, p8 GPIO
InterruptIn in2(P0_18); //for mbed, p8 GPIO
Timer t1;
Timer t_real;

I2C i2c(P0_5, P0_4); // sda, scl

//float t_period = 0;                   // This is the period between interrupts in microseconds
//float t_freq = 0;
//float t_freq_k = 0;
//float moi = 0;
int cnt=0;
float f_cnt=0;
char str1[17];
char str2[17];

float t = 0;

//I2C i2c(P0_10, P0_11);
const int AQCM0802_addr = 0x7C;

// unsigned char mode;
unsigned char contrast = 0; // 0-63
//unsigned char contrastFlag = false;
// int CGcounter;
// int FADEcounter;

void lcd_cmd(char x) {
  char data[2];
  data[0] = 0x00; // CO = 0,RS = 0
  data[1] = x;
  i2c.write(AQCM0802_addr, data, 2);
}
 
void lcd_contdata(char x) {
  char data[2];
  data[0] = 0xC0; //0b11000000 CO = 1, RS = 1
  data[1] = x;
  i2c.write(AQCM0802_addr, data, 2);
}
 
void lcd_lastdata(char x) {
  char data[2];
  data[0] = 0x40; //0b11000000 CO = 0, RS = 1
  data[1] = x;
  i2c.write(AQCM0802_addr, data, 2);
}
 
void lcd_printStr(const char *s) {
  while(*s) {
    if(*(s + 1)) {
      lcd_contdata(*s);
    } else {
      lcd_lastdata(*s);
    }
    s++;
  }
}
 
void lcd_printHex(unsigned char num) {
  lcd_contdata(num);
}
 
void lcd_init() {
  wait(0.04);
  // LCD initialize
  lcd_cmd(0x38); // function set
  lcd_cmd(0x39); // function set
  lcd_cmd(0x04); // EntryModeSet
  lcd_cmd(0x14); // interval osc
  lcd_cmd(0x70 | (contrast & 0xF)); // contrast Low
  lcd_cmd(0x5C | ((contrast >> 4) & 0x3)); // contast High/icon/power
  lcd_cmd(0x6C); // follower control
  wait(0.2);
  lcd_cmd(0x38); // function set
  lcd_cmd(0x0C); // Display On
  lcd_cmd(0x01); // Clear Display
  wait(0.2); // need additional wait to Clear Display
}
 
void lcd_setCursor(unsigned char x,unsigned char y) {
  lcd_cmd(0x80 | (y * 0x40 + x));
}
 
void setContrast(unsigned char c) {
  lcd_cmd(0x39);
  lcd_cmd(0x70 | (c & 0x0f)); // contrast Low
  lcd_cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power
  lcd_cmd(0x38);
}
 
void flip1(){
        lcd_setCursor(0, 1);
        lcd_printStr("sw1");
        white_led=1;
        wait(0.5);
        lcd_setCursor(0, 1);
        lcd_printStr("   ");
}

void flip2(){
        lcd_setCursor(4, 1);
        lcd_printStr("sw2");
        white_led=0;
        wait(0.5);
        lcd_setCursor(4, 1);
        lcd_printStr("   ");
}

int main() {
    white_led = 1;
    
    // LCD init
    lcd_init();
    contrast = 35;
    setContrast(contrast);
    lcd_printStr("...");
    
    // Timer start
    t1.start();
    t_real.start();
    
    // Interuupt start
    in1.mode(PullUp);  // Set the pin to Pull Down mode.
    in1.fall(&flip1);    // Set up the interrupt for rising edge
    
    in2.mode(PullUp);  // Set the pin to Pull Down mode.
    in2.fall(&flip2);    // Set up the interrupt for rising edge
 
    white_led=0;
    
    // SD init
    lcd_setCursor(0, 0);
    lcd_printStr("SD:");
    FILE *fp = fopen("/sd/TEST.txt", "w");
    fprintf(fp, "second, time\r\n");
    fclose(fp);
    lcd_printStr("OK");


    while(1) {
        blue_led = 1;
        wait(1);
        blue_led = 0;
        wait(1);
    }
}