Как я могу заставить светодиоды меняться только тогда, когда я нажимаю кнопку на макетной плате?

Подсказка: переход через улицу. Он состоит из уличного фонаря (ряд красных, желтых и зеленых светодиодов), отдельного красного и зеленого светодиодов (ходить/не ходить) и кнопки. При нажатии кнопки загораются красные лампочки и загорается зеленый индикатор ходьбы. В конце концов замигают зеленый и желтый, указывая на то, что время ходьбы истекло, затем загорится красный, означающий, что идти нельзя, и зеленый, означающий светофор. Запрограммируйте код на Raspberry Pi и подключите его к макетной плате. Как минимум 75% вашего кода должно быть на языке ассемблера.

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

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

Вот мой код:

      .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

   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, #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}

0 ответов

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