// Programm für Arduino Giga mit Bildschirm // Giga_011_Poti_Scala // LED_PR1 = D51/PE5, LED_PR2 = D40/PE6, PR1 = A11/PA0_C, PR2 = A10/PA1_C // Arbeit mit class als Lib #include #include #include "Fonts/FreeMonoBold18pt7b.h" #include #include #define PR1 A11 #define PR2 A10 #define LED_PR1 51 #define LED_PR2 40 #define DRE_A 35 #define DRE_B 36 #define DRE_KN 34 #define GIGA_RED 86 #define GIGA_GREEN 87 #define GIGA_BLUE 88 uint16_t WERT_L, WERT_R; long meintime = 0; int16_t zaehler = 0; long dauer = 0; #define SYMB_LINKE_ZAHL 5 char symb_linke[][SYMB_LINKE_ZAHL] = {"+6HT","+5HT","+4HT","+3HT","+2HT","+1HT"," 0HT","-1HT","-2HT","-3HT","-4HT","-5HT","-6HT"}; #define SYMB_RECHTE_ZAHL 5 char symb_rechte[][SYMB_RECHTE_ZAHL] = {"+50%","+25%","+15%","+10%"," +8%"," +5%"," +3%"," +2%"," +1%"," 0 "," -1%"," -2%"," -3%"," -5%"," -8%","-10%","-15%","-25%","-50%"}; #define SYMB_UNTEN_ZAHL 4 char symb_unten[][SYMB_UNTEN_ZAHL] = {" 2%","14%","26%","38%","50%","62%","74%","86%","98%"}; // Objekte erzeugen GigaDisplay_GFX display; Maxim_scala scala_links(630, 35, 655, 475, 0, 0, &display); // Scala schaffen: xo,yo,xu,yu,verthor,nulluo,GigaDisplay_GFX Maxim_scala scala_rechts(750, 35, 775, 475, 0, 0, &display); // Scala schaffen xo,yo,xu,yu,verthor,nulluo,GigaDisplay_GFX Maxim_scala scala_unten(200, 420, 550, 445, 0, 0, &display); // Scala schaffen xo,yo,xu,yu,verthor,nulluo,GigaDisplay_GFX // Beschreibung des Konstruktors. xo,yo,xu,yu - Äußere Abmessungen des Rahmens, // verthor 0/1 vertikal/horizontal, nulluo 0 = Null unten/links, 1 = Null oben/rechts // Hilfsfunktion zum Formatieren von Zahlen void probel10b(uint16_t wert){ if(wert < 1000) display.print(" "); if(wert < 100) display.print(" "); if(wert < 10) display.print(" "); } // Hilfsfunktion für Korrektur der Wert-Mitte, da Center Detent nicht genau in der Mitte liegt uint16_t wertkorr(uint16_t inwert, uint16_t vollscala, int16_t kormit){ // inwert = Eingangswert, vollscala = 100% Scala, kormit = Korrektur für die Mitte int16_t kormitteil = kormit/9; uint16_t teiler = vollscala/20; if(((inwert >= 0) && (inwert < teiler))||((inwert > teiler*19) && (inwert <= vollscala))) return inwert; if(((inwert >= teiler) && (inwert < teiler*2))||((inwert > teiler*18) && (inwert <= teiler*19))) return (inwert += kormitteil); if(((inwert >= teiler*2) && (inwert < teiler*3))||((inwert > teiler*17) && (inwert <= teiler*18))) return (inwert += 2*kormitteil); if(((inwert >= teiler*3) && (inwert < teiler*4))||((inwert > teiler*16) && (inwert <= teiler*17))) return (inwert += 3*kormitteil); if(((inwert >= teiler*4) && (inwert < teiler*5))||((inwert > teiler*15) && (inwert <= teiler*16))) return (inwert += 4*kormitteil); if(((inwert >= teiler*5) && (inwert < teiler*6))||((inwert > teiler*14) && (inwert <= teiler*15))) return (inwert += 5*kormitteil); if(((inwert >= teiler*6) && (inwert < teiler*7))||((inwert > teiler*13) && (inwert <= teiler*14))) return (inwert += 6*kormitteil); if(((inwert >= teiler*7) && (inwert < teiler*8))||((inwert > teiler*12) && (inwert <= teiler*13))) return (inwert += 7*kormitteil); if(((inwert >= teiler*8) && (inwert < teiler*9))||((inwert > teiler*11) && (inwert <= teiler*12))) return (inwert += 8*kormitteil); return (inwert += kormit); } void setup() { // put your setup code here, to run once: display.begin(); //init library display.setRotation(3); // umgekehrt display.fillScreen(0); display.setTextColor(ROT,SCHWARZ); display.setCursor(10,40); //x,y display.setFont(NULL); display.setTextSize(4); //adjust text size display.print("MEN\x09a f\x081r Gottesdienst"); pinMode(LED_PR1, OUTPUT); pinMode(LED_PR2, OUTPUT); pinMode(GIGA_RED, OUTPUT); pinMode(GIGA_GREEN, OUTPUT); pinMode(GIGA_BLUE, OUTPUT); pinMode(DRE_A, INPUT); pinMode(DRE_B, INPUT); pinMode(DRE_KN, INPUT); scala_links.setmodescala(1,1,0,0,1,0); // Scala und Rahmen: scalaein,rahmenein,verthor,nulluo,gradient,grund scala_links.setmodemetka(1,1,1,1,1); // Marker: mitme,mitmetl,mitmetr,metlinks,metrechts scala_links.setmodezif(1,0,1,1); // Zeichen: ziflinks,zifrechts,zifpos,ziftyp scala_links.setscalaxy(630, 35, 655, 475); // xo,yo - Ecke oben links von Scala (mit Rahmen zusammen), xu,yu - Ecke unten rechts von Scala (mit Rahmen zusammen) scala_links.setvollscala(1023.0); // Wert für volle (100%) Scala scala_links.setrammetka(4, 14, 14, 4, 10, 2); // rdicke,mzahl,m_metka,m_mdicke,metka,mdicke scala_links.setabstand(50, 6, 10, 6); // zifscala_xl,zifscala_yl,zifscala_xr,zifscala_yr scala_links.setfarbe(ROT, GRUENGELB, GELB, WASSER, BLAU, SCHWARZ); // scala,scalaanf,rahmen,ziffer,grund,hintergrund scala_links.setzif(6, -1); // anfzif = Wert für oberste/rechte Ziffer bei Marker, difzif = Zifferschritt scala_links.setsymbol(*symb_linke, SYMB_LINKE_ZAHL); // *sym = Zeiger auf Zeichenarray für Scala, symzif = Zahl von Zeichen in Zeile einschließlich \0 in der Zeile bei Marker scala_links.scala(1023,1); // linke Scala in voller Wert mit Rahmen zeichnen scala_rechts.setmodescala(1,1,0,0,0,0); // Scala und Rahmen: scalaein,rahmenein,verthor,nulluo,gradient,grund scala_rechts.setmodemetka(1,1,1,1,1); // Marker: mitme,mitmetl,mitmetr,metlinks,metrechts scala_rechts.setmodezif(1,0,0,0); // Zeichen: ziflinks,zifrechts,zifpos,ziftyp scala_rechts.setscalaxy(750, 35, 775, 475); // xo,yo - Ecke oben links von Scala (mit Rahmen zusammen), xu,yu - Ecke unten rechts von Scala (mit Rahmen zusammen) scala_rechts.setvollscala(1023.0); // Wert für volle (100%) Scala scala_rechts.setrammetka(4, 19, 14, 4, 10, 2); // rdicke,mzahl,m_metka,m_mdicke,metka,mdicke scala_rechts.setabstand(55, 6, 20, 6); // zifscala_xl,zifscala_yl,zifscala_xr,zifscala_yr scala_rechts.setfarbe(ROT, GRUEN, GELB, WASSER, BLAU, SCHWARZ); // scala,scalaanf,rahmen,ziffer,grund,hintergrund scala_rechts.setzif(9, -1); // anfzif = Wert für oberste/rechte Ziffer bei Marker, difzif = Zifferschritt scala_rechts.setsymbol(*symb_rechte, SYMB_RECHTE_ZAHL); // *sym = Zeiger auf Zeichenarray für Scala, symzif = Zahl von Zeichen in Zeile einschließlich \0 in der Zeile bei Marker scala_rechts.scala(1023,1); // rechte Scala in voller Wert mit Rahmen zeichnen scala_unten.setmodescala(1,1,1,0,1,0); // Scala und Rahmen: scalaein,rahmenein,verthor,nulluo,gradient,grund scala_unten.setmodemetka(1,1,1,1,1); // Marker: mitme,mitmetl,mitmetr,metlinks,metrechts scala_unten.setmodezif(1,1,0,1); // Zeichen: ziflinks,zifrechts,zifpos,ziftyp scala_unten.setscalaxy(200, 420, 550, 445); // xo,yo - Ecke oben links von Scala (mit Rahmen zusammen), xu,yu - Ecke unten rechts von Scala (mit Rahmen zusammen) scala_unten.setvollscala(1023.0); // Wert für volle (100%) Scala scala_unten.setrammetka(4, 9, 14, 4, 10, 2); // rdicke,mzahl,m_metka,m_mdicke,metka,mdicke scala_unten.setabstand(32, -14, 18, -14); // zifscala_xl,zifscala_yl,zifscala_xr,zifscala_yr scala_unten.setfarbe(ROT, GRUEN, GELB, WASSER, BLAU, SCHWARZ); // scala,scalaanf,rahmen,ziffer,grund,hintergrund scala_unten.setzif(4, -1); // anfzif = Wert für oberste/rechte Ziffer bei Marker, difzif = Zifferschritt scala_unten.setsymbol(*symb_unten, SYMB_UNTEN_ZAHL); // *sym = Zeiger auf Zeichenarray für Scala, symzif = Zahl von Zeichen in Zeile einschließlich \0 in der Zeile bei Marker scala_unten.scala(1023,1); // untere Scala in voller Wert mit Rahmen zeichnen } void loop() { // put your main code here, to run repeatedly: digitalWrite(LED_PR1,digitalRead(DRE_A)); digitalWrite(LED_PR2,digitalRead(DRE_B)); digitalWrite(GIGA_RED,digitalRead(DRE_KN)); meintime = millis(); WERT_L = (uint16_t)analogRead(PR1); WERT_R = (uint16_t)analogRead(PR2); WERT_L = wertkorr(WERT_L, 1023, -6); // inwert, vollscala, kormit WERT_R = wertkorr(WERT_R, 1023, -5); // inwert, vollscala, kormit //meintime = millis(); scala_links.scala(WERT_L,0); // Scala ohne Rahmen zeichnen scala_rechts.scala(WERT_R,0); // Scala ohne Rahmen zeichnen scala_unten.scala(((WERT_L+WERT_R)/2),0); // Scala ohne Rahmen zeichnen dauer = millis() - meintime; zaehler++; if(zaehler > 10){ zaehler = 0; display.setFont(&FreeMonoBold18pt7b); display.setTextSize(2); //adjust text size display.setTextColor(GELB,BLAU); display.fillRect(0,290,180,80,BLAU); display.setCursor(0,350); //x,y probel10b(WERT_L); display.println(WERT_L); display.setTextColor(WASSER,BLAU); display.fillRect(0,390,180,80,BLAU); display.setCursor(0,450); //x,y probel10b(WERT_R);; display.println(WERT_R); display.setTextColor(OLIVE,SCHWARZ); display.fillRect(0,190,180,80,SCHWARZ); display.setCursor(0,250); //x,y display.println(dauer); } delay(20); }