Не помогает, уже и так и так пробовал.
Нет, это суровая правда жизни.
Сотрим здесь
И здесь
Ребят помогите. Лай -лай лай лай-лай лай лайл.)
Так где же ошибка? Не пончтно:
void clearLines(){
lcd.setCursor(1, 0);
lcd.println(" ");
lcd.setCursor(0, 0);
lcd.println(" ");
lcd.setCursor(0, 0);
//lcd.setCursor(0, 0);
// lcd.print(" ");
}
В ДНК!
А для написанного выше есть готовая функция clear()
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 4
#define BTN_SELECT 5
#define BTN_NONE 10
int detectButton() {
int keyAnalog = analogRead(A0);
if (keyAnalog < 100) {
// Значение меньше 100 – нажата кнопка right
return BTN_RIGHT;
} else if (keyAnalog < 200) {
// Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP
return BTN_UP;
} else if (keyAnalog < 400) {
// Значение больше 200, но меньше 400 – нажата кнопка DOWN
return BTN_DOWN;
} else if (keyAnalog < 600) {
// Значение больше 400, но меньше 600 – нажата кнопка LEFT
return BTN_LEFT;
} else if (keyAnalog < 800) {
// Значение больше 600, но меньше 800 – нажата кнопка SELECT
return BTN_SELECT;
} else {
// Все остальные значения (до 1023) будут означать, что нажатий не было
return BTN_NONE;
}
}
void clearLines(){
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print(" ");
//lcd.setCursor(0, 0);
// lcd.print(" ");
}
void printDisplay(String message){
//clearLines();
lcd.clear();
//Serial.print(message);
lcd.setCursor(0, 0);
lcd.print(message);
Serial.print(message);
// delay(1000);
// clearLine(1);
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 1 );
lcd.print("Art Master");
//delay(1000);
//delay(3000);
//lcd.setCursor(0, 0);
//lcd.print("Arduino Master");
}
String s="null";
void loop() {
if (Serial.available()) {
s = Serial.readString();
//lcd.setCursor(0, 0); // Первый символ первой строки
//lcd.setCursor(0, 1); // Первый символ второй строки
// clearLines();
lcd.clear();
printDisplay(s);
}
int button = detectButton();
switch (button) {
case BTN_UP:
printDisplay("Up");
//printDisplay("Up");
//Serial.println("Up");
delay(200);
break;
case BTN_DOWN:
//
printDisplay("Down");
//Serial.println("Down");
delay(200);
break;
case BTN_LEFT:
printDisplay("LEFT");
//Serial.println("Left");
delay(200);
break;
case BTN_RIGHT:
printDisplay("RIGHT");
delay(200);
break;
case BTN_SELECT:
printDisplay("Select");
delay(200);
//Serial.print("Se");
break;
default:
//printDisplay("Press any key");
break;
}
}
Никак не пойму в чем тут орысел?
Ну так ну так.
Красного, синего и ЗЕЛЁНОГО??
Угу. И либо Алиса такой плохой переводчик, либо, что то не то в Датском королевстве уикипедии. Оба варианта так себе.
Какой дисплей используете?
P.S. Если хотите, чтобы вам помогли, задайте правильно вопрос, включая членораздельное описание проблемы , с полным описанием железа и схему соединений
void clearLines(){
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print(" ");
//lcd.setCursor(0, 0);
// lcd.print(" ");
}
Юзаю:
Keypad Shield LCD с двумя строками с 16*2 $.
Не пойму где ошибка.
А я уже писал в чем
Вам из всего интернета доступен только этот форум? Тогда вот подробный пример. “Наслаждайтесь”(с)
#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal для работы с LCD дисплеем
LiquidCrystal lcd(2,3,4,5,6,7); // Объявляем объект библиотеки, указывая выводы дисплея (RS,E,D4,D5,D6,D7)
// Если используется 8 проводов шины данных, то указываем (RS,E,D0,D1,D2,D3,D4,D5,D6,D7)
void setup(){ //
lcd.begin(16, 2); // Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка)
lcd.print("LCD2004"); // Выводим текст "LDC1602", начиная с установленной позиции курсора
lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка)
lcd.print("www.iarduino.ru"); // Выводим текст "www.iarduino.ru", начиная с установленной позиции курсора
} //
//
void loop(){} // Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop
Java:
package j;
import arduino.*;
public class AA{
public static Arduino arduino;
static public String message="Nukll";
public static void de(int i) {
try{Thread.sleep(i); }
catch(Exception e){e.printStackTrace();}
}
public static void main(String[] args) {
//Thread t0=new Thread();
//t0.start();
//iii();
arduino = new Arduino("COM3",9600);
if(arduino.openConnection()){ //Без этого не работает
de(3000);
arduino.serialWrite("Hello_World");
while(true){
message=arduino.serialRead();
if(message.length()>0){
System.out.println(message);
// System.out.println("print ln");
}
}
}
}
}
Когда Нажимаю Left Right Up Down
Выводится вот таким макаром:
Left
Right
Up
Down
- с лишней кареткой в консоли java Netbeans.
Но код работает. Больше притензий не имею.
Как исправить код, чтобы не было этого энтер.
Ардуино:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 4
#define BTN_SELECT 5
#define BTN_NONE 10
int detectButton() {
int keyAnalog = analogRead(A0);
if (keyAnalog < 100) {
// Значение меньше 100 – нажата кнопка right
return BTN_RIGHT;
} else if (keyAnalog < 200) {
// Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP
return BTN_UP;
} else if (keyAnalog < 400) {
// Значение больше 200, но меньше 400 – нажата кнопка DOWN
return BTN_DOWN;
} else if (keyAnalog < 600) {
// Значение больше 400, но меньше 600 – нажата кнопка LEFT
return BTN_LEFT;
} else if (keyAnalog < 800) {
// Значение больше 600, но меньше 800 – нажата кнопка SELECT
return BTN_SELECT;
} else {
// Все остальные значения (до 1023) будут означать, что нажатий не было
return BTN_NONE;
}
}
void clearLines(){
lcd.setCursor(0, 0);
lcd.print(" ");
// lcd.setCursor(1, 0);
// lcd.print(" ");
//lcd.setCursor(0, 0);
// lcd.print(" ");
}
void printDisplay(String message){
//clearLines();
clearLines();
//Serial.print(message);
lcd.setCursor(0, 0);
lcd.print(message);
lcd.setCursor(0, 0);
Serial.print(message);
// delay(1000);
// clearLine(1);
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 1 );
lcd.print("Art Master");
//delay(1000);
//delay(3000);
//lcd.setCursor(0, 0);
//lcd.print("Arduino Master");
}
String s="null";
void loop() {
if (Serial.available()) {
s = Serial.readString();
//lcd.setCursor(0, 0); // Первый символ первой строки
//lcd.setCursor(0, 1); // Первый символ второй строки
// clearLines();
clearLines();
lcd.setCursor(0 , 0);
printDisplay(s);
}
int button = detectButton();
switch (button) {
case BTN_UP:
printDisplay("Up");
//printDisplay("Up");
//Serial.println("Up");
delay(200);
break;
case BTN_DOWN:
//
printDisplay("Down");
//Serial.println("Down");
delay(200);
break;
case BTN_LEFT:
printDisplay("LEFT");
//Serial.println("Left");
delay(200);
break;
case BTN_RIGHT:
printDisplay("RIGHT");
delay(200);
break;
case BTN_SELECT:
printDisplay("Select");
delay(200);
//Serial.print("Se");
break;
default:
//printDisplay("Press any key");
break;
}
}
Какого “энтер”?
А может кто перенесёт тему в ЧЧ или отвлечённые(особенно учитывая её название), а то столько картинок накопилось ![]()
Возврат коретки и есть лишний энтер, лишний энтер хочу убрать. А как - не знаю.
Вы сами при печати в консоль добавляете этот энтер. Уберите его и все.
Не знаю за вотенто всё, но в Си(вроде) есть управляющие символы и для
возврата каретки для перехода: типа \r и \n
Добавьте в свои сообщения и посмотрите вывод типа printDisplay("Down\n"); хотя кому я это пишу ![]()
А если так:
и при этом
Неужели не доходит?
