From 323a91df6fc1ada141a8bc98ead1c2108f93dd7d Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Fri, 16 Aug 2024 15:15:20 +0300 Subject: [PATCH 1/2] Add first pipeline check --- .github/.gitignore | 1 - .github/actions/avr_setup/action.yml | 18 +++ .github/actions/get_changed_files/action.yml | 13 +++ .github/workflows/Lab_01_CI.yml | 37 ------ .github/workflows/lab-validation.yml | 114 +++++++++++++++++++ 5 files changed, 145 insertions(+), 38 deletions(-) delete mode 100644 .github/.gitignore create mode 100644 .github/actions/avr_setup/action.yml create mode 100644 .github/actions/get_changed_files/action.yml delete mode 100644 .github/workflows/Lab_01_CI.yml create mode 100644 .github/workflows/lab-validation.yml diff --git a/.github/.gitignore b/.github/.gitignore deleted file mode 100644 index 8b13789..0000000 --- a/.github/.gitignore +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/actions/avr_setup/action.yml b/.github/actions/avr_setup/action.yml new file mode 100644 index 0000000..3b92db0 --- /dev/null +++ b/.github/actions/avr_setup/action.yml @@ -0,0 +1,18 @@ +name: "Get changed files list" +description: "Setup Node with caching for dependencies" +runs: + using: "composite" + steps: + - name: Set up Arduino CLI + uses: arduino/setup-arduino-cli@v2 + + - name: Install platform + run: | + arduino-cli core update-index + arduino-cli core install ${{ env.platform }} + shell: bash + + - name: Install popular libs + run: | + arduino-cli lib install LiquidCrystal + shell: bash \ No newline at end of file diff --git a/.github/actions/get_changed_files/action.yml b/.github/actions/get_changed_files/action.yml new file mode 100644 index 0000000..ecf73ac --- /dev/null +++ b/.github/actions/get_changed_files/action.yml @@ -0,0 +1,13 @@ +name: "Get changed files list" +description: "Setup Node with caching for dependencies" +runs: + using: "composite" + steps: + - name: Get changed files list + id: get_changed_files + run: | + echo "Changed files:" + git diff --name-only ${{ github.event.pull_request.base.sha }} > changed_files.txt + cat changed_files.txt + echo "The list is saved to changed_files.txt" + shell: bash \ No newline at end of file diff --git a/.github/workflows/Lab_01_CI.yml b/.github/workflows/Lab_01_CI.yml deleted file mode 100644 index 985573b..0000000 --- a/.github/workflows/Lab_01_CI.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Cheking of compile Arduino sketch for AVR/AtMega and ESP8266 - -on: - push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] - -jobs: - test-matrix: - strategy: - matrix: - arduino-platform: - - "arduino:avr" - - "esp8266:esp8266" - include: - - arduino-platform: "arduino:avr" - fqbn: "arduino:avr:mega" - - arduino-platform: "esp8266:esp8266" - fqbn: "esp8266:esp8266:generic" - - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Arduino CLI - uses: arduino/setup-arduino-cli@v2 - - - name: Install platform - run: | - arduino-cli core update-index - arduino-cli core install ${{ matrix.arduino-platform }} - - - name: Compile Sketch - run: arduino-cli compile --fqbn ${{ matrix.fqbn }} ./mc_labs/mc_lab_01/*.ino diff --git a/.github/workflows/lab-validation.yml b/.github/workflows/lab-validation.yml new file mode 100644 index 0000000..059343b --- /dev/null +++ b/.github/workflows/lab-validation.yml @@ -0,0 +1,114 @@ +name: Cheking of compile Arduino sketch for AVR/AtMega + +on: + pull_request: + branches: [main, master] + +env: + platform: "arduino:avr" + fqbn_master: "arduino:avr:mega" + COMMIT_COUNT: $(( ${{ github.event_name == 'pull_request' && github.event.pull_request.commits || 0 }} + 1 )) + +jobs: + handle_bad_branch_name: + runs-on: ubuntu-22.04 + if: (contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4') || contains(github.head_ref, 'mc_lab_5') || contains(github.head_ref, 'mc_lab_6') || contains(github.head_ref, 'mc_lab_7')) == false + steps: + - name: Fail the build + run: | + echo "The branch name is not correct. It should contain 'mc_lab_' prefix" + exit 1 + build_labs_1_to_4: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4') + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Set up Arduino CLI + uses: ./.github/actions/avr_setup + + - name: Compile Sketch + run: arduino-cli compile --fqbn ${{ env.fqbn_master }} $(grep -E '\.ino$' changed_files.txt | xargs) + build_lab_5: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_5') + env: + fqbn_slave: "arduino:avr:nano" + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Get master folder + run: | + cat changed_files.txt | xargs dirname | grep 'master' | grep -m 1 -vE '/(.*master.*|.*slave.*)/' > master_project.txt + echo "Master project:" + cat master_project.txt + + - name: Get slave folders + run: | + cat changed_files.txt | xargs dirname | grep 'slave' | grep -vE '/(.*master.*|.*slave.*)/' > slave_projects.txt + echo "Slave projects:" + cat slave_projects.txt + + - name: Check if there is at least one master and one slave project + run: | + if [ ! -s master_project.txt ] || [ ! -s slave_projects.txt ]; then + echo "There is no master or slave project" + exit 1 + fi + + - name: Set up Arduino CLI + uses: ./.github/actions/avr_setup + + - name: Compile master + run: while read master_folder; do arduino-cli compile --fqbn ${{ env.fqbn_master }} $master_folder/*.ino; done < master_project.txt + + - name: Compile slaves + run: while read slave_folder; do arduino-cli compile --fqbn ${{ env.fqbn_slave }} $slave_folder/*.ino; done < slave_projects.txt + build_lab_6: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_6') + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: It just passes + run: echo "It just passes. It's too complex" + build_lab_7: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_7') + env: + register-bindings: "m2560def.inc" + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Setup AVRA Assembler + run: | + git clone https://github.com/Ro5bert/avra.git + cd avra + sudo make install + + - name: Preprocess sketch - append register bindings to the top of the file + run: printf ".include \"${{ env.register-bindings }}\"\n\n" | cat - $(grep -m 1 -E '\.(asm|S)$' changed_files.txt | xargs) > pipeline_main_assembly_source_file.asm + + - name: Compile Sketch + run: avra pipeline_main_assembly_source_file.asm From 457709fa4ab4f4f9450cfda686f41fc2affe39c8 Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Sat, 17 Aug 2024 03:48:54 +0300 Subject: [PATCH 2/2] Add example code for lab 4 --- mc_labs/mc_lab_04/lab4-mko/keypad4x4.h | 85 +++++++++++++ mc_labs/mc_lab_04/lab4-mko/lab4-mko.ino | 153 ++++++++++++++++++++++++ mc_labs/mc_lab_04/lab4-mko/lab4.pdsprj | Bin 0 -> 32496 bytes 3 files changed, 238 insertions(+) create mode 100644 mc_labs/mc_lab_04/lab4-mko/keypad4x4.h create mode 100644 mc_labs/mc_lab_04/lab4-mko/lab4-mko.ino create mode 100644 mc_labs/mc_lab_04/lab4-mko/lab4.pdsprj diff --git a/mc_labs/mc_lab_04/lab4-mko/keypad4x4.h b/mc_labs/mc_lab_04/lab4-mko/keypad4x4.h new file mode 100644 index 0000000..46ce22e --- /dev/null +++ b/mc_labs/mc_lab_04/lab4-mko/keypad4x4.h @@ -0,0 +1,85 @@ +#define DDR_KEYPAD DDRK +#define PORT_KEYPAD PORTK +#define PIN_KEYPAD PINK + + + + + + +class SegmentDisplay { +public: + byte* segments; + byte* numbers; + byte numberOfDigits; + byte* value; + SegmentDisplay(byte segments[8], byte numbers[], byte numberOfDigits) + : segments(segments), numbers(numbers), numberOfDigits(numberOfDigits) { + + value = new byte[numberOfDigits]; + } + + virtual ~SegmentDisplay() { + delete value; + } + + void init() { + for(int i = 0; i < 8; i++) + pinMode(segments[i], OUTPUT); + + for(int i = 0; i < numberOfDigits; i++) { + pinMode(numbers[i], OUTPUT); + digitalWrite(numbers[i], HIGH); + } + } + + void setValue(byte value[]) { + for(int i = 0; i < numberOfDigits; i++) { + this->value[i] = value[i]; + } + } + + + void update() { + byte actualCounter = min(counter, 7); + for(int i = 0; i < numberOfDigits; i++) + digitalWrite(numbers[i], i == actualCounter ? LOW : HIGH); + + + for(int i = 0; i < 8; i++) + digitalWrite(segments[i], (value[actualCounter] >> i) & 1 ? HIGH : LOW); + + + counter = (counter + 1) % (numberOfDigits + 2); + } + + private: + byte counter = 0; +}; + +void getSegmentFromTime(byte * segment, long time, bool alarmActive) { + long hours = (time / (60 * 60)) % 24; + long minutes = (time / 60) % 60; + long seconds = time % 60; + long timeBySymbol[] = { hours / 10, hours % 10, minutes / 10, minutes % 10, seconds / 10, seconds % 10 }; + + for(int i = 0; i < 6; i++) { + // .gfedcba + if(timeBySymbol[i] == 0) segment[i] = 0b00111111; + if(timeBySymbol[i] == 1) segment[i] = 0b00000110; + if(timeBySymbol[i] == 2) segment[i] = 0b01011011; + if(timeBySymbol[i] == 3) segment[i] = 0b01001111; + if(timeBySymbol[i] == 4) segment[i] = 0b01100110; + if(timeBySymbol[i] == 5) segment[i] = 0b01101101; + if(timeBySymbol[i] == 6) segment[i] = 0b01111101; + if(timeBySymbol[i] == 7) segment[i] = 0b00000111; + if(timeBySymbol[i] == 8) segment[i] = 0b01111111; + if(timeBySymbol[i] == 9) segment[i] = 0b01101111; + } + + if(alarmActive) segment[5] = 0b01110111; + + segment[1] |= 0b10000000; + segment[3] |= 0b10000000; +} + diff --git a/mc_labs/mc_lab_04/lab4-mko/lab4-mko.ino b/mc_labs/mc_lab_04/lab4-mko/lab4-mko.ino new file mode 100644 index 0000000..e43c1d0 --- /dev/null +++ b/mc_labs/mc_lab_04/lab4-mko/lab4-mko.ino @@ -0,0 +1,153 @@ + + +// include the library code: +#include "keypad4x4.h" +#include + +#define MINUTES 1 +#define HOURS 2 + +enum ClockMode { + Time, + Alarm +}; + + +// initialize the library by associating any needed LCD interface pin +// with the arduino pin number it is connected to +const char segments[] = { 53, 52, 51, 50, 10, 11, 12, 13 }; +const char numbers[] = { 22, 23, 24, 25, 26, 27 }; +const char timeButton = 18; +const char alarmButton = 70; +const char setButton = 71; +const char toggleButton = 72; +const char buzzerPin = 35; + + +long time = 0; +long alarm = 0; +bool alarmActive = false; +bool alarmSetModeActive = false; +int inputData = 0; + +SegmentDisplay seg(segments, numbers, 6); + + + + + +ISR(TIMER2_OVF_vect) { + time = (time + 1) % ((long)60 * 60 * 24); +} + +ISR(TIMER1_COMPA_vect) { + displayTime(alarmSetModeActive ? alarm : time); + seg.update(); +} + + + + + +void handleButtonPress() { + byte port_val = PIND; + + if(!(~(port_val >> 3) & 0b1111)) return; + + if(!((port_val >> 3) & 1)) { + getTimeFromInputs(HOURS, alarmSetModeActive ? alarm : time); + } + if(!((port_val >> 4) & 1)) { + getTimeFromInputs(MINUTES, alarmSetModeActive ? alarm : time); + } + if(!((port_val >> 5) & 1)) + alarmSetModeActive = !alarmSetModeActive; + if(!((port_val >> 6) & 1)) alarmActive = !alarmActive; + + delay(200); +} + + +void handleCurrentMode() { + +} + + + +void displayTime(long seconds) { + byte segment[] = { 0, 0, 0, 0, 0, 0 }; + getSegmentFromTime(segment, seconds, alarmActive); + seg.setValue(segment); +} + + + +void getTimeFromInputs(char buttonMode, long& time) { + static long hours = 0; + static long minutes = 0; + + if(buttonMode == HOURS) + time = time + 3600; + if(buttonMode == MINUTES) + time = time + 60; +} + +void checkAlarm() { + digitalWrite(buzzerPin, (alarmActive && ((time - alarm) % 2 == 0) && ((time - alarm) < 30) && ((time - alarm) > 0)) ? HIGH : LOW); +} + + + +void setup() { + Serial.begin(9600); + + + DDRD &= ~0b01111000; + PORTD |= 0b01111000; + + pinMode(buzzerPin, OUTPUT); + + noInterrupts(); + //Asynchronous Operation of Timer/Counter2 + //The CPU main clock frequency must be more than four times the oscillator frequency + //a. Disable the Timer/Counter2 interrupts by clearing OCIE2x and TOIE2 + TIMSK2 = 0; + + //b. Select clock source by setting AS2 as appropriate + //When AS2 is written to one, Timer/Counter2 is clocked from a crystal oscillator + //connected to the timer oscillator 1 (TOSC1) pin + ASSR |= (1 << AS2); + + //c. Write new values to TCNT2, OCR2x, and TCCR2x + TCCR2A = 0; + TCCR2B = 0; + TCNT2 = 0; + + //d. To switch to asynchronous operation: Wait for TCN2xUB, OCR2xUB, and TCR2xUB + while (ASSR & 0x1F) {} + + //no need to change TCCR2A, normal counting mode + //prescaler set to 128 + TCCR2B |= (1 << CS22) | (1 << CS20); + + //e. Clear the Timer/Counter2 interrupt flags + TIFR2 = 0x07; + + //f. Enable interrupts, if needed + TIMSK2 |= (1 << TOIE2); + + // dynamic indication set up with timer 2 + TCCR1A = 0x00; + TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); //CTC mode & Prescaler @ 1024 + TIMSK1 = (1 << OCIE1A); // allow compare match mode + OCR1A = 15624 / 512; // compare value = 1/1024 sec (8MHz AVR) + + interrupts(); + + seg.init(); +} + +void loop() { + handleButtonPress(); + checkAlarm(); +} \ No newline at end of file diff --git a/mc_labs/mc_lab_04/lab4-mko/lab4.pdsprj b/mc_labs/mc_lab_04/lab4-mko/lab4.pdsprj new file mode 100644 index 0000000000000000000000000000000000000000..27fe046b643214911a01a06f2af00dfdaf4324b0 GIT binary patch literal 32496 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