Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2014, 00:38   #1
barmaley
Junior Member
 
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0
barmaley is an unknown quantity at this point
По умолчанию hd44780 + Arduino + Openwrt

Форум читаю давно, пусть не смущает дата моей регистрации
Суть проблемы имеем простенький скетч для Arduino Pro Mini, который выводит полученные символы на наш дисплей.
Код:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  lcd.begin(20, 4);
  Serial.begin(9600);
}

void loop()
{
  while(Serial.available() == 0);
  lcd.write(Serial.read());
}
и скрипт на Python

Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
file = open('/dev/ttyUSB0', 'w')
file.write("this is parta!!!!!!!")
file.close()
И должно все работать. НО!
при выполнении скрипта выводиться только первая буква один раз t.
такое же поведение и с командой типа
Код:
echo "bla bla" > /dev/ttyUSB0
Нажмите на изображение для увеличения
Название: gysVAR5X12Y.jpg
Просмотров: 303
Размер:	123.3 Кб
ID:	1922

Но если выполнять в интерпретаторе, то все огонь

Нажмите на изображение для увеличения
Название: 4C_BibuXqpk.jpg
Просмотров: 298
Размер:	110.5 Кб
ID:	1923
Нажмите на изображение для увеличения
Название: 123.png
Просмотров: 330
Размер:	7.1 Кб
ID:	1924

Пробовал разные настройки порта, задержки в скрипте, не дало результата.
Может кто сталкивался с данной проблемой? Или парочку идей для решения проблемы?
barmaley вне форума   Ответить с цитированием
Старый 28.09.2014, 12:00   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: hd44780 + Arduino + Openwrt

А если так попробовать?
Код:
void loop()
{
  if(Serial.available());
  lcd.write(Serial.read());
}
Admin вне форума   Ответить с цитированием
Старый 28.09.2014, 17:24   #3
barmaley
Junior Member
 
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0
barmaley is an unknown quantity at this point
По умолчанию Re: hd44780 + Arduino + Openwrt

И так тоже пробывал.
barmaley вне форума   Ответить с цитированием
Старый 28.09.2014, 19:11   #4
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: hd44780 + Arduino + Openwrt

lcd.write запишет символ в LCD, а lcd.print строку. И при приёме из порта, надо дождаться конца строки.
stD вне форума   Ответить с цитированием
Старый 28.09.2014, 22:42   #5
barmaley
Junior Member
 
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0
barmaley is an unknown quantity at this point
По умолчанию Re: hd44780 + Arduino + Openwrt

Конец строки тоже пытался отловить, не увы, не дало результата.
Забыл сказать что под windows все работает как задумано, а под Openwrt получается такая лабуда.
Среди опытов заметил если выставить скорость равную 115200, то на экран попадает ровно 8 символов.
barmaley вне форума   Ответить с цитированием
Старый 03.10.2014, 20:48   #6
barmaley
Junior Member
 
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0
barmaley is an unknown quantity at this point
По умолчанию Re: hd44780 + Arduino + Openwrt

Победа!

Нажмите на изображение для увеличения
Название: 20141003_204305.jpg
Просмотров: 342
Размер:	297.1 Кб
ID:	1935

Выкладываю работающий скетч для Arduino и скрипт на python
По поводу скетча, для экрана 20х4, умеет работать с русским языком.
Функцию перекодировки взял у DiHalt, LiquidCrystalRus как я понял не умеет работать с экранами 20х4 плюсом же идут мелкие не понятные баги.

Скетч:
Код:
#include <LiquidCrystal.h>

/******/
//Таблица перекодировки в русские символы.
static const unsigned char PROGMEM convert_HD44780[64] =
{
	0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,
	0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,
	0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,
	0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1,
	0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,
	0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,
	0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,
	0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7
};

static uint8_t lcd_rus(uint8_t c)
{

	if  (c > 191)
	{
		c -=192;
		c= pgm_read_byte(&convert_HD44780[c]);
	}

	return c;
}

/******/


char s[21]; 
int column = 0;
int rows = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){

  lcd.begin(20, 4);
  lcd.cursor();

  Serial.begin(115200);
}
void loop()
{
  while(1)
  {
    while(Serial.available() == 0);
    
    s[column] = lcd_rus(Serial.read());  
    
    if(s[column] == '\n' || column > 19)
    {
      s[column] = '\0';
      column = 0;
      
      lcd.print(s);
     
      if(rows >= 3)
        rows = 0;
      else
        rows++;
      
      lcd.setCursor(0, rows);
        
      Serial.println(s);
      break;

    }
    column++;
  }
}

Скрипт Python
Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import serial
import time
import os
ser = serial.Serial('/dev/ttyUSB0', 115200)
str = unicode("Привет cyber-place.ru\nМой ник: barmaley\n", "UTF-8")
str = str.encode('CP1251')
ser.write(str)
time.sleep(2)
ser.close()
barmaley вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 20:01. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика