Тема: tc9260
Основная статья - http://rcl-radio.ru/?p=134035
#define STB 2
#define DATA 3
#define CK 4
void setup() {
Serial.begin(9600);
pinMode(STB, OUTPUT);digitalWrite(STB, LOW);
pinMode(DATA, OUTPUT);digitalWrite(DATA, LOW);
pinMode(CK, OUTPUT);digitalWrite(CK, LOW);
delay(100);
}
void loop() {
byte_tc9260(1,0, 1, 0);
byte_tc9260(0,1, 39, 0);
delay(1000);Serial.println();
}
void byte_tc9260(bool lh, bool rh, int vol, bool ld){
int vol_1 = ((vol&0b100000)>>5)<<0|((vol&0b010000)>>4)<<1|((vol&0b001000)>>3)<<2|((vol&0b000100)>>2)<<3|((vol&0b000010)>>1)<<4|(vol&0b000001)<<5;
Serial.println(vol_1,BIN);
unsigned long data_byte = (lh<<12)|(rh<<11)|(vol_1<<5)|(ld<<4)|0b1011;
// vol 0...40
// lh rh 0...1
// ld 0...1
writeByte(data_byte);
}
void writeByte(uint16_t data){
digitalWrite(STB, LOW); delayMicroseconds(3);
for (int i = 12; i >= 0; i--) {
digitalWrite(DATA, (data >> i) & 1); delayMicroseconds(3);
Serial.print((data >> i) & 1);
digitalWrite(CK, HIGH); delayMicroseconds(3);
digitalWrite(CK, LOW); delayMicroseconds(3);
}
digitalWrite(STB, HIGH); delayMicroseconds(3);
digitalWrite(STB, LOW);
Serial.println();
}