3 LCD-näyttö RS485-väylään






Etänäyttö edellisessä kirjoituksessa rakennetulle lämpömittarille.
Näiden kahden Arduino-laitteen RS485-moduulien välille tarvitaan pelkästään kaksi johdinta:
A-A ja B-B.



[vastaanota_rs_485.ino]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
const char omaId = 'M'; //Tämän laitteen tunnus huomaa että '' eikä "" !
const int lahetysPin = 2; //tässä pinnissä RS485-moduulin ohjaus rx/tx
LiquidCrystal_I2C lcd(0x27, 16, 2); //Määritellään 2-rivinen LCD-näyttö

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0); //testataan että näyttö toimii ok
  lcd.print("ABCDEFGHIJKLMNOP");
  lcd.setCursor(0, 1);
  lcd.print("0123456789012345");
  Serial.begin(9600);
  Serial.setTimeout(50);
  pinMode(lahetysPin, OUTPUT);
  digitalWrite(lahetysPin, LOW);
}

void loop() {
  if (Serial.available()) { //Jos sarjaportissa on dataa luettavaksi
    String saapuvaData = Serial.readString();
    if (saapuvaData.length() >= 5) { //Jos RS485:ltä saapuva sisältää tarpeeksi pitkän datan
      if (saapuvaData[1] == omaId) { //Jos viesti on kohdistettu tälle laitteelle
        saapuvaData.trim(); //Rivinvaihtomerkki pois
        tulostaLcd(saapuvaData);
      }
    }
  }
}

void tulostaLcd(String naytolle) {
  lcd.clear(); // Tyhjennetään näyttö (Parempi olisi vain tulostaa teksti ja sen jälkeen tyhjiä välilyöntejä, koska clear vilkuttaa näyttöä hieman)
  naytolle = naytolle.substring(4); // Ensimmäinen lämpötila alkaa tästä kohdasta
  while (naytolle.indexOf(";") > 0) { //Käydään saatua merkkijonoa niin kauan läpi, kun siinä on tulostamattomia lämpötiloja. Lämpötila päättyy aina ";" merkkiin
    int loppu = naytolle.indexOf(";"); //Etsitään kohta, johon kyseinen lämpötila päättyy merkkijonossa
    String lampo = naytolle.substring(0, loppu); //Tässä varsinainen lämpötila muodossa "1=25.12"
    int anturiNumero = naytolle.substring(0,1).toInt();// 1=25.12 eka merkki kertoo mikä anturi on kyseessä.
    naytolle = naytolle.substring(loppu + 1); //Poistetaan rivistä jo käsitelty osuus
    if (anturiNumero == 0) lcd.setCursor(8, 0); //anturi 0 yläoikea
    if (anturiNumero == 1) lcd.setCursor(0, 1); //anturi 1 ala vasen
    if (anturiNumero == 2) lcd.setCursor(8, 1); //anturi 2 ala oikea
    lcd.print(lampo.substring(2)); //Jätetään vielä anturinumero "1=" tulosteesta pois kun näytöllä ei ole tilaa..
    anturiNumero++;
  }
}

Kommentit

Tämän blogin suosituimmat tekstit

0 Nyymi Nysvää

2 Ensimmäinen projekti: Lämpömittari RS485-väylään

4 LoRa-radiomoduulien testailua