artisan-roaster-scope / artisan

artisan: visual scope for coffee roasters
https://artisan-scope.org
GNU General Public License v3.0
925 stars 253 forks source link

Any possibility to work with Tasi TA612C four channel thermometer with USB #947

Open Mikekkc opened 2 years ago

Mikekkc commented 2 years ago

Expected Behavior

Collect data from Tasi TA612C ( http://www.china-tasi.com/plus/view.php?aid=97 )

Actual Behavior

Construct the roasting curve with channels on BT, ET and third reading like ambient temperature

Steps to Reproduce the Problem

  1. Windows connected
  2. Data not read by Artisan
  3. No curve generated

Specifications

Please attach your current Artisan settings file (as exported via menu Help >> Save Settings as .aset) file. currently using Victor86B single channel. Please attach any relevant Artisan .alog profiles. not available

Note that you need either add a .txt extension or zip the files before uploading. Otherwise you will receive a "Not a supported file type" error on uploading.

MAKOMO commented 2 years ago

This device is not supported by Artisan and the team has no resources to add support for it. Please implement the corresponding driver yourself and submit the code as Pull Request for integration.

YuenJay commented 9 months ago

TA系列通讯协议.docx

Here is the communication protocol for the above device. Only Chinese language version.

chihpingkuo commented 8 months ago

Here is what I've implemented in Rust for reading temperature data from TA612C, hope that helps https://github.com/chihpingkuo/roastcraft/blob/main/src-tauri/src/devices/ta612c.rs

let request: [u8; 5] = [0xAA, 0x55, 0x01, 0x03, 0x03];
self.stream.write(&request);

let mut response: [u8; 13] = [0; 13];
match self.stream.read(response.as_mut_slice()) {
    Ok(_) => {
        let T1 = u16::from_ne_bytes(response[4..6].try_into().unwrap()) as f32 / 10.0;
        let T2 = u16::from_ne_bytes(response[6..8].try_into().unwrap()) as f32 / 10.0;
        let T3 = u16::from_ne_bytes(response[8..10].try_into().unwrap()) as f32 / 10.0;
        let T4 = u16::from_ne_bytes(response[10..12].try_into().unwrap()) as f32 / 10.0;