diff --git a/.github/workflows/arduino_ci.yml b/.github/workflows/arduino_ci.yml index 4dcfddb..caefb75 100644 --- a/.github/workflows/arduino_ci.yml +++ b/.github/workflows/arduino_ci.yml @@ -111,6 +111,8 @@ jobs: version: latest - name: Adafruit BNO055 version: latest + - name: Adafruit LPS35HW + version: latest - source-url: https://github.com/uChip/MCP342X.git - source-url: https://github.com/core-rocket/CCP.git - source-url: https://github.com/coryjfowler/MCP_CAN_lib.git @@ -145,6 +147,14 @@ jobs: vendor: rp2040 arch: rp2040 name: seeed_xiao_rp2040 + + - sketch-paths: Pressure + libraries: | + - + board: + vendor: rp2040 + arch: rp2040 + name: seeed_xiao_rp2040 include: - code: diff --git a/Pressure/Pressure.ino b/Pressure/Pressure.ino new file mode 100644 index 0000000..34322e5 --- /dev/null +++ b/Pressure/Pressure.ino @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +Adafruit_LPS35HW lps35hw = Adafruit_LPS35HW(); + +#define CAN_INT D6 +#define CAN_CS D7 + +// CAN +CCP_MCP2515 CCP(CAN_CS, CAN_INT); +char msgString[128]; +char str_buf[7]; // 6+\0 + +void setup() { + delay(500); + Serial.begin(115200); + pinMode(CAN_CS, OUTPUT); + pinMode(CAN_INT, INPUT); + digitalWrite(CAN_CS, HIGH); + + // CAN + CCP.begin(); + + while (!lps35hw.begin_I2C(0x5C)) { + //if (!lps35hw.begin_SPI(LPS_CS)) { + //if (!lps35hw.begin_SPI(LPS_CS, LPS_SCK, LPS_MISO, LPS_MOSI)) { + Serial.println("Couldn't find LPS35HW chip"); + delay(10); + } + delay(10); + lps35hw.setDataRate(LPS35HW_RATE_75_HZ); +} + +void loop() { + static uint32_t time = 0; + if (millis() - time >= 10) { + time = millis(); + CCP.float_to_device(CCP_surface_pressure1_pressure_pa, lps35hw.readPressure()); + } + + if (!digitalRead(CAN_INT)) // データ受信確認 + { + CCP.read_device(); + if (CCP.id < 0x40) { + CCP.string(str_buf, 7); + sprintf(msgString, "%d,ID,%03x,time,%d000,string,%s,,,,", millis(), CCP.id, CCP.time16(), str_buf); + } else if (CCP.id < 0x80) { + sprintf(msgString, "%d,ID,%03x,time,%lu,uint32,%lu,,,,", millis(), CCP.id, CCP.time32(), CCP.data_uint32()); + } else if (CCP.id < 0xC0) { + sprintf(msgString, "%d,ID,%03x,time,%lu,float,%8.2f,,,,", millis(), CCP.id, CCP.time32(), CCP.data_float()); + } else { + sprintf(msgString, "%d,ID,%03x,time,%d000,fp16_0,%8.2f,fp16_1,%8.2f,fp16_2,%8.2f", millis(), CCP.id, CCP.time16(), CCP.data_fp16_0(), CCP.data_fp16_1(), CCP.data_fp16_2()); + } + Serial.println(msgString); + } +} diff --git a/test/pressure_board_CAN_inspector/pressure_board_CAN_inspector.ino b/test/pressure_board_CAN_inspector/pressure_board_CAN_inspector.ino new file mode 100644 index 0000000..832e9fd --- /dev/null +++ b/test/pressure_board_CAN_inspector/pressure_board_CAN_inspector.ino @@ -0,0 +1,51 @@ +#include +#include +#include + +#define CAN_INT D6 +#define CAN_CS D7 + +// CAN +CCP_MCP2515 CCP(CAN_CS, CAN_INT); + +// Other +char msgString[128]; +char str_buf[7]; // 6+\0 + +void setup() +{ + delay(500); + Serial.begin(115200); + pinMode(CAN_CS, OUTPUT); + pinMode(CAN_INT, INPUT); + digitalWrite(CAN_CS, HIGH); + + // CAN + CCP.begin(); +} + +void loop() +{ + if (!digitalRead(CAN_INT)) // データ受信確認 + { + CCP.read_device(); + if (CCP.id < 0x40) + { + CCP.string(str_buf, 7); + sprintf(msgString, "%d,ID,%03x,time,%d000,string,%s,,,,", millis(), CCP.id, CCP.time16(), str_buf); + } + else if (CCP.id < 0x80) + { + sprintf(msgString, "%d,ID,%03x,time,%lu,uint32,%lu,,,,", millis(), CCP.id, CCP.time32(), CCP.data_uint32()); + } + else if (CCP.id < 0xC0) + { + sprintf(msgString, "%d,ID,%03x,time,%lu,float,%8.2f,,,,", millis(), CCP.id, CCP.time32(), CCP.data_float()); + } + else + { + sprintf(msgString, "%d,ID,%03x,time,%d000,fp16_0,%8.2f,fp16_1,%8.2f,fp16_2,%8.2f", millis(), CCP.id, CCP.time16(), CCP.data_fp16_0(), CCP.data_fp16_1(), CCP.data_fp16_2()); + } + Serial.println(msgString); + } +}