/* Dit is een oefening om parallelle taken te maken. https://www.arduino.cc/en/Reference/LiquidCrystal */ #define debug true #define speaker 6 // kan met een analogWrite een 1000 hz piep toon laten horen #define rotary_push 7 // rotary drukknop #define rotary_pulse_A 8 // rotary puls A #define rotary_pulse_B 10 // rotary puls B #define rechts_boven 7 // knop recht_boven is verbonden met digital pin 7 #define rechts_beneden 8 // knop recht_boven is verbonden met digital pin 8 #define links_boven 9 // knop recht_boven is verbonden met digital pin 9 #define links_beneden 10 // knop recht_boven is verbonden met digital pin 10 #define led 13 // LED verbonden met digital pin 13 #define loop_teller_periode 10 // tijd in seconden #define knoppen_lees_periode 100 // tijd in milli seconden #define led_periode_tijd 1000 // led aan en uit tijd in milli seconden #define speaker_periode_tijd 500 // speaker aan en uit tijd in milli seconden // include the library codes: #include // initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to // const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); int positie_speaker; // gebruikt voor LCD cursor positie int positie_led; // gebruikt voor LCD cursor positie boolean rechts_boven_ingedrukt = false; boolean rechts_beneden_ingedrukt = false; boolean links_boven_ingedrukt = false; boolean links_beneden_ingedrukt = false; boolean led_moet_knipperen = false; boolean led_aan = false; boolean speaker_moet_piepen = false; boolean speaker_aan = false; boolean setup_mode = false; boolean setup_mode_veranderen = false; unsigned long huidige_milli_seconden; unsigned long knoppen_lees_tijd; // is tijd (in milli seconden) wanneer de knoppen moeten worden uitgelezen unsigned long led_knipper_tijd; // schakeltijd voor LED unsigned long speaker_aanuit_tijd; // schakeltijd voor speaker unsigned long loop_teller, loop_teller_vorige, loop_teller_tijd; void setup() { lcd.begin(16, 2); // set up the LCD's number of columns and rows: lcd.print("2 tegelijkertijd"); // Print a message to the LCD. Serial.begin(115200); pinMode(led, OUTPUT); pinMode(links_boven, INPUT); pinMode(links_beneden, INPUT); pinMode(rechts_boven, INPUT); pinMode(rechts_beneden, INPUT); loop_teller = 0; positie_speaker = 0; // plaats speaker tekst positie_led = 9; // plaats led tekst knoppen_lees_tijd = 1; // startwaarde led_knipper_tijd = 0xFFFFFFFF; // speaker_aanuit_tijd = 0xFFFFFFFF; while (digitalRead(rotary_pulse_A) || digitalRead(rotary_pulse_B)) // rotery knop staat verkeerd { analogWrite(speaker,127); // laat een piep horen lcd.setCursor(0, 1); // set the cursor to column 0, line 1 lcd.print("Draai aan Rotary"); // display waarschuwing } digitalWrite(speaker,LOW); // zet piep uit lcd.setCursor(0, 1); // set the cursor to column 0, line 1 lcd.print(" "); // verwijder waarschuwing } void loop() { loop_teller++; // hiermee gaan we bepalen hoevaak het programma per seconde wordt uitgevoerd. huidige_milli_seconden = millis(); /********************************************************** * taak om de het aantal keren dat de loop wordt doorlopen naar de seriele monitor te sturen. * **********************************************************/ if (huidige_milli_seconden > loop_teller_tijd) { loop_teller_tijd += loop_teller_periode * 1000; // Serial.print(" loop teller = "); Serial.print(loop_teller); Serial.print(" loops per seconde = "); Serial.println((loop_teller - loop_teller_vorige)/loop_teller_periode); loop_teller_vorige = loop_teller; } /********************************************************** * Taken om de bovenste knoppen uit te lezen en de lED en/of de speaker aan te sturen. De drukknoppen hebben de naam "rechts_boven", * en "links_boven". * ***********************************************************/ if (huidige_milli_seconden > knoppen_lees_tijd) // proces die de knoppen leest { knoppen_lees_tijd += knoppen_lees_periode; // Lees buttons *********************************** /******************************************************************************* links boven Speaker *********************************************************************************/ if (!links_boven_ingedrukt) // links_onder knop was laatste keer niet ingedrukt { if (digitalRead(links_boven)) // knop ingedruk? { links_boven_ingedrukt = true; // doe wat nodig is } } else if (!digitalRead(links_boven)) // knop niet meer ingedrukt { links_boven_ingedrukt = false; } /******************************************************************************* rechts boven LED *********************************************************************************/ } // endif huidige_milli_seconden > knoppen_lees_tijd /******************************************************************************* Taak om de LED te laten knipperen *********************************************************************************/ }