von dieser Seite aus wird in die Untermenüs verzweigt
Grundprogramm und Logik
#include <SPI.h> //Fuer Serielle Verbindung #include <CleO.h> //CleO Bibliothek #include <Wire.h> //I2C Bibliothek #include <stdlib.h> //Für Zahlendarstellung #include "DHT.h" //Für Tempsensor #define I2C_OUT_ADDR 64 >> 1 // I2C-Addresse als 7 Bit #define I2C_IN_ADDR 112 >> 1 // I2C-INPUT-Addresse als 7 Bit #define I2C_433MHz_ADDR 16 >> 1 // I2C-433MHz-Addresse als 7 Bit #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 #define DHTPIN 2 // Benutzter Pin auf dem NerO byte VAL=0; //Glob. Variable für Digital Output int globalCurrSite = 4, del=150; //Glob. Variable für derzeitige Seite und delay bei Buttonpress bool penDownOnBack = false; //Glob. Variable für Startseite-Button int16_t previousDur = 0, previousTag = 0; //Glob. Variable für Tag-Management DHT dht(DHTPIN, DHTTYPE); //DHT für Temperatursensor void setup() { Serial.begin(9600); //Serielle Schnittstelle konfigurieren CleO.begin(); //CleO initialisieren Wire.begin(); //Wire initialisieren dht.begin(); //dht initialisieren setSystemcode(); //Systemcode übertragen } void setSystemcode() { Wire.beginTransmission(I2C_433MHz_ADDR); Wire.write(0); //Register Systemcode einstellen Wire.write(0); //DIP1 = ON Wire.write(0); //DIP2 = ON Wire.write(0); //DIP3 = ON Wire.write(15); //DIP4 = OFF Wire.write(15); //DIP5 = OFF Wire.endTransmission(); } void loop() { initSite(); } void initSite() { //Seiten-Weiche switch(globalCurrSite) { case 0: display_start(); control_start(); break; case 1: display_do(); control_do(); break; case 2: display_di(); control_di(); break; case 3: display_terra(); control_terra(); break; case 4: display_funk(); control_funk(); } }
Code für die Startseite
//Variablen für Touchlogik bool penDownOn20 = false, penDownOn21 = false, penDownOn22 = false, penDownOn23 = false; bool butADwn=false, butBDwn=false; void display_start() { CleO.Start(); int tiefeBt1 = 100; int tiefeBt2 = tiefeBt1+75; int tiefeBt3 = tiefeBt2+75; int tiefeBt4 = tiefeBt3+75; //int tiefeBt5 = tiefeBt4+75; //int tiefeBt6 = tiefeBt5+75; CleO.StringExt(FONT_MEDIUM, 160, 0, BLUE, TM, 0, 0, "HOKA I2C DEMO"); CleO.RectangleExt(0, 50, 350, 500, WHITE, TL, 0, 0); CleO.LineWidth(30); if (penDownOn20) { penDownOn20 = false; globalCurrSite = 1; } else if (penDownOn21) { penDownOn21 = false; globalCurrSite = 2; } else if (penDownOn22) { penDownOn22 = false; globalCurrSite = 3; } else if (penDownOn23) { penDownOn23 = false; globalCurrSite = 4; } CleO.Tag(20); CleO.LineColor(BLUE); CleO.Line(0, tiefeBt1, 350, tiefeBt1); CleO.StringExt(FONT_MEDIUM, 160, tiefeBt1, WHITE, MM, 0, 0, "Digital Output"); CleO.Tag(21); CleO.LineColor(BLUE); CleO.Line(0, tiefeBt2, 350, tiefeBt2); CleO.StringExt(FONT_MEDIUM, 160, tiefeBt2, WHITE, MM, 0, 0, "Digital Input"); CleO.Tag(22); CleO.LineColor(BLUE); CleO.Line(0, tiefeBt3, 350, tiefeBt3); CleO.StringExt(FONT_MEDIUM, 160, tiefeBt3, WHITE, MM, 0, 0, "Terrarium Daten"); CleO.Tag(23); CleO.LineColor(BLUE); CleO.Line(0, tiefeBt4, 350, tiefeBt4); CleO.StringExt(FONT_MEDIUM, 160, tiefeBt4, WHITE, MM, 0, 0, "Funkmodul"); CleO.StringExt(FONT_SANS_2, 160, 440, BLUE, TM, 0, 0, "www.horter.de"); CleO.Show(); } void control_start() { int16_t x, y, dur, tag; CleO.TouchCoordinates(x, y, dur, tag); //Tag des Beruehrungspunktes einlesen if (previousDur == 0 && dur != 0) //Wenn previousDur == 0 -> beruehrung aktiv und Dauer der Beruehrung nicht 0 { previousTag = tag; //Tag zwischenspeichern previousDur = 1; //Setze previousDur = 1 fuer "wurde gedrueckt" if (tag == 20) //Button-Tag herausfinden penDownOn20 = true; //entsprechende bool-Variable schalten (Weitere Verarbeitung in "display_do()") else if (tag == 21) penDownOn21 = true; else if (tag == 22) penDownOn22 = true; else if (tag == 23) penDownOn23 = true; } else if (previousDur == 1 && dur == 0) { previousDur = 0; if (previousTag == 20) penDownOn20 = false; else if (previousTag == 21) penDownOn21 = false; else if (previousTag == 22) penDownOn22 = false; else if (previousTag == 23) penDownOn23 = false; } }
Der Code der einzelnen Bildschirmseiten finden Sie hier:
FTDI NerO + Startseite
FTDI NerO + I2C-Digital Output
FTDI NerO + I2C-Digital Input
FTDI NerO + AM2322 T/F-Sensor
Den kompletten Code kann hier heruntergeladen werden:
Demoprogramm für Arduino-IDE FTDI NerO und CleO35 mit I2C-Modulen (614 Downloads)