Код Arduino для нескольких кнопок и светодиодной матрицы - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь построить систему, используя Arduino Uno, 8x8 светодиодную матрицу и 3 кнопки.Целью системы является отображение 3 разных символов при нажатии на 3 кнопки соответственно.Например, я выбрал буквы A, B, C.Когда нажата кнопка, соответствующая A, должна отображаться буква A и аналогичная для B и C.Я немного застрял в этом коде, где он кажется мне логически правильным, но я понятия не имею, почему он не работает.Заранее спасибо.

#include "LedControlMS.h"
#define NBR_MTX 1
LedControl lc=LedControl(4,3,2, NBR_MTX);//
const int buttonPinA = 8;
const int buttonPinB = 9;
const int buttonPinC = 10;
char ip2;
void setup()
{
  Serial.begin(9600);
  for (int i=0; i< NBR_MTX; i++)
  {
    lc.shutdown(i,false);
    lc.setIntensity(i,8);
    lc.clearDisplay(i);
    delay(100);
  }
}
void Fun1()
{
              lc.writeString(0,"A");
              delay(500);
              lc.clearAll();
}
void Fun2{
          lc.writeString(0,"B");
              delay(500);
              lc.clearAll();
}
void Fun3()
{
              lc.writeString(0,"C");
              delay(500);
              lc.clearAll();
}
void loop(){

if( digitalRead(buttonPinA) == HIGH){
  ip2 = 1;}
else if(digitalRead(buttonPinB) == HIGH){
  ip2 = 2;}
else if(digitalRead(buttonPinC) == HIGH){
  ip2 = 3;
}
if(ip2 == '1'){
for(int i=1;i<=6;i++){
  Fun1();
  }
}
else if(ip2 == '2')
{
 for(int i=1;i<=6;i++){
 Fun2();}
}
else if(ip2 == '3'){
for(int i=1;i<=6;i++){
Fun3();}
}}

1 Ответ

0 голосов
/ 19 октября 2018

Вы устанавливаете переменную char ip2 как целое число, а затем проверяете ее как символ.В этой таблице ASCII вы увидите, что '1' равно 31, как в целых числах, '2' равно 32 и т. Д.

Замена первых нескольких строк основногоЦикл с кодом ниже должен решить вашу проблему.Если нет, я бы проверил документацию используемой вами библиотеки светодиодов и убедился, что вы правильно ее реализуете.

if( digitalRead(buttonPinA) == HIGH)
{
    ip2 = '1';
}
else if(digitalRead(buttonPinB) == HIGH)
{
    ip2 = '2';
}
else if(digitalRead(buttonPinC) == HIGH)
{
    ip2 = '3';
}
...