Официальный сайт компании Arduino по адресу arduino.cc
iButton и LCD дисплей
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 30/09/2015 - 18:58
Добрый день. Я новичек в Arduino. Решил попробовать свои силы на считывателе iButton, но застопорился на выводе ID ключа на дисплей. Сам код рабочий, в мониторе порта отображается ID, а на дисплей выводятся кракозябры. Не могу понять, как подправить код.
#include <OneWire.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> OneWire ds(10);// Определяем пин подключения к ключу byte addr[8]; // Обозначаем массив из 8 байт LiquidCrystal_I2C lcd(0x3F,16,2); /* Задаем адрес и размерность дисплея. При использовании LCD I2C модуля с дисплеем 20х04 ничего в коде изменять не требуется, cледует только задать правильную размерность */ void setup() { lcd.begin(); // Инициализация lcd lcd.backlight(); // Включаем подсветку // Курсор находится в начале 1 строки lcd.print("..Initializing.."); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print(" wait"); // Выводим текст delay (1000); Serial.begin(9600);}// Запускаем порт void loop() { lcd.clear(); //Clears LCD lcd.setCursor(0, 0); lcd.print(" Please Swipe"); lcd.setCursor(0, 1); lcd.print(" Your Card"); delay (1000); byte i; byte present = 0; byte data[12]; byte addr[8]; if (ds.search(addr)){// Если устройство подключено - считываем Serial.print("R="); for( i = 0; i < 8; i++) {// Запускаем цикл печати данных из массива if (addr[i] < 16) Serial.print ("0");// Дописываем недостающие нули Serial.print(addr[i], HEX);// Печатаем нужный байт в шестнадцатиричном виде Serial.print(" ");}// Печатаем пробел lcd.clear(); lcd.setCursor(0, 0); lcd.print("......Read......"); delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Done"); lcd.setCursor(0, 1); lcd.println( ); if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return;} if ( addr[0] != 0x01) { Serial.print("Device is not a DS1990A family device.\n"); return;} Serial.println();// В конце цикла переводим строку ds.reset();// Сбрасываем устройство delay(2000);}}// Задержка
Замени все lcd.println на lcd.print
В HEX выводится точно так же
lcd.print(var, HEX)
Ну и вместо lcd.clear() лучше перезаписывать только нужный участок экрана.
Спасибо, разобрался. Вот что получилось.
Ctrl+T - автоформатирование кода.
Спасибо, буду знать