Помогите с программированием
- Войдите на сайт для отправки комментариев
Пт, 19/01/2018 - 14:05
Программа заключается в том , чтобы на вопросы есть варианты ответа , человек нажимает на кнопку (Один из вариартов ответа ) и на дисплеи (OLED ) должно показать верно или не верно . Но на дисплеи выдает какую-то мигающею ерунду , помогите пж
#include <OLED_I2C.h>
OLED disp(SDA, SCL, 8);
extern uint8_t SmallFont[];
const int bp0 = 7; //A
const int bp1 = 6; //Б
const int bp2 = 5; //В
const int bp3 = 4; //Г
const int bp4 = 3; //С
const int x = 0;
const int y = 0;
int bs0;
int bs1;
int bs2;
int bs3;
int bs4;
int question;
void setup() {
disp.begin();
disp.setFont(SmallFont);
pinMode(bp0, INPUT_PULLUP);
pinMode(bp1, INPUT_PULLUP);
pinMode(bp2, INPUT_PULLUP);
pinMode(bp3, INPUT_PULLUP);
pinMode(bp4, INPUT_PULLUP);
}
void loop() {
bs0 = digitalRead(bp0);
bs1 = digitalRead(bp1);
bs2 = digitalRead(bp2);
bs3 = digitalRead(bp3);
bs4 = digitalRead(bp4);
Serial.println(bs0);
Serial.println(bs1);
Serial.println(bs2);
Serial.println(bs3);
Serial.println(bs4);
if (bs4==HIGH && question==0) {
question = 1 + (rand() % static_cast<int>(132 - 1 + 1));
disp.clrScr();
disp.print(question,x,y);
disp.update();
delay(50);
} else if (bs0==HIGH && question!=0) {
checkAnsver("A");
delay(50);
} else if (bs1==HIGH && question!=0) {
checkAnsver("B");
delay(50);
} else if (bs2==HIGH && question!=0) {
checkAnsver("C");
delay(50);
} else if (bs3==HIGH && question!=0) {
checkAnsver("D");
delay(50);
}
}
void checkAnsver(String buttonLabel) {
String ansver = getAnsver();
if (ansver.equals(buttonLabel)) {
disp.print("no!",x,y);
} else {
disp.print("yes!",x,y);
}
question = 0;
}
String getAnsver() {
switch(question) {
case 1: return "B";
case 2: return "C";
case 3: return "C";
case 4: return "A";
case 5: return "D";
case 6: return "B";
case 7: return "A";
case 8: return "D";
case 9: return "A";
case 10: return "D";
case 11: return "A";
case 12: return "C";
case 13: return "A";
case 14: return "B";
case 15: return "C";
case 16: return "D";
case 17: return "B";
case 18: return "D";
case 19: return "C";
case 20: return "A";
case 21: return "C";
case 22: return "D";
case 23: return "C";
case 24: return "B";
case 25: return "A";
case 26: return "A";
case 27: return "C";
case 28: return "D";
case 29: return "B";
case 30: return "A";
case 31: return "B";
case 32: return "B";
case 33: return "C";
case 34: return "D";
case 35: return "A";
case 36: return "B";
case 37: return "B";
case 38: return "B";
case 39: return "D";
case 40: return "B";
case 41: return "A";
case 42: return "B";
case 43: return "A";
case 44: return "D";
case 45: return "B";
case 46: return "C";
case 47: return "A";
case 48: return "C";
case 49: return "D";
case 50: return "B";
case 51: return "A";
case 52: return "A";
case 53: return "C";
case 54: return "B";
case 55: return "B";
case 56: return "D";
case 57: return "C";
case 58: return "B";
case 59: return "C";
case 60: return "A";
case 61: return "D";
case 62: return "D";
case 63: return "A";
case 64: return "B";
case 65: return "C";
case 66: return "B";
case 67: return "A";
case 68: return "C";
case 69: return "C";
case 70: return "D";
case 71: return "A";
case 72: return "C";
case 73: return "D";
case 74: return "C";
case 75: return "D";
case 76: return "B";
case 77: return "D";
case 78: return "C";
case 79: return "A";
case 80: return "A";
case 81: return "C";
case 82: return "B";
case 83: return "C";
case 84: return "B";
case 85: return "C";
case 86: return "A";
case 87: return "A";
case 88: return "D";
case 89: return "D";
case 90: return "B";
case 91: return "A";
case 92: return "A";
case 93: return "B";
case 94: return "A";
case 95: return "B";
case 96: return "B";
case 97: return "B";
case 98: return "C";
case 99: return "D";
case 100: return "D";
case 101: return "B";
case 102: return "C";
case 103: return "B";
case 104: return "A";
case 105: return "A";
case 106: return "B";
case 107: return "A";
case 108: return "B";
case 109: return "A";
case 110: return "A";
case 111: return "A";
case 112: return "B";
case 113: return "D";
case 114: return "B";
case 115: return "B";
case 116: return "C";
case 117: return "A";
case 118: return "A";
case 119: return "C";
case 120: return "C";
case 121: return "C";
case 122: return "B";
case 123: return "A";
case 124: return "A";
case 125: return "B";
case 126: return "A";
case 127: return "B";
case 128: return "B";
case 129: return "A";
case 130: return "C";
case 131: return "D";
case 132: return "B";
}
}
почему все "новЕчки" так любят оператор switch? - без него процедуру getanswer можно было бы записать раз в 20 короче.
По делу в вопрос не вникал - сначала выложите код как положено в форуме, правила в прикремпленной теме вверху.
OLED disp(SDA, SCL, 8); - а SDA и SCL точно не надо дефайнить?
почему все "новЕчки" так любят оператор switch? - без него процедуру getanswer можно было бы записать раз в 20 короче.
ЧСУ повышает, гляньте сколько строк напрогмячил.
почему все "новЕчки" так любят оператор switch? - без него процедуру getanswer можно было бы записать раз в 20 короче.
switch короче, чем if ;)
Хорошо что не сразу с классов начал, массивом обошелся.
Квон, массив символов - это же строка, зачем же ты так пишешь строку?
Вот так надо:
Более того, раз в строке только 4 варианта символов, то использовать на каждый по байту - расточительно. Можно кодировать каждый символ двумя битами и упаковать строку в 4 раза плотнее :)
А вот так не надо. Человек к примеру сделал эту программу и сдал заказчику. Но потом заказчик пришел с новой аналогичной задачей. И надо переделать программу под новые тесты. И что опять разбираться что и куда пихать. А если еще и плотно упаковано. Убивать время на распаковку.
Да фиг с ним, с заказчиком! Новая задача - новый прайс :))
[А вот так не надо. Человек к примеру сделал эту программу и сдал заказчику. Но потом заказчик пришел с новой аналогичной задачей. И надо переделать программу под новые тесты. И что опять разбираться что и куда пихать. А если еще и плотно упаковано. Убивать время на распаковку.
Если данные вручную кодировать - то ты прав. Но это плохой подход. Я вообще удивляюсь, как тебе не лень было массив из 144 символов набивать - я вон на третьем десятке сдался.
Если говорить "как не надо" - не нвдо заполнять такие таблицы вручную. А если заполнять вспомогательной программой. то совершенно одинаково - либо как у тебя, либо в одну строку, как у меня или даже упаковано по 4 символа в байт. Зато чем плотнее - тем меньше места займет, а для контроллеров это важно.