====== Arduino WS (8) Jan.19 ====== Die Idee war, möglichst viele Dinge an einem Arduino anzuschließen, ohne daß der Code kompliziert wird. Hier der Beispielcode. Eingaben: 2 Taster, 1 Poti, Temperatur- und Feuchtesensor Ausgaben: 1 LED blinkt, von 4 LEDs leuchtet eine (Nr. 0..3), LCD Display 2 Zeilen a 16 Zeichen, LED Streifen mit 8 LEDs // Programm zum Demonstrieren von einfachem Abfragen vieler // Sensoren / Eingaben und steuern vieler Aktoren / Ausgaben // mit einfachen Mitteln // dht: DHT11 - Temperatur- und Feuchtesensor #include #include // https://desire.giesecke.tk/index.php/2018/01/30/esp32-dht11/ // DHT11-Anschluss: VCC (+), data(pullup 10k), NC (not connected), GND (-) const int DHTPin = 9; // data Pin const int DHTType = DHT11; DHT dht(DHTPin, DHTType); // lcd: LCD mit 16*2 Zeichen*Zeilen (via Serial/Parallel Umsetzer) #include #include // https://github.com/mathertel/LiquidCrystal_PCF8574/blob/master/examples/LiquidCrystal_PCF8574_Test/LiquidCrystal_PCF8574_Test.ino LiquidCrystal_PCF8574 lcd(0x27); // 0x27==1602LCD // strip: LED-Streifen mit einzeln ansteuerbaren RGB LEDs #include const int StripPin = 8; const int StripLEN = 8; CRGB strip[StripLEN]; // Diverse Ein-/Ausgabepins const int PotiPIN = A0; const int PINblink = 13; // Wiederverwendbare Logik zur Abfragen von Buttons incl. Entprellen typedef struct { int press; int wait; int pin; } t_button; t_button button_abc = {HIGH,0,2}; // Vorwärts-Knopf Pin 2 t_button button_cba = {HIGH,0,7}; // Rückwärts-Knopf Pin 7 int abc = 0; // aktuelle Position const int PINled[] = {3,4,5,6}; // LEDs dafür const int PINleds = sizeof(PINled)/sizeof(int); // Anzahl=4 // dazu... // check_button(&button) liefert, ob Taste gedrückt wurde und macht Entprellung // (wartet aber nie, falls nix passiert liefert es 0 (false)) // (setzt voraus, daß es in ca. 1ms Abständen aufgerufen wird) int check_button(t_button *b) { if (b->wait > 0) { b->wait--; return 0; } if (digitalRead(b->pin)==b->press) return 0; if (b->press==HIGH) b->press = LOW; else b->press = HIGH; b->wait=50; return !(b->press); } void setup() // Initialisierungen { // LEDs und buttons dazu pinMode(button_abc.pin, INPUT_PULLUP); pinMode(button_cba.pin, INPUT_PULLUP); for(int i=0; i(strip, StripLEN); for (int i=0; i0) t-=4; // Calib.: -4 if (h>0) // h==0 deutet auf Fehler, dann also nicht { sprintf(s,"%dC %d%% %d:%02d",(int)t,(int)h,(int)(millis()/60000),(int)((millis()/1000)%60)); lcd.print(s); // Zeile1: xxC xx% m:ss } } } } // Tasten, die die LED (Nr. abc) Vor-/Rückwärts steuern if (check_button(&button_abc)) // vorwärts? { digitalWrite(PINled[abc],0); // alte LED aus abc++; // 1 weiter if (abc>=PINleds) abc=0; // zyklisch digitalWrite(PINled[abc],1); // neue LED an } if (check_button(&button_cba)) // rückwärts? { digitalWrite(PINled[abc],0); // alte LED aus abc--; // 1 zurück if (abc<0) abc=PINleds-1; // zyklisch digitalWrite(PINled[abc],1); // neue LED an } // Eine LED blinkt counter++; if (counter==1000) { digitalWrite(PINblink,1); } if (counter==2000) { digitalWrite(PINblink,0); counter=0; } // Warte etwas eniger als 1ms (weil Rest der Rechenzeit zu 1ms braucht // das Programm durchschnittlich, jedenfalls ungefähr) delayMicroseconds(900); } {{tag> Toppoint Frickl Workshop viel anschliessen }}