|
Магазин Arduino | WIKI | Регистрация | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
28.09.2014, 00:38 | #1 |
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 |
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()); } Код:
#!/usr/bin/python # -*- coding: utf-8 -*- file = open('/dev/ttyUSB0', 'w') file.write("this is parta!!!!!!!") file.close() при выполнении скрипта выводиться только первая буква один раз t. такое же поведение и с командой типа Код:
echo "bla bla" > /dev/ttyUSB0 Но если выполнять в интерпретаторе, то все огонь Пробовал разные настройки порта, задержки в скрипте, не дало результата. Может кто сталкивался с данной проблемой? Или парочку идей для решения проблемы? |
28.09.2014, 12:00 | #2 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821 |
Re: hd44780 + Arduino + Openwrt
А если так попробовать?
Код:
void loop() { if(Serial.available()); lcd.write(Serial.read()); } |
28.09.2014, 17:24 | #3 |
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 |
Re: hd44780 + Arduino + Openwrt
И так тоже пробывал.
|
28.09.2014, 19:11 | #4 |
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311 |
Re: hd44780 + Arduino + Openwrt
lcd.write запишет символ в LCD, а lcd.print строку. И при приёме из порта, надо дождаться конца строки.
|
28.09.2014, 22:42 | #5 |
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 |
Re: hd44780 + Arduino + Openwrt
Конец строки тоже пытался отловить, не увы, не дало результата.
Забыл сказать что под windows все работает как задумано, а под Openwrt получается такая лабуда. Среди опытов заметил если выставить скорость равную 115200, то на экран попадает ровно 8 символов. |
03.10.2014, 20:48 | #6 |
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 |
Re: hd44780 + Arduino + Openwrt
Победа!
Выкладываю работающий скетч для 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() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|