#include <Wire.h>
#include "gw_grayscale_sensor.h"

// SDA : A4
// SCL : A5

#define GW_GRAY_ADDR GW_GRAY_ADDR_DEF // 使用默认地址

void setup() {
  // 初始化I2C
  Wire.begin();

  // 初始化串口
  Serial.begin(115200);
}

void loop() {
  uint8_t recv_value = 0;
  uint8_t ping_rep = 0;
  uint8_t sensor1, sensor2, sensor3, sensor4, sensor5, sensor6, sensor7, sensor8;

  // 循环 直到PING成功
  while (ping_rep != GW_GRAY_PING_OK) {
    Wire.beginTransmission(GW_GRAY_ADDR);
    Wire.write(GW_GRAY_PING);
    Wire.endTransmission();

    Wire.requestFrom(GW_GRAY_ADDR, 1);
    ping_rep = Wire.read();
    delay(10);
  }

  /* ping 成功 */

  /* 数字数据模式, 设置完毕之后, 每次读取一个8bit的数据, 每个位表示1-8探头的状态 */
  Wire.beginTransmission(GW_GRAY_ADDR);
  Wire.write(GW_GRAY_DIGITAL_MODE);
  Wire.endTransmission();

  // 打印8个探头的状态
  while (1) {
    Wire.requestFrom(GW_GRAY_ADDR, 1);
    recv_value = Wire.read();
    Serial.print("传感器数字数据:");
    for (int i = 1; i <= 8; ++i) {  //探头从1开始,不是0
      Serial.print(" ");
      Serial.print(GET_NTH_BIT(recv_value, i));
    }
    Serial.print("\n");

    /* 如何使用得到的8bit数据: */

    /* ----------------------直接查看单个探头数据---------------------- */
    if (GET_NTH_BIT(recv_value, 1) == 0) {
      // 第1个探头数据为0

    } else {
      // 第1个探头数据为1
    }

    if (GET_NTH_BIT(recv_value, 2) == 0) {
      // 第2个探头数据为0

    } else {
      // 第2个探头数据为1
    }

    /* ... */

    if (GET_NTH_BIT(recv_value, 8) == 0) {
      // 第8个探头数据为0

    } else {
      // 第8个探头数据为1
    }

    /* ----------------------对比整排探头数据------------------ */
    if (recv_value == 0b11100111) {
      // 中间两个45探头数据为0 其他为1
    }

    /* ----------------------把8个探头数据单独放进8个变量里---------------------- */
    SEP_ALL_BIT8(recv_value, sensor1, sensor2, sensor3, sensor4,
                 sensor5, sensor6, sensor7, sensor8);
    /* 查看探头1数据 */
    if (sensor1 == 0) {
      // 第1个探头数据为0
    } else {
      // 第1个探头数据为1
    }
    delay(100);
  }
}