Сдвиговый регистр и Serial
- Войдите на сайт для отправки комментариев
Вс, 02/04/2017 - 16:13
Здравствуйте, написал программу. По моей задумке должно работать так :
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);
}
}
Ну так, если из всего мусора, приплывающего из serial, нужны только цифры 0-7, то и ловите только их, остальное игнорируйте.
Стоите вы на остановке и ждете троллейбус. Вам подходят только №№ 3, 4, 5. Приехал № 8. Вы же не садитесь в него, а ждете дальше своего. Так и тут.
Похоже это самый простой способ, спасибо.
Так накидал примерный скетч . Полный пакет здесь.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(); }