Сдвиговый регистр и Serial

Galom48
Offline
Зарегистрирован: 17.03.2017

Здравствуйте, написал программу. По моей задумке должно работать так :

1)Ожидаем числа с клавиатуры от 0 до 7 (если это буква написать ее № ASCII).

2)Включаем нужный светодиод (буква игнорируется).

А работает так:

1)Ожидает любой символ ASCII ​и включает светодиод "0".

2)Включаем нужный светодиод (буква игнорируется).

byte x;
byte incoming;
byte datapin = 11;
byte clockpin = 12;
byte latchpin = 8;
void setup() {
  Serial.begin(9600);
  pinMode(datapin,OUTPUT);
  pinMode(clockpin,OUTPUT);
  pinMode(latchpin,OUTPUT);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin,clockpin,MSBFIRST,0);
  digitalWrite(latchpin,HIGH);
 void loop() {
  incoming = Serial.read() - '0';
  Serial.println(incoming);
  bitWrite(x ,incoming ,1);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin,clockpin,MSBFIRST,x);
  digitalWrite(latchpin,HIGH);
  }
}

 

vk007
Offline
Зарегистрирован: 16.06.2015

Ну так, если из всего мусора, приплывающего из serial, нужны только цифры 0-7, то и ловите только их, остальное игнорируйте.

Стоите вы на остановке и ждете троллейбус. Вам подходят только №№ 3, 4, 5. Приехал № 8. Вы же не садитесь в него, а ждете дальше своего. Так и тут.

Galom48
Offline
Зарегистрирован: 17.03.2017

Похоже это самый простой способ, спасибо.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Так накидал примерный скетч . Полный пакет здесь.https://yadi.sk/d/NrpxVREH3GZmK2

Головной файл выкладываю

/*Class_Serial_btn__74HC595.ino
  "w" -> мигает 1 светодиод на 74HC595
  "a" -> мигает 2 светодиод на 74HC595
  "s" -> мигает 3 светодиод на 74HC595
  "d" -> мигает 4 светодиод на 74HC595
  "x" -> мигает 5 светодиод на 74HC595
*/
const int Latch_pin = 3;
const int CLK_pin  = 4;
const int Data_pin = 2;
const int max_device = 1;// шина состоит из 1 74HC595 микросхемы
bool stat = 0;
#include "Out_74HC595.h"
Out_74HC595 Out(Latch_pin, CLK_pin, Data_pin, max_device);
#include "Cl_led.h"
Cl_led led[] = {
  Cl_led(&Out, 0, 1, 0),  // шина-Out,1 горит,1-я 74HC595,D0
  Cl_led(&Out, 0, 1, 1),  // шина-Out,1 горит,1-я 74HC595,D1
  Cl_led(&Out, 0, 1, 2),  // шина-Out,1 горит,1-я 74HC595,D2
  Cl_led(&Out, 0, 1, 3),  // шина-Out,1 горит,1-я 74HC595,D3
  Cl_led(&Out, 0, 1, 4)   // шина-Out,1 горит,1-я 74HC595,D4
};

#include "Cl_Serial_btn.h"
void Do_w() {
  led[0].blink(500);
};
void Do_a() {
  led[1].blink(500);
};
void Do_s() {
  led[2].blink(500);
};
void Do_d() {
  led[3].blink(500);
};
void Do_x() {
  led[4].blink(500);
};
Cl_Serial_btn *Input = {
  new Cl_Serial_btn(
    'w', &Do_w, // если в serial 'w' сделать это
    'a', &Do_a, // если в serial 'a' сделать это
    's', &Do_s, // если в serial 's' сделать это
    'd', &Do_d, // если в serial 'd' сделать это
    'x', &Do_x) // если в serial 'x' сделать это
};
void setup() {
  Serial.begin(9600);
  Out.setup();
  for (byte i = 0; i < 5; i++)  led[i].setup();
  Input->setup();
}

void loop() {
  Input->loop();
  for (byte i = 0; i < 5; i++)  led[i].loop();
}