Как это работает

всем привет я новичок. прошу мне помочь разобраться в этих недочётах. так же буду рад если подскажите хорошую литературу по ардуинои языку с++ с нуля.

  1. int DISPLAY_TIME - у меня низачто не отвечает, хотя по инструкции должен контролировать, на сколько быстро выполняется цикл по смене цветов (в качестве эксперимента попробуйте поменять ее значение).

  2. void showSpectrum - в исходном коде написана без void, у меня же программа выдаёт ошибку, хотелось бы знать почему.

‘’'const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;

int DISPLAY_TIME = 200;

void setup() {

pinMode(RED_PIN, OUTPUT);
pinMode (GREEN_PIN, OUTPUT);
pinMode (BLUE_PIN, OUTPUT);
}

void loop()
{

mainColors();

void showSpectrum();
}

void mainColors()
{
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);

delay(1000);

digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);

delay(1000);

// Включаем СИНИЙ – BLUE_PIN, HIGH.

digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);

delay(1000);

// Включаем ЖЕЛТЫЙ – RED и BLUE HIGH.

digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);

delay(1000);

// БИРЮЗОВЫЙ – GREEN и BLUE

digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);

delay(1000);

//РОЗОВЫЙ – RED и BLUE

digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);

delay(1000);

//БЕЛЫЙ – все цвета HIGH (Вкл.)

digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);

delay(1000);

}‘’’

Научись код вставлять правильно для начала.

@MrCatVolt
Добро пожаловать на форум

Пожалуйста, ознакомтесь с темой Как правильно задать вопрос и исправьте свое сообщение

1 лайк

Потому что должен быть void. Или int. Или ещё какой-то тип переменной. Почему в исходном без него - вопрос, конечно.

Гриш, посмотри внимательно, речь идет о вызове процедуры. Там не должно быть void.

А ошибка потому что сама процедура в коде не определена.

1 лайк

@MrCatVolt

Похоже один ответ на оба ваших вопроса - потому что этот код не полный, вы потеряли часть кода.

Простите, вставлено криво - не вчитывался.

void используется при обявлении функциИ,когда она ничего не взвращает у вас в лупе это просто вызов функции там войд не нужен, хотя в программе я такой функции не заметил может просто пропустил

1 лайк

и как её определить?

извените. впервые на форуме и с ардуинкой. буду исправляться)

А смысл? Если она вызывается, значит должна что-то делать. А что она у вас должна делать? Какой смысл определять пустую функцию? Видимо вы скопировали не весь код

так лучше уважаемые профессора?

const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;

int DISPLAY_TIME = 200; \\ низачто не отвечает

void setup() {

  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop() {

  mainColors();

  void showSpectrum(); \\ без воид выдаёт ошибку.
}

void mainColors() {
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

  // Включаем СИНИЙ – BLUE_PIN, HIGH.

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

  // Включаем ЖЕЛТЫЙ – RED и BLUE HIGH.

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

  // БИРЮЗОВЫЙ – GREEN и BLUE

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

  //РОЗОВЫЙ – RED и BLUE

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

  //БЕЛЫЙ – все цвета HIGH (Вкл.)

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);
}

1 лайк

я учусь по этим урокам. я выполнил первую часть. дальше пример для других настроек.

/*
 * Набор для экспериментов MaxKit 01
 * Код программы для опыта №3: sketch 03
 * 
 * RGB Светодиод
 * 
 * Написано для сайта "Полный комплект" http://maxkit.ru
 * 
 *
 * Помощь сообщества Arduino. 
 * Посетите сайт http://www.arduino.cc
 * 
 *
 *
 *
 * Этот sketch был написан SparkFun Electronics,
 * Переведен специально для сайта http://maxkit.ru
 * 01 февраля 2015г.
 *
*/

// Программа демонстрации возможностей RGB LED
// Сначала мы присвоим нужным портам имена, чтобы легче
// читать и понимать нашу программу.

// Вот новый трюк: поставленное слово "const" перед переменной
// указывает, на то что эта переменная имеет «постоянное» значение,
// которое никогда не будет меняются. ( Вы должны это помнить, иначе
// Arduino выдаст вам дружеское предупреждение, если вы случайно
// попытаетесь изменить это значение.

const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;

// Следующая переменная контролирует, на сколько быстро выполняется цикл
// по смене цветов (в качестве эксперимента попробуйте поменять ее значение)

int DISPLAY_TIME = 100;  // в миллисекундах

void setup()
{
// Далее мы конфигурируем порты Arduino которые будут управлять светодиодом:

  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop()
{

// В этом примере, мы начнем писать свои собственные функции. 
// Функции разбивают программу на маленькие кусочки, это упрощает
// понимание программы и поэтому отпадает необходимость каждый
// раз вносить изменения в setup() или loop().

// Мы покажем вам два способа для запуска RGB LED. 
// Первый способ состоит из включения и выключения красного, 
// зеленого и синего в различных сочетаниях (например красный – синий,
// или зеленый синий, зеленый - синий и т.п). Такие сочетания, в общей
// сложности, дают вам восемь цветов (если считать "черный" в качестве цвета). 

// Мы создали функцию с именем mainColors (), которая проходит через
// все восемь цветов. Здесь мы только вызываем нашу функцию,
// как бы говорим – запустить. Сам же код функции находится ниже.

mainColors();

// Эта функция включает и выключает отдельно каждый светодиод либо Вкл., либо
// Выкл. Если вы хотите получить больше чем восемь цветов, вам придется
// изменять еще и яркость каждого светодиода. Для этого можно воспользоваться
// функцию analogWrite(), - градация яркости от 0 до 255. Далее идет функция
// с именем showSpectrum (), которая плавно проследует через каждый из 8 цветов.
// Опять же здесь мы только называем ее, сам же код находится ниже.

  showSpectrum();
}

// Если вам захочется использовать функцию mainColors() в своих собственных
// программах, просто скопируйте ее код и добавьте в свой скетч.

void mainColors()
{
// Выкл. – все светодиоды выключены

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

delay(1000);

// Включаем КРАСНЫЙ – RED_PIN, HIGH.

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// Включаем ЗЕЛЕНЫЙ – GREEN_PIN, HIGH.

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// Включаем СИНИЙ – BLUE_PIN, HIGH.

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

// Включаем ЖЕЛТЫЙ – RED и BLUE HIGH.

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);

  delay(1000);

// БИРЮЗОВЫЙ – GREEN и BLUE

  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

//РОЗОВЫЙ – RED и BLUE

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);

