LinearImageSensor

[비] TCD1201D Code

바람C 2022. 4. 1. 20:39

TCD1201D 이미지 센서 코드

TCD1201D linear CCD connected to Arduino.  
Pin map: 

SS(2)=GND OD=5V 8=SH 9=CLK1 10=CLK2 11=BT 12=RS OS=A0.

tcd1201d.ino

#define TCD_SH 0x01
#define TCD_CLK1 0x02
#define TCD_CLK2 0x04
#define TCD_BT 0x08
#define TCD_RS 0x10

void tcd1201d_setup() {
  DDRB = 0x1F;
}

unsigned char tcd1201d_out[1047];

int tcd1201d_dark;

void tcd1201d_read() {
  PORTB = TCD_SH | TCD_CLK1;
  PORTB = TCD_CLK1;
  
  for (int i = 0; i < 1047; ++i) {
    PORTB = TCD_CLK1;
    PORTB = TCD_RS | TCD_CLK1;
    PORTB = TCD_RS | TCD_BT | TCD_CLK1;
    PORTB = TCD_BT | TCD_CLK1;
    PORTB = TCD_BT | TCD_CLK2;
    // Could read here too, but we'll skip half of them.

    PORTB = TCD_CLK2;
    PORTB = TCD_RS | TCD_CLK2;
    PORTB = TCD_RS | TCD_BT | TCD_CLK2;
    PORTB = TCD_BT | TCD_CLK2;
    PORTB = TCD_BT | TCD_CLK1;
        
    int v = analogRead(A0);
    if (i == 14) tcd1201d_dark = v;
    if (v > tcd1201d_dark) v = tcd1201d_dark;
    v = (tcd1201d_dark - v) / 2;
    if (v > 255) v = 255;
    tcd1201d_out[i] = v;
  }
}

void setup() {
  analogReference(DEFAULT);
  tcd1201d_setup();
  Serial.begin(115200);
}

void loop() {
  tcd1201d_read();
  tcd1201d_read();
  for (int i = 0; i < 1047; ++i) {
    Serial.print(tcd1201d_out[i], HEX);
  }
  Serial.println();
}