Sample program for lpc1768 with 8ch ADC and Library TRP105F_Spline.
Dependencies: mbed TRP105F_Spline
main.cpp
- Committer:
- aktk
- Date:
- 2020-10-21
- Revision:
- 2:3605c78c44b3
- Parent:
- 1:b53d82528534
File content as of revision 2:3605c78c44b3:
#include "mbed.h"
#include "TRP105F_Spline.h"
#include "TRP105FS_SPIWrapper.h"
Serial pc(USBTX, USBRX); // tx, rx ( the usb serial communication )
extern AnalogIn* g_Sensor_Voltage;
DigitalOut myled1(LED1),myled2(LED2);
Timer t;
TRP105FS TRP(5, AsDEBUG, p16);
SPI_TRP105FS sensor[8] = {
SPI_TRP105FS(0),
SPI_TRP105FS(1),
SPI_TRP105FS(2),
SPI_TRP105FS(3),
SPI_TRP105FS(4),
SPI_TRP105FS(5),
SPI_TRP105FS(6),
SPI_TRP105FS(7)
};
// A sensor Calibration
// 個別キャリブレーション
void calibrateSensor(unsigned int ch)//channel
{
char c;
printf("\nload save-data or calibration[l/c]>");
c = pc.getc();
if(c == 'l') {
printf("%c\n",c);
printf("Now loading...\n");
sensor[ch].loaddata();
printf("Done.\n");
} else {
printf("%c\n",c);
for(int i = 0; i < sensor[ch].getNsample(); i++) {
printf("press ENTER holding the distance at <%d>", i * 255 / 4);
do {
c = pc.getc();
} while (!( c == 0x0a || c == 0x0d ));
printf("\n");
sensor[ch].setSample(i * 255 / 4);
}
printf("Done.\n");
printf("Now Calibrating...\n");
sensor[ch].calibrate();
printf("Done.\n");
printf("Calibration Result being saved...\n");
sensor[ch].savedata();
printf("Done.\n");
}
}
// Multiple Sensors Calibration(Not Tested)
// 一斉キャリブレーション(動作未確認)
void calibrateSensor(unsigned int ch_first, unsigned int ch_end, unsigned int ch_teacher)
{
printf("Calibration at once");
unsigned int nsample = sensor[ch_teacher].getNsample();
unsigned short dst;
bool* bnsample = new bool[nsample];
bool flag = false;
unsigned int n_ui;
for (int i = 0; i < nsample; i++) bnsample[i] = false;
printf("Press keys at once...");
do {
dst = sensor[ch_teacher].getDistance();
for (unsigned int i = 0; i < nsample; i++) {
if(dst == i * 255 / (nsample - 1)) {
flag = true;
n_ui = i;
}
}
if(flag || (!bnsample[n_ui])) {
for(unsigned int ch = ch_first; ch < ch_end + 1; ch++) {
if(ch != ch_teacher)sensor[ch].setSample(dst);
}
bnsample[n_ui] = true;
}
for (unsigned int i = 0; i < nsample; i++) {
if(bnsample[i] == false) flag = false;
}
} while(!flag);
printf("Done.\n");
for (unsigned int ch = 0; ch < nsample; ch++) {
sensor[ch].calibrate();
sensor[ch].savedata();
}
delete[] bnsample;
}
//Main
int main()
{
// Setup the spi for 7 bit data, high steady state clock,
// second edge capture, with a 1MHz clock rate
sensor[0].spi.format(16,0);
sensor[0].spi.frequency(1000000);
calibrateSensor(0); //calibration sensor channel 0
//calibrateSensor(1); //calibration sensor channel 1
//calibrateSensor(1,2,0); //Multiple Calibration channel 1-2, sensor channel 0 is teacher.
myled1 = 1;
myled2 = 1;
unsigned short dst;
while(1) {
t.start();
dst = sensor[0].getDistance();
//dst = sensor[1].getDistance();
t.stop();
printf("dst:%d(%f s)\n",dst, t.read());
t.reset();
//printf("vol:%d\n",SPI_TPR105FS::ADread(0));
wait(0.1);
pc.putc('\n');
// if 'p' is pressed quit the loop
if(pc.readable())if(pc.getc() == 'q') break;
}
myled1 = myled2 = 0;
}