SwiftScan IoT 3AXEL Past Paper 27 September 2023
Document Details
Uploaded by Deleted User
2023
Tags
Summary
This is a past paper for the IOT 3AXEL course on 27 September 2023. The exam has questions on Arduino programming, LED control, and 7-segment display. The paper consists of multiple choice and coding questions.
Full Transcript
# IOT | 3AXEL ## Familienname: * Notenschlüssel * Nicht Genugend: 0-49 * Genugend: 50-60 * Befriedigend: 61-75 * Gut: 76-90 * Sehr Gut: 91-100 **Es dürfen keine Unterlagen verwendet werden!** ## Frage 1 (30% + 20%): 97% Stellen Sie das unten begonnene Programm fertig um ei...
# IOT | 3AXEL ## Familienname: * Notenschlüssel * Nicht Genugend: 0-49 * Genugend: 50-60 * Befriedigend: 61-75 * Gut: 76-90 * Sehr Gut: 91-100 **Es dürfen keine Unterlagen verwendet werden!** ## Frage 1 (30% + 20%): 97% Stellen Sie das unten begonnene Programm fertig um eine LED an Pin6 blinken zu lassen. Die Blinkfrequenz kann dabei mit einem Potentiometer an A3 eingestellt werden. Diese soll zwischen 0,45s und 2,8s erfolgen. Weiters soll die Verkabelung passend zum Code vervollständigt werden. Fehlende Bauelemente sind nachzutragen und mit passenden Werten zu versehen. ```c++ int eingang = A3 ; int LEDpin = 6 ; int sensorwert = 0; void setup() { pinMode(LEDpin, OUTPUT); } void loop() { sensorwert = analogRead(eingang); mydelay = map(sensorwert, 0, 1023, 450, 2000); digitalWrite(LEDpin, HIGH); delay(mydelay); digitalWrite(LEDpin, LOW); delay(mydelay); } ``` **LED = 6** **Wok = 0,45S bis 2,85** ## Frage 2 (30% + 20%): 20% Finalisieren Sie das Programm um mit einem Poti an A5 gemapped die Zahlen 2-8 durch Drehen auf der 7-Segment Anzeige darzustellen. Die Pin-Belegung für die Segmente A-G wird beim Arduino Pin D4-D10 sein. Die Anzeige ist ein Common_Cathode Typ (dh gemeinsamer Punkt = GND). Weiters soll die Verkabelung passend zum Code vervollständigt werden. Fehlende Bauelemente sind nachzutragen und mit passenden Werten zu versehen. ```c++ byte SegArray[10] = {{1,1,1,1,1,1,0}, {0,1,1,0,0,0,0}, {1,1,0,1,1,0,1}, {1,1,1,1,0,0,1}, {0,1,1,0,0,1,1}, {1,0,1,1,0,1,1}, {1,0,1,1,1,1,1}, {1,1,1,0,0,0,0}, {1,1,1,1,1,1,1}, {1,1,1,1,0,1,1 }}; void setup() { for (int x = 2; x <= 8; x++) { pinMode(SegArray[x], OUTPUT); } } void loop() { int pin = 4; int PotWert = analogRead(A5); int AnzeigeWert = map(PotWert, 0, 1023, 0, 10); for (int i = 0; i <= AnzeigeWert; i++) { digitalWrite(SegArray[i], HIGH); pin++; } delay(50); } ``` ## Frage 1.1 (30%): 75.4% Stellen Sie das unten begonnene Programm fertig, um zwei LEDs mittels 2 Tastern und Interrupt zu steuern. Dabei soll LED1 über SW1 bei steigender Flanke von INTO und LED2 über SW2 bei jedem Wechsel von INT1 aktiviert werden. Beim Start des Arduino sollen beide LEDs bereits leuchten. ```c++ #define LED1 9 #define LED2 10 #define SW1 2 #define SW2 3 void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); pinMode(SW1, INPUT); pinMode(SW2, INPUT); attachInterrupt(SW1, ISRO, RISING); attachInterrupt(SW2, ISR1, CHANGE); } void loop() { // do nothing delay(200); } void ISRO() { int pinState = digitalRead(SW1); digitalWrite(LED1, pinState); } void ISR1() { int pinState = digitalRead(SW2); digitalWrite(LED2, pinState); } ``` ## Frage 1.2 (20 Punkte): 20% Vervollständigen Sie die vorgegebenen Schaltungsteile zum Programm aus Frage 1.1. Alle notwendigen PINs sind dort bereits vorgegeben. Es sind notwendige Vorwiderstände/Pullup/Down, Versorgungsspannungen, GND richtig einzutragen. ## Frage 2.1 (30%): 26 % Finalisieren Sie das Programm um 9 LEDs (Pin 1,2,3, 4, 5, 6, 7, 8, 9) als Balkenanzeige leuchten zu lassen. Dabei gibt ein Rotary Encoder an Pin 12 & 13 die Anzahl der leuchtenden LEDs vor. Abgefragt wird der Rotary Encoder mit 100Hz (Periode ist 1/Frequenz -> 10ms). Nach dem Start soll keine LED leuchten. Es muss im Code berücksichtigt werden, dass nicht weniger als O bzw. alle LEDs leuchten können. ```c++ int ledLimit = 9; int level = 0; unsigned long currentTime; unsigned long loopTime; const int pin_A = 12; const int pin_B = 13; unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev = 0; void setup() { for (int thisLed = 0; thisLed < ledLimit; thisLed++) { pinMode(thisLed, LOW); } pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); currentTime = millis(); loopTime = currentTime; } void loop() { currentTime = millis(); if(currentTime >= (loopTime + 10)) { encoder_A = digitalRead(pin_A); encoder_B = digitalRead(pin_B); if((!encoder_A) && (encoder_A_prev)){ if (encoder_B) { Level++; if (level > 9) Level = 0; } else { Level--; if (level < 0) Level = 9; } } encoder_A_prev = encoder_A; for (int thisLed = 0; thisLed <= ledLimit; thisLed++) { if (thisLED < Level){ digitalWrite(thisLED, HIGH); } else { digitalWrite(thisLED, LOW); } } loopTime = currentTime; } } ``` ## Frage 2.2 (20%): 5% Weiters soll die Verkabelung passend zum Code aus Frage 2.1 vervollständigt werden. Fehlende Bauelemente sind nachzutragen und mit passenden Werten zu versehen.