Вывод переменной на дисплей

Egorpro4
Offline
Зарегистрирован: 07.10.2016

Подскажите пожалуйста, где ошибка в коде. Или может подскажете другой вариант кода. Надо вывести текст, который я печетаю с компьютера на дисплей.С ардуиной только один день работаю. Вот мой код :

int val;
int a;

#include <LiquidCrystal.h> 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

void setup(){ 
  Serial.begin(9600);
  lcd.begin(8, 2);
}

void loop(){
  
 if (Serial.available())       
    a = Serial.read();           
   lcd.setCursor (0, 0);
   lcd.print ( "a" );
   Serial.write ( "a" );
   delay (10);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А чего Вы все буквы, сколь бы их ни было, в одно и тоже место экрана выводите? В позицю 0,0. Это баг или фича?

И вообще, объяснять проблему надо подробнее, здесь никто в Вашей голове не сидит и не знает, чего Вы хотели. Также здесь никто не знает, что у Вас получилось.

Вот Вы толком не объяснили что нужно (см. мой вопрос выше) и совсем никак не объяснили что же у Вас получается.

И Вы думаете, в такой ситуации Вам можно как-то по делу помочь?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

ЕвгенийП пишет:

А чего Вы все буквы, сколь бы их ни было, в одно и тоже место экрана выводите? В позицю 0,0. Это баг или фича?

это насущная необходимость:

17    lcd.print ( "a" );
18    Serial.write ( "a" );

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ой, и правда, до строчек 17 и 18 я не досмотрел, на 16-ой остановился.

Действительно, что Вы там пытаетесь вывести в строказ 17 и 18?

Araris
Offline
Зарегистрирован: 09.11.2012

Позвольте мне быть менее замысловатым, чем предыдущие ораторы:

17    lcd.print ( "a" );
18    Serial.write ( "a" );
 

 - это вывод строки "a", к переменной int a никакого отношения не имеет.

17    lcd.print ( a );
18    Serial.write ( a );
 

- вывод значения переменной a.

Egorpro4, увидьте разницу. А лучше изучите хотя бы базовые основы языка программирования, на котором пытаетесь писать.

strarbit
Offline
Зарегистрирован: 12.06.2016

Например

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

byte numCol = 0;  // объявляем переменную текущая  строчка  LCD
byte numRow = 0;  // объявляем переменную текущая колонка символа LCD

void setup() {
  Serial.begin(9600);
  lcd.begin(8, 2);
  lcd.cursor(); // показываем курсор
}

void loop() {
  // если буфер последовательного порта не пуст,
  if (Serial.available()) {
    // то подождать немного для полного заполнения
    delay(100);
    // прочитаем все доступные символы из буфера серийного порта
    while (Serial.available() > 0) {
      // если первая строчка записана символами,
      if (numRow == 8 && numCol == 0) {
        numCol = numCol + 1;    // то увеличиваем на единицу текущую строчку
        // переход в позицию первого  символа на новую строчку LCD
        lcd.setCursor(0, numCol);
        // иначе если вторая строчка заполнена символами,
      } else if (numRow == 16 && numCol == 1) {
        // обнуляем текущее количество введенных символов
        numRow = 0;
        // обнуляем текущее положение строчки
        numCol = 0;
        // устанавливаем курсор в начало первого символа первой строки
        lcd.setCursor(numRow, numCol);
      }
      // увеличиваем на единицу количество введенных символов
      numRow = numRow + 1;
      // вывести прочитанный символ из серийного порта на LCD
      lcd.write(Serial.read());
    }
  }
}

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

да, ну нафиг!

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

void setup() {
Serial.begin(9600);
lcd.begin(8, 2);
}

void loop() {
if (Serial.available() > 0) {lcd.write(Serial.read());}
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Сравнивать Serial.available() с нулем - излишество нехорошее.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

andriano пишет:

Сравнивать Serial.available() с нулем - излишество нехорошее.

ну, так привык.

strarbit
Offline
Зарегистрирован: 12.06.2016

andriano пишет:

Сравнивать Serial.available() с нулем - излишество нехорошее.

Да, ну! С чего бы это. В примерах так же 

 
Не хорошо наезжать на Клапауций 232 
Клапауций 232
Offline
Зарегистрирован: 05.04.2016

strarbit пишет:

Да, ну! С чего бы это. В примерах так же 

 
Не хорошо наезжать на Клапауций 232 

примеры не при чём - мне не совсем понятно, почему if(2) != if(0) и if(2) == if(1).

почему не происходит переполнения при конвертации int в boolean внутри скобок If() - мне не понятно.

*яженепрограммист

кто в курсе, зачем они так сделали? - почему любые значения, кроме 0 или 1 не отвергаются, как не имеющие смысла, т.е. ошибочные?:

Значение истины (true)

Любое целочисленное значение, кроме 0 будет эквивалентно истине. Например, 1, 2, 4, 45 — все это истина, а нуль — нет. В С++ также зарезервировано ключевое слово, обозначающее истину — true

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

strarbit пишет:

andriano пишет:

Сравнивать Serial.available() с нулем - излишество нехорошее.

Да, ну! С чего бы это. В примерах так же 

 
Это говорит лишь о том, что создатели проекта Ардуино, возможно, хорошие маркетологи, но некудышние программисты.
Цитата:
 
Не хорошо наезжать на Клапауций 232 

Кто ж спорит?

И я говорю: наезжать на Калапуция нехорошо (вне зависимости от номера).

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клапауций 232 пишет:

кто в курсе, зачем они так сделали? - почему любые значения, кроме 0 или 1 не отвергаются, как не имеющие смысла, т.е. ошибочные?:

Значение истины (true)

Любое целочисленное значение, кроме 0 будет эквивалентно истине. Например, 1, 2, 4, 45 — все это истина, а нуль — нет. В С++ также зарезервировано ключевое слово, обозначающее истину — true

Это очень удобно в реальной работе: очень часто имеет место одна из двух ситуаций:

1. Функция возвращает значение (адрес, дескриптор, идентификатор - не важно). При этом любое значение кроме 0 является допустимым, а 0 сигнализирует об ошибке.

2. Функция по идее не должна ничего возвращать, но удобнее, когда она при нормальном завершении возвращает 0, а в других случаях - код ошибки.

В обоих этих практически важных случаях целесообразно развести 0 и все остальные числа по разные стороны в дилемме истина-ложь. Тем более, что с одной стороны глупо никак не использовать 7 битов из 8, а с другой - делать дополнительную проверку, из которой все равно нельзя извлечь никакой пользы.

Кстати, такое решение присутствует даже в языках, в котороых, в отличие от С/С++ логические переменные представлены сущностями отличными от целых чисел, например, а Паскале.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Просто замечание.

Видно по коду и оформлению, что Клапауций - не профессиональный програмист.

Но он генерит очень хороший код.

...

Я, как-то давно , читал книгу какого-то американца (Голуб, может быть) по С ++. И там была изложена совершенно пародоксальная, для меня, мысль, подкрепленная статистикой. О том, что самые успешные програмисты получаются не из математиков, как я и многие тут, а из гуманитариев типа лингвистов и прочих словесников. Так что расово верный подход "не писать сравнение с 0" - понятен математику, но, возможно, есть иной взгляд на мир?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

wdrakula пишет:

что самые успешные програмисты получаются не из математиков, как я и многие тут, а из гуманитариев типа лингвистов и прочих словесников. 

просто замечание.

Клапауций гуманитарием никогда не был и не будет.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

andriano пишет:

Это очень удобно в реальной работе: очень часто имеет место одна из двух ситуаций:

ок. спасибо за разъяснение.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

...была изложена совершенно пародоксальная, для меня, мысль, подкрепленная статистикой. О том, что самые успешные програмисты получаются не из математиков, как я и многие тут, а из гуманитариев типа лингвистов и прочих словесников.

Я всегда придерживался мнения, что человек либо умеет выражать свои мысли (не важно: по-русски, на С, по-японски или на Фортране), либо - нет. И словесники с точки зрения выражения мысли словами, вроде бы, не должны отличаться на этом поприще в худшую сторону.

Потом, программист - это тот, кто формулирует алгоритм (например, по-русски), а тот, кто переводит алгоритм с русского на С, называется кодером.

Это как бы общие рассуждения по поводу "парадоксальности" утверждения.

Но есть еще одно - с точки зрения адекватности профориентации конкретного человека его способностям. Так вот, если человек, получивший техническое образование, стал гуманитарием (либо наоборот: гуманитарное - технарем), то, думаю, это свидетельствует об уровне способностей заметно выше среднего. Ну а у "гуманитарных гуманитариев" и "технических технарей" этот уровень в среднем недалек от среднего. Так что в среднем человек, сменивший специальность, обладет более высоким уровнем способностей.

Ну и почти последнее: для успешности на высоком уровне необходим достаточно широкий взгляд на вещи.

И еще один момент: если в СССР фундаментальное образование принято было давать технарям, то на Западе, наоборот, более фундаментальным образованием обладают гуманитарии. А статистика, я думаю, как раз "местная", т.е. учитывающая в основном западную модель образования.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

andriano пишет:

И еще один момент: если в СССР фундаментальное образование принято было давать технарям, то на Западе, наоборот, более фундаментальным образованием обладают гуманитарии. А статистика, я думаю, как раз "местная", т.е. учитывающая в основном западную модель образования.

та, да: и ещё один момент - после СССР образования нет(с)рептилоид