Arduino Uno R3 + Keypad LCD Shield полный юмор

Не помогает, уже и так и так пробовал.

Нет, это суровая правда жизни.

1 лайк

Сотрим здесь

И здесь

Ребят помогите. Лай -лай лай лай-лай лай лайл.)

Так где же ошибка? Не пончтно:

void clearLines(){
  lcd.setCursor(1, 0);
  lcd.println("                ");
  lcd.setCursor(0, 0);
  lcd.println("                ");
  lcd.setCursor(0, 0);
  
  //lcd.setCursor(0, 0);
 // lcd.print("                ");
}

В ДНК! :slightly_smiling_face: А для написанного выше есть готовая функция 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;
  }
  
}

Никак не пойму в чем тут орысел?

Ух тыж ё :open_mouth: Алиса как всегда:

1 лайк

Ну так ну так.

Красного, синего и ЗЕЛЁНОГО??

Угу. И либо Алиса такой плохой переводчик, либо, что то не то в Датском королевстве уикипедии. Оба варианта так себе.

Какой дисплей используете?

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 $.
Не пойму где ошибка.

А я уже писал в чем :grinning_face: Вам из всего интернета доступен только этот форум? Тогда вот подробный пример. “Наслаждайтесь”(с)

#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;
  }
  
}

Какого “энтер”?
А может кто перенесёт тему в ЧЧ или отвлечённые(особенно учитывая её название), а то столько картинок накопилось :neutral_face:

Возврат коретки и есть лишний энтер, лишний энтер хочу убрать. А как - не знаю.

Вы сами при печати в консоль добавляете этот энтер. Уберите его и все.

Не знаю за вотенто всё, но в Си(вроде) есть управляющие символы и для
возврата каретки для перехода: типа \r и \n
Добавьте в свои сообщения и посмотрите вывод типа printDisplay("Down\n"); хотя кому я это пишу :confused:

А если так:

и при этом

Неужели не доходит?