/*================================================
* I2C Master メイン(with USB_lib&LCD_lib) main.c
*=============================================== */
#include "mcc_generated_files/mcc.h"
#include <stdio.h>
#include "USB_1459_CDC.h"
#include "i2cLCD_AQM0802A.h"
#define BFSIZE 32
#define SV1 0x18 // Slave I2C Devie Address
char NEWLINE[] = "\r\n";
static char rBuf[BFSIZE];
static char wBuf[BFSIZE];
int tmFlg;
uint16_t aVal;
void main(void)
{
SYSTEM_Initialize();
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
uint8_t swFlg = 0;
uint8_t adFlg = 0;
int num, i;
LCD_init();
char msg[] = "Hello!";
LCD_str(msg);
while(USBGetDeviceState() < CONFIGURED_STATE); //USB接続の準備ができるまで待つ
SendUSB_str(msg);
SendUSB_str(NEWLINE);
while (1) {
num = RecvUSB(rBuf, BFSIZE);
if(num > 0) {
for(i=0; i < num; i++){
switch (rBuf[i]){
case 0x0A:
case 0x0D:
wBuf[i] = 0x00;
break;
default:
wBuf[i] = rBuf[i];
break;
}
}
LCD_clr();
LCD_str(wBuf);
SendUSB_str("PIC> ");
SendUSB_str(wBuf);
SendUSB_str(NEWLINE);
if(( rBuf[0] & 0x01) == 0){
LED_SetLow();
I2C_Write1ByteRegister(SV1, 0, 'L'); //追加(スレーブSV1に'L'を送る)
}else{
LED_SetHigh();
I2C_Write1ByteRegister(SV1, 0, 'H'); //追加(スレーブSV1に'H'を送る)
}
}
if((SWC3_GetValue() == 0) & (swFlg == 0)){
swFlg = 1;
if(adFlg == 0){
sprintf(wBuf,"ADC Start");
SendUSB_str(wBuf);
SendUSB_str(NEWLINE);
adFlg = 1;
}else{
sprintf(wBuf,"ADC Hold");
SendUSB_str(wBuf);
SendUSB_str(NEWLINE);
adFlg = 0;
}
}else if((SWC3_GetValue() > 0) & (swFlg == 1)){
swFlg = 0;
}
// aVal = ADC_GetConversion(3); //マスターのADCは使わないのでコメントに
if((tmFlg > 0) && (adFlg > 0)){ //tmFlgとadFlgが1なら1秒ごとに以下を実行
I2C_ReadNBytes(SV1, &aVal, 2); //追加(スレーブからADCデータ取得)
sprintf(wBuf,"ADC:%4d",aVal);
LCD_cursor(0,1);
LCD_str(wBuf);
SendUSB_str(wBuf);
SendUSB_str(NEWLINE);
tmFlg = 0;
}
}
}
|