//БЕЛЫЙ – все цвета HIGH (Вкл.)

  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);

  delay(1000);
}

// Ниже приведен код еще двух функций: 
// ShowSpectrum () и showRGB(). 

// ShowRGB () выводит один цвет на светодиод. Когда вам необходим
// определенный цвет, вызываете showRGB() с нужным вам цветом.

// ShowSpectrum () выводит все цвета по очереди – радуга. 
// На самом деле showSpectrum() вызывает снова и снова
// функцию showRGB (), для того чтобы получилась радуга. 

// Мы будем часто разбивать задачи на отдельные функции, как
// в этом примере. Это Упрощает написание программ, и можно
// легко перенести функцию в свою новую программу.

// showSpectrum()
// Эта функция перебирает все возможные цвета, путем увеличения
// переменной от 0 до 768 (общее количество цветов), и неоднократно
// вставляет полученное значение в showRGB (), чтобы отобразить отдельные цвета. 

// В этой функции, мы используем петлю “loop()” в которой выполняется цикл
// из трех последовательных шагов:
// Инициализация переменной «int x», в следующем шаге увеличиваем эту
// переменную на единицу, и в следующем шаге вызываем функцию showRGB(),
// вставляя в нее новое значение переменной, ждем некоторое время, примерно 10мс.,
// и выполняем петлю заново. Таким образом наша функция showRGB() получает
// новое значение при каждом новом проходе петли.

// Если еще подробнее - Каждый «for() цикл имеет
// три инструкции через точку с запятой: 

// 1. Что-то делать, прежде чем начать 
// 2. Тест - выполняется ли условие. Петля «loop()» будет выполняться, пока условие истинно.
// 3. Что-то сделать после каждого цикла - в нашем случае увеличить переменную.

// Условия для for(), чуть ниже: 

// 1.  х = 0; Перед началом, убедиться, что х = 0. 
// 2. х <768;  Далее условие: проверить, x меньше 768, если да,
// то выполнить следующую инструкцию.
// 3. x ++ т.е увеличить переменную х на единицу.
// Вы можете использовать и такой вид записи: "х = х + 1"

// Каждый раз, когда вы идете через петлю, значение переменной будет увеличиваться
// пока не дойдет до 768, а это значит, что условие стало ложным, и значит пора
// выходить из петли. И переходить к следующей инструкции.

void showSpectrum()
{
  int x;
  for (x = 0; x < 768; x++)
  {
    showRGB(x);  // Вызов RGBspectrum() сновым значением x
    delay(10);   // Пауза 10 ms (1/100 секунды)
  }
}

// ShowRGB() 
// Эта функция переводит число от 0 до 767 в  определенный цвет.
// Если плавно пройтись по этому числовому ряду, то светодиод будет
// плавно менять цвет через весь цветовой спектр. 

// Базовые цифры: 
// 0 = чистый красный 
// 255 = чистый зеленый 
// 511 = чистый синий 
// 767 = чистый красный (опять же) 

//Числа между вышеуказанных создадут промежуточные цвета.  
// Например, 640 находится на полпути между 512 (чистый синий)
// и 767 (Чистый красный). Это даст смесь синего и красного,
// в результате чего получится фиолетовый. 

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

void showRGB(int color)
{
  int redIntensity;
  int greenIntensity;
  int blueIntensity;

//Здесь мы будем использовать условие «if/else» (если/тогда), для
// того чтобы определить в какую из трех зон (R,G,B)
// попадет значение переменной x
//Каждая из этих зон охватывает значение от 0 до 255, потому что
// только такие значения понимает функция analogWrite().
// В каждой из этих зон, мы будем вычислять яркость для
// каждого из светодиодов - красного, зеленого и синего.

  if (color <= 255)                // зона 1
  {
    redIntensity = 255 - color;    // красный меняется из включенного на выключенный    
    greenIntensity = color;        // зеленый меняется из выключенного на включенный
    blueIntensity = 0;             // голубой всегда выключен
  }
  else if (color <= 511)           // зона 2
  {
    redIntensity = 0;                     // красный всегда выключен
    greenIntensity = 255 - (color - 256); // зеленый от включенного к выключенному
    blueIntensity = (color - 256);        // голубой от выключенного к включенному
  }
  else if color >= 512             // зона 3
  {
    redIntensity = (color - 512);         // красный выкл. К вкл.
    greenIntensity = 0;                   // зеленый всегда выкл.
    blueIntensity = 255 - (color - 512);  // голубой от вкл. К выкл.
  }

// Теперь, когда параметры значения яркости были установлены,
// функциям передаются значение этих переменных

  analogWrite(RED_PIN, redIntensity);
  analogWrite(BLUE_PIN, blueIntensity);
  analogWrite(GREEN_PIN, greenIntensity);
}

На порядок.
Теперь всё ясно, читай ответ Alexey Rem, например.
Если выкинул из исходника функцию, то выкидывай и её вызовы.

1 лайк

Для начала советую прочитать тему, созданную на этом форуме специально в помощь новичкам: