Как в Arduino через сериал задать 2 значения для двух переменных?
- Войдите на сайт для отправки комментариев
Ср, 16/08/2017 - 11:33
Подскажите пожалуйсто, почему кодом ниже не удается задать время переменные часа и минут?
int h=0,m=0, s=0;
char c1,c2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("write Hour");
delay (5000);
while (Serial.available() > 0) {
// считываем принятый байт:
c1 = Serial.read();
h =atoi(c1);
}
Serial.println("write Min");
delay (5000);
while (Serial.available() > 0) {
// считываем принятый байт:
c2 = Serial.read();
m =atoi(c2);
}
}
А откуда Вы знаете, что не удаётся? Вы его запускали? Ну, тогда Вы должны знать, что, для начала, он просто не компилируется. Это достаточная причина, чтобы с его помощью нельзя было что-то задать?
Все компилируется! В LOOP у меня вывод стоит. ниже полный код:
int h=0,m=0, s=0; char c1,c2; void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("write Hour"); delay (5000); while (Serial.available() > 0) { // считываем принятый байт: c1 = Serial.read(); h =atoi(c1); } Serial.println("write Min"); delay (5000); while (Serial.available() > 0) { // считываем принятый байт: c2 = Serial.read(); m =atoi(c2); } } void loop() { Serial.print(h); Serial.print(":"); Serial.print(m); Serial.println("\n"); delay (1000); }ответ коментарием ниже
а как передаете байты?
Все компилируется!
Т.е. Вы хотите сказать, что строки 12 и 20 у Вас не вызывают ошибки компиляции?
Отсюда я делаю вывод: Вы используете IDE типа 1.8.x с настройками по умолчанию. Авторы специально поиздевались над новичками, сделав две вещи: 1) включили опции так, что большинство критических ошибок выдаются как предупреждения и 2) полностью подавили вывод этих самых предупреждений, чтобы не люди работали вслепую.
Зайдите в "Настройки", найдите там "Сообщения компилятора" и уберите нахрен лоховское "ничего". Поставьте уже если не "всё", то хотя бы "по умолчанию".
Получите "предупреждение", но на самом деле это никакое не предупреждение, а сообщение о критической ошибке. В более адекватных версиях IDE Вы бы получили его сразу.
я смотрю, вы на Амперке уже исправленный код выложили. Вы бы лучше выбрали один форум для вопроса, а то какое-то читерство получается
а как передаете байты?
Какая разница, если он читает побайтно (представьте, что часов 23) и каждый прочитайнный байт передаёт atoi у которой параметр вообще-то не байт, а const char *
Какая разница, если он читает побайтно (представьте, что часов 23) и каждый прочитайнный байт передаёт atoi у которой параметр вообще-то не байт, а const char *
ну вообще-то у него параметр atoi и описан как char так что особой проблемы быть не должно. (UPD - упс. притупил... удалять не буду. но ошибку понял)
А чтение двухзначных чисел он уже добавил... на амперке
Сегодня меня укусила бацилла альтруизма. Плюс к тому ТС настолько невежественен, что объяснять бесполезно.
Вот код. Минимальные правки к коду ТС, может это поможет ему понять отличие?
int h=0,m=0, s=0; char c[16]; byte i; void setup() { // put your setup code here, to run once: Serial.begin(57600); while (!Serial); Serial.println("write Hour"); delay (5000); i = 0; while (Serial.available() > 0) { // считываем принятый байт: c[i++] = Serial.read(); } c[i] = 0; h =atoi(c); Serial.println("write Min"); delay (5000); i = 0; while (Serial.available() > 0) { // считываем принятый байт: c[i++] = Serial.read(); } c[i] = 0; m =atoi(c); } void loop() { Serial.print(h); Serial.print(":"); Serial.print(m); Serial.println("\n"); delay (1000); }Сегодня меня укусила бацилла альтруизма.
Прививки надо вовремя делать.
Огромное спасибо. Данный код заработал.
Единственное, не могли бы вы обьяснить как работают следующие строки:
1) c[i++] = Serial.read();
2)c[i] = 0;
3) h =atoi(c);
Код там я действительно подправил, но он все-равно не работает.
Огромное спасибо. Данный код заработал.
Единственное, не могли бы вы обьяснить как работают следующие строки:
Меня, конечно, укусила бацилла альтруизма, но не до такой же степени....
Чтение учебника приведет тебя к победе, друг мой!
не могли бы вы обьяснить как работают следующие строки:
1) c[i++] = Serial.read();
2)c[i] = 0;
3) h =atoi(c);
wdrakula попал!
Говорили ж
Прививки надо вовремя делать.