Se afișează postările cu eticheta afisaj serial. Afișați toate postările
Se afișează postările cu eticheta afisaj serial. Afișați toate postările

vineri, 24 ianuarie 2020

Ceas NTP pe afisaj serial

   Am schimbat placa de dezvoltare ce comanda afisajul cu o placa NodeMCU (cu ESP8266) realizand un ceas ce preia ora d ela un server NTP prin conectarea la reteaua wi-fi locala.
   In articolul anterior, placa de dezvoltare Arduino Nano avea un modul RTC cu DS3231 (DS1307).
   La placa de dezvoltare este legat afisajul la pinul D7 (GPIO13), iar programul rescris ce foloseste tot libraria ArduinoSerLCD se numeste NTP_clock_on_serial_lcd.ino
    Cateva poze:
 
si 2 filmulete:

    Am modificat modul de obtinere ora de la serverul NTP, sketch-ul fiind acum NTP_clock_on_serial_lcd2.ino. Am facut alte 2 filmulete:

Ceas RTC cu afisaj serial

   Am intrat in posesia unui afisaj alfanumeric urias cu 20 de coloane si 4 randuri cu o interfata seriala realizata cu PIC de tip BPK-000, despre care am gasit informatii la BPK-000 Programmer's Reference
   Mai folosisem acum vreo 6 ani un afisaj similar, doar ca era de tip 1602, publicand atunci articolul Afisaj serial LCD 16x2 (1602)
     Schema de conectare este forte simpla:
iar libraria testata si atunci si acum este cea de la https://github.com/scogswell/ArduinoSerLCD. doar ca se foloseste logica negativa, dupa cum apare in materialul Arduino "Hello World" for BPI-216 Serial LCDs
   Am facut 2 filmulte:


    Am zis sa fac ceva util, un ceas, asa ca am conectat si un modul de ceas RTC si am creat si niste caractere mari pentru el.
ceasul aratand asa:
   Programul scris de mine se numeste RTC_clock_on_serial_lcd.ino si la placa Arduino (Nano in cazul meu) am legat la pinul D4 intrarea seriala a afisajului, iar modulul de ceas RTC la pinii i2c (A4 la SDA si A5 la SCL)

    Am realizat alte 2 filmulete, de data asta cu ceasul:

luni, 5 mai 2014

Afisaj serial LCD 16x2 (1602)

 
   Pentru niste teste, am intrat, provizoriu, in posesia unui afisaj serial LCD cu 16 coloane si 2 randuri, a carui comanda se face pe un singur fir (Rx), bineinteles ca, mai sunt cele de alimentare VDD (5V) si GND (masa).
   Modelul cu caractere rosii pe fundal negru este produs si distribuit de cei de la SparkFun Electronics (vezi Serial Enabled 16x2 LCD - Red on Black 5V) si a fost achizitionat din Romania de la Robofun (vezi LCD 16X2 PENTRU SERIAL - ROSU PE NEGRU, 5V).

   Pentru a-l testa, am folosit placa Arduino construita de Nelu:
   Primele teste le-am facut dupa ce m-am inspirat din articolele Serial LCD Kit Quickstart Guide si Serial Enabled LCD Kit Datasheet realizand si un filmulet numit testare LCD1602 serial de la SparkFun.
   Sketch-ul testat de mine, cu succes, si prezentat in filmulet este:

// https://www.sparkfun.com/tutorials/289
// adapted by niq_ro from http://nicuflorica.blogspot.com/

#include <SoftwareSerial.h>

SoftwareSerial lcd(2, 3);  // This is required, to start an instance of an LCD (RX at pin D3)

void setup()
{
  lcd.begin(9600);  // Start the LCD at 9600 baud
}

