void shiftOut( byte value ) {
pinMode( D3, OUTPUT );
for( byte bit = 0; bit < 8; bit++ ) {
digitalWrite( D3, value >> bit & 1 ); // data
digitalWrite( D2, HIGH ); // clk
delay( 250 );
digitalWrite( D2, LOW );
delay( 250 );
digitalWrite( D3, LOW );
}
delay( 500 ); // stop
pinMode( D3, INPUT );
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, STM32!");
pinMode( D2, OUTPUT );
pinMode( D3, INPUT ); // defauls safe
pinMode( D8, INPUT_PULLUP );
pinMode( D9, INPUT_PULLUP );
attachInterrupt( D8, handleBit, RISING );
}
void loop() {
shiftOut( 'S' );
shiftOut( 'O' );
shiftOut( 'S' );
delay( 1000 );
// digitalWrite( D2, HIGH );
// Serial.println("High");
// delay( 500 );
// digitalWrite( D2, LOW );
// Serial.println("Low");
// delay( 500 );
}
const byte IDLE = 0;
const byte RECEIVING = 1;
void handleBit() {
static int state = IDLE;
static byte count = 0;
static unsigned char data = 0;
if( state == IDLE ) {
state = RECEIVING;
count = 0;
data = 0;
}
byte bit = digitalRead( D9 );
data = data | ( bit << count ); // set bit in data
Serial.println( String( count ) + " : " + String( bit ) + " data " + String( data, BIN ) );
count++;
if( count == 8 ) {
state = IDLE; // done for this byte of data
Serial.println( "Data : "+String( data, BIN )+ " " + String( (char) data ) );
}
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6