Проблема с запуском моей кнопки на моей макетной плате и миганием светодиода

Я пытаюсь работать над заданием, в котором нам предлагается создать программу на языке ассемблера с использованием Raspberry Pi, подключенного к макетной плате. Мне удалось скомпилировать мою программу и заставить мои светодиоды загораться в правильном порядке, чтобы имитировать настоящий светофор. Однако я пытаюсь понять, как сделать так, чтобы светодиоды двигались только после нажатия кнопки. Я искал в Интернете, но весь код кнопки, который я мог найти, написан на Python или C++, когда мне нужно, чтобы он был на языке ассемблера. Я также пытаюсь выяснить, как я могу заставить зеленый светодиод слева мигать, прежде чем он перейдет на красный. Вот подсказка вопроса:

Уличный переход - состоит из уличного фонаря (красный, желтый, зеленый ряд светодиодов), отдельного красного и зеленого светодиодов (ходить/не ходить) и кнопки. При нажатии кнопки загораются красные лампочки и загорается зеленый индикатор ходьбы. В конце концов зеленый и желтый будут мигать, говоря, что время ходьбы истекло, затем загорится красный, чтобы не ходить, и зеленый, чтобы загорелся светофор.

Вот изображение моей макетной платы: https://imgur.com/a/sI24Wae

Вот изображение таблицы gpio wirepipi: https://raspberrypi.stackexchange.com/questions/40203/pinout-difference

Вот мой код языка ассемблера:

      // CSC-11 Final Project Option #2

.equ INPUT, 0
.equ OUTPUT, 1
.equ LOW, 0
.equ HIGH, 1
.equ RED_PIN1, 26   // wiringPi 26
.equ YLW_PIN1, 27   // wiringPi 27
.equ GRN_PIN1, 28   // wiringPi 28
.equ RED_PIN2, 24   // wiringPi 24
.equ GRN_PIN2, 25   // wiringPi 25

.equ STP_PIN, 29    // wiringPi 29 - STOP PIN
.equ PAUSE_S, 3     // pause in seconds

.align 4
.section .rodata
out_s: .asciz "%d, r4=%d, r5=%d\n"

.align 4
.text
.global main
main:
//int main()
    push {lr}   //{
    bl wiringPiSetup // wiringPiSetup(): // initialize the wiringPi library

    mov r0, #STP_PIN
    bl setPinInput

    mov r0, #RED_PIN1
    bl setPinOutput

    mov r0, #YLW_PIN1
    bl setPinOutput

    mov r0, #GRN_PIN1
    bl setPinOutput

    mov r0, #RED_PIN2
    bl setPinOutput

    mov r0, #GRN_PIN2
    bl setPinOutput

lp:
    mov r0, #RED_PIN2
    mov r1, #RED_PIN2
    mov r2, #PAUSE_S
    bl action

    cmp r0, #1
    beq end_lp

    mov r0, #GRN_PIN1
    mov r1, #YLW_PIN1
    mov r2, #PAUSE_S
    bl action

    cmp r0, #1
    beq end_lp

    mov r0, #YLW_PIN1
    mov r1, #RED_PIN1
    mov r2, #PAUSE_S
    bl  action

    cmp r0, #1
    beq end_lp

    mov r0, #RED_PIN2
    mov r1, #GRN_PIN2
    mov r2, #PAUSE_S
    bl action

    //blink r0, #GRN_PIN2
    //mov r1, #PAUSE_S
    //bl action

    mov r0, #GRN_PIN2
    mov r1, #RED_PIN2
    mov r2, #PAUSE_S
    bl action

    mov r0, #RED_PIN1
    mov r1, #GRN_PIN1
    mov r2, #PAUSE_S
    bl action

    bal lp
end_lp:
    mov r0, #RED_PIN1
    bl pinOff

    mov r0, #YLW_PIN1
    bl pinOff

//  mov r0, #RED_PIN2
//  bl pinOff

    mov r0, #GRN_PIN1
    bl pinOff

    mov r0, #0  //return 0:
    pop {pc}    //}

setPinInput:
    push {lr}
    mov r1, #INPUT
    bl pinMode
    pop {pc}

setPinOutput:
    push {lr}
    mov r1, #OUTPUT
    bl pinMode
    pop {pc}

pinOn:
    push {lr}
    mov r1, #HIGH
    bl digitalWrite
    pop {pc}

pinOff:
    push {lr}
    mov r1, #LOW
    bl digitalWrite
    pop {pc}

readStopButton:
    push {lr}
    mov r0, #STP_PIN
    bl digitalRead
    pop {pc}

action:
    push {r4, r5, lr}

    mov r4, r1
    mov r5, r2

    bl pinOff
    mov r0, r4
    bl pinOn

    mov r0, #0
    bl time
    mov r4, r0

do_whl:
    bl readStopButton
    cmp r0, #HIGH
    beq action_done
    mov r0, #0
    bl time

    sub r0, r0, r4

    cmp r0, r5
    blt do_whl
    mov r0, #0

action_done:
    pop {r4,r5,pc}

Я использую библиотеку wireingPi в своем коде. RED_PIN1, YLW_PIN1 и GRN_PIN1 предназначены для использования в качестве светодиодных индикаторов на правой стороне моего макета, имитирующих светофор. RED_PIN2 и GRN_PIN2 предназначены для светодиодных индикаторов на левой стороне моего макета, имитирующих пешеходный переход.

0 ответов

Другие вопросы по тегам