Ви не увійшли.
и на фига там while ?????)))))
а могли бы просто подсказать использовать функцию while вместо if
нахрена пацану жизнь портить
крч nikita просто используй while чтобы зациклировать какуюто часть кода
только переходы от режима к режиму отдельно в каждом режиме должны быть
вот я переиначил код должно работать
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
uint8_t numchars;
int MicValue;
int sped;
int mode;
int correction;
int MicPin = A0;
int button = 1;
int redPin = 2;
int greenPin = 3;
int bluePin = 4;
int YellowPin = 5;
void setup() {
// put your setup code here, to run once:
pinMode(11, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(YellowPin, OUTPUT);
pinMode(MicPin, INPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(YellowPin, LOW);
myOLED.begin();
}
void loop() {
button = digitalRead(11);
if(button == 1){ //вычисления режима работы
mode++;
delay(1000);
}
if(mode == 3 && button == 1){
mode = 1;
}
while(mode == 1){ //режим 1
button = digitalRead(11);
if(button == 1){ //вычисления режима работы
mode++;
delay(1000);
}
if(mode == 3 && button == 1){
mode = 1;
}
myOLED.setFont(MegaNumbers);
myOLED.print(" 1 ", 0, 0);
myOLED.print(" ", 0, 50);
myOLED.update();
correction = 499; //вычисление для режима 1
MicValue = analogRead(MicPin)+correction;
if (MicValue > 500) {
digitalWrite(bluePin,HIGH);
delay(100);
}
if (MicValue > 515) {
digitalWrite(greenPin, HIGH);
delay(100);
}
if (MicValue > 530) {
digitalWrite(redPin, HIGH);
delay(100);
}
if (MicValue > 545) {
digitalWrite(YellowPin, HIGH);
delay(100);
}
digitalWrite(greenPin, LOW); //все гасим для стобо-эффекта
digitalWrite(redPin, LOW);
digitalWrite(bluePin,LOW);
digitalWrite(YellowPin,LOW);
delay(5);
}
while(mode == 2) { // режим 2
button = digitalRead(11);
if(button == 1){ //вычисления режима работы
mode++;
delay(1000);
}
if(mode == 3 && button == 1){
mode = 1;
}
myOLED.setFont(MegaNumbers);
myOLED.print(" 2 ", 0, 0);
myOLED.print(" ", 0, 50);
myOLED.update();
sped = analogRead(A2)/2; //вычисление для режима 2
//скорость переключения зависит от патенциометра
digitalWrite(redPin, HIGH);
delay(sped);
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
delay(sped);
digitalWrite(bluePin, LOW);
digitalWrite(YellowPin, HIGH);
delay(sped);
digitalWrite(YellowPin, LOW);
digitalWrite(greenPin, HIGH);
delay(sped);
digitalWrite(greenPin, LOW);
}
}
а могли бы просто подсказать использовать функцию while вместо if
Я начинаю только знакомство с ардуино много чего не знаю, поэтом требуется ваша помощь.
научитесь правильно подключать и работать с кнопкой, переключать режимы, разберитесь что такое дребезг контактов и как с ним бороться.
разберитесь как выводить информацию на дисплей.
поиграйтесь со светодиодами, научитесь как мигать-моргать-гореть без делеев.
и только потом собирайте всё в кучу.
учить вас никто не будет (как и на любом другом форуме), могут только подсказать.
Я начинаю только знакомство с ардуино много чего не знаю, поэтом требуется ваша помощь.
Вообщем хочу сделать из ардуино контроллер зажигания светодиодов. А именно чтобы были разные режимы(переключаемые кнопкой), информация о режиме (номер режима) выводился на oled экран(128х32).
Первый режим подразумевает цветомузыку.
второй режим просто переключает светодиоды по порядку.
Написал код но ничего не работает. Думаю проблема в том что функция loop выполняет все сравнения чем отнимает время зажигания светодиодов.
По идее надо как-то зациклить выполнение одного из режимов, а не нужные для режимов вычисления чтобы запускались при дополнительном условии. Но как это сделать я не знаю.
помогите.
К слову arduino uno r3
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
uint8_t numchars;
int MicValue;
int sped;
int mode;
int correction;
int MicPin = A1;
int button = 1;
int redPin = 2;
int greenPin = 3;
int bluePin = 4;
int YellowPin = 5;
void setup() {
// put your setup code here, to run once:
pinMode(11, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(YellowPin, OUTPUT);
pinMode(MicPin, INPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(YellowPin, LOW);
myOLED.begin();
}
void loop() {
button = digitalRead(11);
correction = 499; //вычисление для режима 1
MicValue = analogRead(MicPin)+correction;
sped = analogRead(A2)/2 //вычисление для режима 2
if(button == 1){ //вычисления режима работы
mode++;
delay(1000);
}
if(mode == 3 && l == 1){
mode = 1;
}
if(mode == 1){ //режим 1
myOLED.setFont(MegaNumbers);
myOLED.print(" 1 ", 0, 0);
myOLED.print(" ", 0, 50);
myOLED.update();
if (MicValue > 500) {
digitalWrite(bluePin,HIGH);
delay(100);
}
if (MicValue > 515) {
digitalWrite(greenPin, HIGH);
delay(100);
}
if (MicValue > 530) {
digitalWrite(redPin, HIGH);
delay(100);
}
if (MicValue > 545) {
digitalWrite(YellowPin, HIGH);
delay(100);
}
digitalWrite(greenPin, LOW); //все гасим для стобо-эффекта
digitalWrite(redPin, LOW);
digitalWrite(bluePin,LOW);
digitalWrite(YellowPin,LOW);
delay(5);
}
if(mode == 2) { // режим 2
myOLED.setFont(MegaNumbers);
myOLED.print(" 2 ", 0, 0);
myOLED.print(" ", 0, 50);
myOLED.update();
digitalWrite(redPin, HIGH);
delay(sped);
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
delay(sped);
digitalWrite(bluePin, LOW);
digitalWrite(YellowPin, HIGH);
delay(sped);
digitalWrite(YellowPin, LOW);
digitalWrite(greenPin, HIGH);
delay(sped);
digitalWrite(greenPin, LOW);
}
}