Здравствуйте.
Я загрузил скетч и Leonardo сначала отключилась (как обычно), а за тем не подключилась. Когда я нажимаю кнопку reset и она сначала подключается не на “рабочий” COM порт (как обычно), а потом отключается и не подключается. Замена провода/USB порта не помогает.
Вот скетч:
#define COUNT_REGISTR 6 // количество регистров
#define BYTES_VAL_T uint64_t
// пины для подключения регистра
int ploadPin = 10;
int clockEnablePin = 11;
int dataPin = 12;
const uint8_t clk_pin = 13; // 2 вывод м/с, CP тактовый вход, сигнал тактирующий
BYTES_VAL_T pinValues; // текущее значение пинов
bool pinList[48];
int num = 0;
// функция для считывания пинов
BYTES_VAL_T read_shift_regs() {
BYTES_VAL_T bitVal; //bool
BYTES_VAL_T bytesVal = 0;
// опрашиваем регистр о состоянии пинов
digitalWrite(clockEnablePin, HIGH);
digitalWrite(ploadPin, LOW);
delayMicroseconds(40);
digitalWrite(ploadPin, HIGH);
digitalWrite(clockEnablePin, LOW);
// считываем полученные данные о пинах
for(int i = 0; i < COUNT_REGISTR * 8; i++){
bitVal = digitalRead(dataPin);
bytesVal |= (bitVal << ((COUNT_REGISTR * 8-1) - i));
digitalWrite(clk_pin, HIGH);
delayMicroseconds(40);
digitalWrite(clk_pin, LOW);
}
// возвращяем результат опроса регистра
return(bytesVal);
}
bool to_list(){
String str;
// перебор всех пинов
for(int i = 0; i < COUNT_REGISTR * 8; i++){
if((pinValues >> i) & 1){
str += "1";
}else{
str += "2";
}
}
return(str);
}
String display_pin_list(){
for(int i = 0; i < COUNT_REGISTR * 8; i++){
Serial.print(pinList[i]);
}
Serial.println("-" + String(num));
}
// функция для вывода состояния пинов
void display_pin_values(){
// перебор всех пинов
for(int i = 0; i < COUNT_REGISTR * 8; i++){
if((pinValues >> i) & 1){
Serial.print("1");
}else{
Serial.print("0");
}
Serial.print(" ");
}
Serial.print(num);
Serial.println();
}
void setup(){
Serial.begin(9600);
pinMode(ploadPin, OUTPUT);
pinMode(clockEnablePin, OUTPUT);
pinMode(clk_pin, OUTPUT);
pinMode(dataPin, INPUT);
digitalWrite(clk_pin, LOW);
digitalWrite(ploadPin, HIGH);
// считываем значения с пинов
pinValues = read_shift_regs();
// выводим результат
display_pin_values();
}
void loop(){
// считываем значения с пинов
pinValues = read_shift_regs();
// выводим результат в монитор порта
// display_pin_values();
// display_pin_list();
String Str = display_pin_list();
Serial.println(Str);
num++;
}
P.S.: подключён каскад из 6 входных сдвиговых регистров 74HC165