Created
August 18, 2020 14:00
-
-
Save dj1711572002/693a00100aa261796675037c766bc4b6 to your computer and use it in GitHub Desktop.
SCP_Dummy5 M5Atomlite AD7194_6CH
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//AD7194 M5Atom SPI test | |
//2020.08.16 Shinshu-Makers | |
#include <M5StickC.h> | |
#include <SPI.h> | |
#include <esp_now.h> | |
#include <WiFi.h> | |
int i=0,j=0,k=0; | |
int MA=10; | |
int mtime=0; | |
volatile int stime=0,rt2=0,drt2=0; | |
uint8_t data0,data1,data2; | |
uint8_t recvdata; | |
uint8_t mdata0,mdata1,mdata2; | |
uint8_t condata0,condata1,condata2; | |
uint8_t stdata0,stdata1,stdata2,stdata3; | |
uint8_t sdata; | |
//float mV0,mV1,mV2,mV3; | |
//==========data Movng Average parameters =================== | |
double mV0arry[500]; | |
double mV1arry[500]; | |
double mV2arry[500]; | |
double mV3arry[500]; | |
double mV4arry[500]; | |
double mV53arry[500]; | |
//double mV3arry[100]; | |
double mV0sum,mV1sum,mV2sum,mV3sum,mV4sum,mV5sum; | |
double mV0ave,mV1ave,mV2ave,mV3ave,mV4ave,mV5ave; | |
double mV0,mV1,mV2,mV3,mV4,mV5; | |
double mVA[6]; | |
//***************************************************************** | |
//============================================================================================ | |
//=========================ESP-NOW Functions================================================== | |
//==============slave:PC master:SCP,AD7194================================================================= | |
// マルチキャスト用 MAC登録 | |
// PC M5ATOM COM7=D8:A0:1D:50:54:E8 | |
// SCP 1ch M5Stick COM13=D8:A0:1D:58:56:CC | |
// AD7194 M5ATOM COM9=24:0A:C4:A5:30:DC | |
volatile int comst=0; | |
volatile int comtr=0; | |
esp_now_peer_info_t slave; //slave peer定義 | |
uint8_t data[28];//12byte 4*value0,value1,value2,value3 //送信データ配列 | |
// 送信コールバック | |
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { | |
char macStr[18]; | |
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", | |
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); | |
//Serial.print("Last Packet Sent to: "); | |
//Serial.println(macStr); | |
//Serial.print("Last Packet Send Status: "); | |
//Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail"); | |
} | |
// 受信コールバック | |
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) { | |
char macStr[18]; | |
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", | |
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); | |
if (data[0] == 0x73 && data[1] == 0x74) //when data="st" data_sending_STart | |
{ | |
comst=1; | |
stime=data[3]|data[4]<<8|data[5]<<16|data[6]<<24; //Left Shift OR | |
rt2=millis(); | |
//Serial.print("stRcv="); | |
// Serial.println(millis()); | |
} | |
if (data[0] == 0x54 && data[1] == 0x52) //when data="tr" TareReset | |
{ | |
comtr=1; | |
Serial.println("tr"); | |
} | |
// Serial.print( macStr); | |
//Serial.print(","); | |
//Serial.print(data_len); | |
// for ( int i = 0 ; i < data_len ; i++ ) { | |
// Serial.print(data[i]); | |
// Serial.print(" "); | |
// } | |
//Serial.println(""); | |
} | |
//+++++++++++++++i_to_char+++++++++++++++++ | |
// i=IntegerValueData,*d=Array pointer, n=Array start No | |
void i_to_char(int i, uint8_t *d, int n) | |
{ | |
d[n] = i & 0x000000ff; | |
d[n + 1] = (i & 0x0000ff00) >> 8; | |
d[n + 2] = (i & 0x00ff0000) >> 16; | |
d[n + 3] = (i & 0xff000000) >> 24; | |
} | |
//++++++++++++++++++++++++++++++++++++++++++ | |
//=========================================================================================== | |
//=========================================================================================== | |
//=========================================================================================== | |
//**************************************************************** | |
//========================================================================= | |
//====================AD7194 CH change===================================== | |
//========================================================================= | |
void ch_Change(int ch){ | |
char chN; | |
switch (ch){ | |
case 0: | |
chN=0x01; | |
break; | |
case 1: | |
chN=0x23; | |
break; | |
case 2: | |
chN=0x45; | |
break; | |
case 3: | |
chN=0x67; | |
break; | |
case 4: | |
chN=0x89; | |
break; | |
case 5: | |
chN=0xAB; | |
break; | |
} | |
//設定レジスタへ設定データ書き込み | |
recvdata= SPI.transfer(0x10);//設定レジスタ書き込み指定 | |
recvdata= SPI.transfer(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま | |
recvdata= SPI.transfer(chN) ;//設定レジスタ15-8bit書き込み=1CH設定 AIN1+ AIN1-(=AIN2) | |
recvdata= SPI.transfer(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128 | |
//Config書き込み確認 | |
recvdata= SPI.transfer(0x50);//Configレジスタ書き込み指定 | |
condata0=recvdata= SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
condata1=recvdata= SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
condata2=recvdata= SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
recvdata= SPI.transfer(0x40);//status request | |
sdata= SPI.transfer(0x0);//status read | |
//Serial.print("status="); | |
//Serial.println(sdata); | |
//pc.printf("ch=%d,sdata=%x:condata:%x,%x,%x\n\r",ch,sdata,condata0,condata1,condata2); | |
} | |
//============================================================================= | |
//============================================================================= | |
//============================================================================= | |
//====================================AD7194 Initialize=========================================================== | |
//########################################################################## | |
int AD7194_init(){ | |
//**************************AD7194 Set******************************************************* | |
delay(1); | |
//set_AD7194(); | |
//MODEレジスタへモード設定データ書き込み | |
recvdata= SPI.transfer(0x08);//MODEレジスタ書き込み指定 | |
recvdata= SPI.transfer(0x08) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
recvdata= SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
recvdata= SPI.transfer(0x01) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
//mode書き込み確認 | |
recvdata= SPI.transfer(0x48);//MODEレジスタ書き込み指定 | |
mdata0=SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
mdata1=SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
mdata2=SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
// pc.printf("INIT:mdata:%x,%x,%x\n\r",mdata0,mdata1,mdata2); | |
//設定レジスタへ設定データ書き込み | |
recvdata= SPI.transfer(0x10);//設定レジスタ書き込み指定 | |
recvdata= SPI.transfer(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま | |
recvdata= SPI.transfer(0x01) ;//設定レジスタ15-8bit書き込み=1ch-4ch自動スキャン設定 AIN1+ AIN2- | |
recvdata= SPI.transfer(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128 | |
//Config書き込み確認 | |
recvdata= SPI.transfer(0x50);//Configレジスタ書き込み指定 | |
condata0=SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
condata1=SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
condata2=SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
} | |
//***************************************************************************************************************** | |
//***************************************************************************************************************************** | |
void setup() { | |
M5.begin(); | |
//Serial.begin(230400); | |
//------------------------------------------------ | |
//--------- ESP-NOW初期化-------------------------- | |
//------------------------------------------------ | |
WiFi.mode(WIFI_STA); | |
WiFi.disconnect(); | |
if (esp_now_init() == ESP_OK) { | |
Serial.println("ESPNow Init Success"); | |
} else { | |
Serial.println("ESPNow Init Failed"); | |
ESP.restart(); | |
} | |
// マルチキャスト用Slave<pnのM5ATOM> address 50:02:91:86:9B:CC | |
memset(&slave, 0, sizeof(slave)); | |
//============M5Stack Slave AP Mac====================== | |
slave.peer_addr[0] = (uint8_t)0x50; | |
slave.peer_addr[1] = (uint8_t)0x02; | |
slave.peer_addr[2] = (uint8_t)0x91; | |
slave.peer_addr[3] = (uint8_t)0x86; | |
slave.peer_addr[4] = (uint8_t)0x9B; | |
slave.peer_addr[5] = (uint8_t)0xCC; | |
//for (int i = 0; i < 6; ++i) {//for broad cast | |
// slave.peer_addr[i] = (uint8_t)0xff; | |
//} | |
esp_err_t addStatus = esp_now_add_peer(&slave); | |
if (addStatus == ESP_OK) { | |
// Pair success | |
Serial.println("Pair success"); | |
} | |
// ESP-NOWコールバック登録 | |
esp_now_register_send_cb(OnDataSent); | |
esp_now_register_recv_cb(OnDataRecv); | |
//-------------------------------------------------- | |
//-------------------------------------------------- | |
// put your setup code here, to run once: | |
SPI.begin(19,33,23,-1);//sclk,MISO,MOSI,SS=CS=GND | |
// MODE register writing | |
AD7194_init();//Initialize AD7194 | |
} | |
void loop() { | |
i++; | |
ch_Change(i%6); | |
recvdata=SPI.transfer(0x58); | |
delay(1);//1msec以上WaitいれないとCH切り替えできない | |
data0=SPI.transfer(0x0); | |
data1=SPI.transfer(0x0); | |
data2=SPI.transfer(0x0); | |
mVA[i%6]=((double)data0*65536+(double)data1*256+(double)data2)/5084; //No MA | |
//mV0arry[i%MA]=((double)data0*65536+(double)data1*256+(double)data2)/5084; | |
delay(1);//1msec以上WaitいれないとCH切り替えできない | |
recvdata= SPI.transfer(0x40);//status request | |
sdata= SPI.transfer(0x0);//status read | |
//Serial.print("status="); | |
// Serial.println(sdata,HEX); | |
//if(i%6==0) | |
//{ | |
mtime=millis(); | |
/* | |
Serial.print(mVA[0],1); | |
Serial.print(","); | |
Serial.print(mVA[1],1); | |
Serial.print(","); | |
Serial.print(mVA[2],1); | |
Serial.print(","); | |
Serial.print(mVA[3],1); | |
Serial.print(","); | |
Serial.print(mVA[4],1); | |
Serial.print(","); | |
Serial.print(mVA[5],1); | |
Serial.print(","); | |
Serial.print(sdata,HEX); | |
Serial.print(","); | |
Serial.println(mtime); | |
*/ | |
//===================================================================== | |
//=================ESP-NOW Send============================== | |
int imVA0=int(mVA[0]); | |
int imVA1=int(mVA[1]); | |
int imVA2=int(mVA[2]); | |
int imVA3=int(mVA[3]); | |
int imVA4=int(mVA[4]); | |
int imVA5=int(mVA[5]); | |
//i_to_char(imVA0, data, 0);//1ch | |
i_to_char(rt2, data, 0);//rt2 | |
//i_to_char(imVA1, data, 4);//2ch | |
drt2=millis()-rt2; | |
i_to_char(drt2, data, 4);//drt2 | |
i_to_char(imVA2, data, 8);// 3ch | |
i_to_char(imVA3, data, 12);//4ch | |
i_to_char(imVA4, data, 16);//5ch | |
i_to_char(imVA5, data, 20);//6ch | |
i_to_char(stime, data, 24);// time | |
//Serial.print("dataSet="); | |
//Serial.println(millis()); | |
if(comst==1) | |
{ | |
esp_err_t result = esp_now_send(slave.peer_addr, data, sizeof(data)); | |
comst=0; | |
Serial.printf("%d,%d,%d,%d,%d,%d,%d\n\r",rt2,drt2,imVA2,imVA3,imVA4,imVA5,stime); | |
} | |
// Serial.print("Send Status: "); | |
//====================================================================== | |
//====================================================================== | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment