Пожалуйста, помогите доработать программу

Черрик
Черрик аватар
Offline
Зарегистрирован: 26.12.2018

Добрый день. Я - новичок в Ардуино. Мне нужно чем-то заменить for в программе, но я не понимаю, как.

Черрик
Черрик аватар
Offline
Зарегистрирован: 26.12.2018
const int8_t tonePin = 11;  
const byte rgbPins[3] = {3,5,6};
int dim = 1;    
void setup() {
for(byte i=0; i<3; i++){
pinMode( rgbPins[i], OUTPUT );
}
pinMode(2,OUTPUT); 
pinMode(rgbPins[0], OUTPUT);
pinMode(rgbPins[1], OUTPUT);
pinMode(rgbPins[2], OUTPUT);
}
void gori() {
analogWrite(rgbPins[0], 255);
analogWrite(rgbPins[1], 0);
analogWrite(rgbPins[2], 0);
    for(int i=255; i>=0; i--){
        analogWrite( rgbPins[0], i/dim );
        analogWrite( rgbPins[1], (255-i)/dim );
     unsigned long time1=millis();
    while (millis()-time1<10)
   { 
      }
    }
    for(int i=255; i>=0; i--){
        analogWrite( rgbPins[1], i/dim );
        analogWrite( rgbPins[2], (255-i)/dim );
       unsigned long time1=millis();
    while (millis()-time1<10)
   { 
      }
    }
    for(int i=255; i>=0; i--){
        analogWrite( rgbPins[2], i/dim );
        analogWrite( rgbPins[0], (255-i)/dim );
        unsigned long time1=millis();
    while (millis()-time1<10)
   { 
      }
analogWrite(rgbPins[0], 0);
analogWrite(rgbPins[1], 0);
analogWrite(rgbPins[2], 0);
    }
}
void midi() {
    const struct {
        int freq, duration, dly;
    } sounds[] = {
        {293, 225, 250}, {493, 225, 250}, {440, 225, 250}, {391, 225, 250}, {293, 450, 750},
        {293, 225, 250}, {293, 225, 250}, {493, 225, 250}, {440, 225, 250}, {391, 225, 250},
        {329, 450, 750}, {329, 225, 250}, {329, 225, 250}, {523, 225, 250}, {493, 225, 250},
        {440, 225, 250}, {587, 450, 750}, {587, 225, 250}, {659, 225, 250}, {587, 225, 250},
        {523, 225, 250}, {440, 225, 250}, {493, 675, 750}, {293, 225, 250}, {293, 225, 250},
        {493, 225, 250}, {440, 225, 250}, {391, 225, 250}, {293, 450, 750}, {293, 225, 250},
        {293, 225, 250}, {493, 225, 250}, {440, 225, 250}, {391, 225, 250}, {329, 450, 750},
        {329, 225, 250}, {329, 225, 250}, {523, 225, 250}, {493, 225, 250}, {440, 225, 250},
        {587, 225, 250}, {587, 225, 250}, {587, 225, 250}, {587, 225, 250}, {659, 225, 250},
        {587, 225, 250}, {523, 225, 250}, {440, 225, 250}, {391, 450, 500}, {587, 450, 500},
        {493, 225, 250}, {493, 225, 250}, {493, 450, 500}, {493, 225, 250}, {493, 225, 250},
        {493, 450, 500}, {493, 225, 250}, {587, 225, 250}, {391, 337, 375}, {440, 112, 125},
        {493, 450, 1000}, {523, 225, 250}, {523, 225, 250}, {523, 337, 375}, {523, 112, 125},
        {523, 225, 250}, {493, 225, 250}, {493, 225, 250}, {493, 112, 125}, {493, 112, 125},
        {493, 225, 250}, {440, 225, 250}, {440, 225, 250}, {493, 225, 250}, {440, 450, 500},
        {587, 450, 500}, {493, 225, 250}, {493, 225, 250}, {493, 450, 500}, {493, 225, 250},
        {493, 225, 250}, {493, 450, 500}, {493, 225, 250}, {587, 225, 250}, {391, 337, 375},
        {440, 112, 125}, {493, 450, 1000}, {523, 225, 250}, {523, 225, 250}, {523, 337, 375},
        {523, 112, 125}, {523, 225, 250}, {493, 225, 250}, {493, 225, 250}, {493, 112, 125},
        {493, 112, 125}, {587, 225, 250}, {587, 225, 250}, {523, 225, 250}, {440, 225, 250},
       {391, 675, 750}
    };
    const uint8_t melodieLength = sizeof(sounds) / sizeof(sounds[0]);
    for (uint8_t i = 0; i < melodieLength; i++) {
        tone(tonePin, sounds[i].freq, sounds[i].duration);
         unsigned long time1=millis();
    while (millis()-time1<sounds[i].dly)
   { 
      }
  }
}
void loop()
{
if(analogRead(A0)>60)
{
midi();
gori();
}
}

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А мы, кроме того, не понимаем еще и "Чем заменить" и "Зачем заменять".

bwn
Offline
Зарегистрирован: 25.08.2014

Создаете функции, в них заводите переменные счетчика, которые изменяете при каждом входе. Дополнительным условием входа в функцию делаете ваш миллис, который сейчас ничем не отличается от делея. Никакие while, for не нужны, только if-ы.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Черрик пишет:

Добрый день. Я - новичок в Ардуино. Мне нужно чем-то заменить for в программе, но я не понимаю, как.

замени на while(){};

или на do while();

или if и goto

leks
Offline
Зарегистрирован: 22.10.2017

Это ёлка которая либо играет, либо мигает, а надо чтоб одновременно?

Черрик
Черрик аватар
Offline
Зарегистрирован: 26.12.2018

leks, вы экстрасенс!

leks
Offline
Зарегистрирован: 22.10.2017

Черрик пишет:

leks, вы экстрасенс!

Ну так у вас одна функция мигает, другая играет. И ни как в таком виде одновременно не будет, а только по очереди их вызова.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ТС уже задавал этот вопрос пару месяцев назад и ему уже все объяснили. Причем я постарался это сделать понятно даже для дауна. Дальше - вопросы для специалиста в коррекционной педагогике.

Вот ссылка на ту тему.