Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dj1711572002/693a00100aa261796675037c766bc4b6 to your computer and use it in GitHub Desktop.
Save dj1711572002/693a00100aa261796675037c766bc4b6 to your computer and use it in GitHub Desktop.
SCP_Dummy5 M5Atomlite AD7194_6CH
//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