void loop()
{
// Clear the display
 lcd.write(0xFE);  // send the special command
 lcd.write(0x01);  // send the clear screen command
// move the cursor at first line and firs colon  
  lcd.write(0xFE);  // send the special command
  lcd.write(0x80);  // send the set cursor command
// print a fisrt text
  lcd.print("www.tehnic.go.ro");
  delay (2000); 
// print second text  
  lcd.print(" made by niq_ro");
  delay (2000); 
   }
   Pinul Rx este conectat la D3 de la Arduino.
   Ulterior, am folosit liblioteca serLCD prezentata si la Arduino pe site, in articolul serLCD - Sparkfun serLCD Library, care se poate descarca de la https://github.com/scogswell/ArduinoSerLCD.
 
 
   Filmuletul testare LCD1602 serial de la SparkFun (2) prezinta exemplul din librarie, in care pinul Rx al afisajului este conectat la D2 de la placa Arduino:
   Am depistat un articol numit Serial LCD Module publicat pe ElectronicsForYou si foloseste un Atmega8 cu oscilator intern la 8MHz, iar partea de firmware se gaseste la https://github.com/pranjal-joshi/serialLCD-library-Arduino-and-Raspberry-Pi.
   La "inceputurile" mele cu Arduino, am prezentat un sketch in care se deplaseaza doar un rand pe afisajul LCD16x2 (vezi Arduino si un afisaj LCD clasic (16 caractere si 2 randuri), asa ca am adaptat si pentru cel serial, dupa cum se vdede in filmuletul numit LCD1602 serial - text deplasabil doar un rand
   Noul sketch este:
// http://playground.arduino.cc/Code/SerLCD
// https://github.com/scogswell/ArduinoSerLCD
// original sketch in 01.2013 by niq_ro from http://nicuflorica.blogspot.com/
// adapted for serial LCD module by niq_ro in 05.2014, Craiova

#include <SoftwareSerial.h>
#include <SerLCD.h>

// This Arduino sketch using SerLCD library's Steven Cogswell 
// In this sketch the Rx pin of the SerLCD is connected to 
// Arduino digital pin 2 (Tx)  We set the SoftwareSerial 
// Rx to 0 because the SerLCD has no facility to transmit
// back. 
//
SoftwareSerial NSS(0,2);
SerLCD theLCD(NSS); 

int timp = 500; // delay between scenes

void setup()
{
  // Remember to start the NewSoftSerial port before doing things with the SerLCD
  NSS.begin(9600); 
  Serial.begin(9600);
  // This will attempt to initialize the display to blank with the backlight on 
  theLCD.begin();   
}


// Silly looking demo that just loops through features of SerLCD
// 
void loop()
{
 
  // Some text at positions
  theLCD.clear(); 
   theLCD.setBacklight(140);
  theLCD.setPosition(1,0); 
  theLCD.print("www.tehnic.go.ro"); 
  delay(2000); 
  theLCD.setBacklight(157);
  theLCD.setPosition(2,1); 
  theLCD.print("made by niq_ro"); 
  delay(2000); 
   
  theLCD.clear();
  theLCD.setBacklight(157);
  delay(timp);  
  
  theLCD.setPosition(1,15); 
  theLCD.print("w"); 
  delay(timp); 
 
  theLCD.setPosition(1,14); 
  theLCD.print("ww"); 
  delay(timp); 

  theLCD.setPosition(1,13); 
  theLCD.print("www"); 
  delay(timp); 

  theLCD.setPosition(1,12); 
  theLCD.print("www."); 
  delay(timp); 

  theLCD.setPosition(1,11); 
  theLCD.print("www.t"); 
  delay(timp); 

  theLCD.setPosition(1,10); 
  theLCD.print("www.te"); 
  delay(timp); 

  theLCD.setPosition(1,9); 
  theLCD.print("www.teh"); 
  delay(timp); 
  
  theLCD.setPosition(1,8); 
  theLCD.print("www.tehn"); 
  delay(timp); 
  
  theLCD.setPosition(1,7); 
  theLCD.print("www.tehni"); 
  delay(timp); 

  theLCD.setPosition(1,6); 
  theLCD.print("www.tehnic"); 
  delay(timp); 

  theLCD.setPosition(1,5); 
  theLCD.print("www.tehnic."); 
  delay(timp);   
  
  theLCD.setPosition(1,4); 
  theLCD.print("www.tehnic.g"); 
  delay(timp);   

  theLCD.setPosition(1,3); 
  theLCD.print("www.tehnic.go"); 
  delay(timp);   

  theLCD.setPosition(1,2); 
  theLCD.print("www.tehnic.go."); 
  delay(timp); 

  theLCD.setPosition(1,1); 
  theLCD.print("www.tehnic.go.r"); 
  delay(timp);   
  
  theLCD.setPosition(1,0); 
  theLCD.print("www.tehnic.go.ro"); 
  delay(timp);   

//-------------------------

  theLCD.setPosition(1,0); 
  theLCD.print("www.tehnic.go.ro"); 
  delay(timp);
  
  theLCD.setPosition(2,15); 
  theLCD.print("m"); 
  delay(timp); 

  theLCD.setPosition(2,14); 
  theLCD.print("ma"); 
  delay(timp); 

  theLCD.setPosition(2,13); 
  theLCD.print("mad"); 
  delay(timp); 

  theLCD.setPosition(2,12); 
  theLCD.print("made"); 
  delay(timp);
  
  theLCD.setPosition(2,11); 
  theLCD.print("made "); 
  delay(timp); 

  theLCD.setPosition(2,10); 
  theLCD.print("made b"); 
  delay(timp); 

  theLCD.setPosition(2,9); 
  theLCD.print("made by"); 
  delay(timp); 

  theLCD.setPosition(2,8); 
  theLCD.print("made by "); 
  delay(timp); 

  theLCD.setPosition(2,7); 
  theLCD.print("made by n"); 
  delay(timp); 

  theLCD.setPosition(2,6); 
  theLCD.print("made by ni"); 
  delay(timp); 

  theLCD.setPosition(2,5); 
  theLCD.print("made by niq"); 
  delay(timp); 

  theLCD.setPosition(2,4); 
  theLCD.print("made by niq_"); 
  delay(timp); 

  theLCD.setPosition(2,3); 
  theLCD.print("made by niq_r"); 
  delay(timp); 

  theLCD.setPosition(2,2); 
  theLCD.print("made by niq_ro"); 
  delay(timp); 

  theLCD.setPosition(2,1); 
  theLCD.print("made by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,1); 
  theLCD.print("made by        "); 
  delay(timp); 

  theLCD.setPosition(2,1); 
  theLCD.print("made by niq_ro"); 
  delay(timp); 

  theLCD.setPosition(2,1); 
  theLCD.print("made by        "); 
  delay(timp); 

  theLCD.setPosition(2,1); 
  theLCD.print("made by niq_ro"); 
  delay(3000); 
  
// -------------------------------  
  
  theLCD.setPosition(2,0); 
  theLCD.print("made by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("ade by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("de by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("e by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print(" by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("by niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("y niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print(" niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("niq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("iq_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("q_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("_ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("ro "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print("o "); 
  delay(timp); 

  theLCD.setPosition(2,0); 
  theLCD.print(" "); 
  delay(timp); 

// --------------------

  theLCD.setPosition(1,0); 
  theLCD.print("ww.tehnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("w.tehnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print(".tehnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("tehnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("ehnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("hnic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("nic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("ic.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("c.go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print(".go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("go.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("o.ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print(".ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("ro "); 
  delay(timp);   

  theLCD.setPosition(1,0); 
  theLCD.print("o "); 
  delay(1000);   

}
PS: Am primit de la Liviu Roman o varianta "curata" de sketch.. pe care am mai pus si eu cate o imbunatatire... de imagine :) obtinand filmuletul LCD1602 serial - text deplasabil doar un rand (2)
// original sketch by Liviu Roman
// adapted sketch for Arduino by Nicu Florica (aka niq_ro)

#include <SoftwareSerial.h>
#include <SerLCD.h>

SoftwareSerial NSS(0,2);
SerLCD theLCD(NSS); 

String randulUnu = "www.tehnic.go.ro";
String randulDoi = "made by niq_ro";
int lengthRandulUnu = randulUnu.length();
int lengthRandulDoi = randulDoi.length();

int timp = 500;

int start;
int finish;

void setup()
{
 NSS.begin(9600); 
 Serial.begin(9600);
 theLCD.begin();   
}

void loop()
{ 
 theLCD.clear();
 theLCD.setBacklight(157);

 start = 0;
 finish = 1;
 for (int i=15; i >= 0; i--){
  theLCD.setPosition(1,i);
  theLCD.print(randulUnu.substring(start,finish)); 
  ++finish;
    delay(timp);
  } 
 delay(1000);

 start = 0;
 finish = 1;
 for (int i=15; i >=0; i--){
  theLCD.setPosition(2,i);
  theLCD.print(randulDoi.substring(start,finish)); 
  if (i<2) theLCD.print(" ");
  ++finish;
  delay(timp);
 }

 delay(1000); 

 for (int i=0; i <= lengthRandulDoi; i++){
  theLCD.setPosition(2,0);
  theLCD.print(randulDoi.substring(i,lengthRandulDoi)); 
  theLCD.print(" ");            
  delay(timp);
 }

 delay(1000); 
 
 for (int i=0; i <= lengthRandulUnu; i++){
  theLCD.setPosition(1,0);
  theLCD.print(randulUnu.substring(i,lengthRandulUnu)); 
  theLCD.print(" "); 
  delay(timp);
 }

 delay(1000); 
}

7.5.2014
   Am facut un filmult de o calitate mai buna, care se numeste LCD1602 serial - text deplasabil doar un rand (3)