Подскажите пожалуйста с трехцветным светодиодом и генератором случайных значений

Termate
Offline
Зарегистрирован: 03.07.2017

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

 

#define RED_PIN  9

#define GREEN_PIN  10
#define BLUE_PIN  11
#define DIGITAL_IN 7
long randNumber;
 
void setup()
{
  Serial.begin(9600);
 
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
  randomSeed(analogRead(1));
}
 
void loop()
{
  
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);    
 
if (sensorValue < 640)
  {
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
  }
  
  else if (sensorValue > 610)
    {
      mainColors (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsRed (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsGreen (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsBlue (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsYellow (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsTurquoise (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsPink (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsWhite (RED_PIN,GREEN_PIN,BLUE_PIN);
    }
 
}
 
void mainColors(int x, int y, int z) //все светодиоды выключены
    {
      digitalWrite(x, LOW);
      digitalWrite(y, LOW);
      digitalWrite(z, LOW);
    
      delay(1000);
    }
void mainColorsRed(int x, int y, int z) // КРАСНЫЙ
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, LOW);
      digitalWrite(z, LOW);
      
      delay(1000);
    }
      
void mainColorsGreen(int x, int y, int z) // Включаем ЗЕЛЕНЫЙ
    {
      digitalWrite(x, LOW);
      digitalWrite(y, HIGH);
      digitalWrite(z, LOW);
    
      delay(1000);
    }
 
void mainColorsBlue(int x, int y, int z)  // Включаем СИНИЙ – BLUE_PIN, HIGH.
    {
      digitalWrite(x, LOW);
      digitalWrite(y, LOW);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsYellow(int x, int y, int z) // Включаем ЖЕЛТЫЙ – RED и BLUE HIGH.
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, HIGH);
      digitalWrite(z, LOW);
    
      delay(1000);
    }
void mainColorsTurquoise(int x, int y, int z) // БИРЮЗОВЫЙ – GREEN и BLUE
    {
      digitalWrite(x, LOW);
      digitalWrite(y, HIGH);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsPink(int x, int y, int z) //РОЗОВЫЙ 
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, LOW);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsWhite(int x, int y, int z) //БЕЛЫЙ
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, HIGH);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не нашел, где туть генерируюца случайные числа. И пока код неправильно вставлен, никто и смотреть не будет

Termate
Offline
Зарегистрирован: 03.07.2017

В том то и дело, что никак не могу понять, где и как приминить генерацию чисел или она может вообще не нужна и можно обойтись без нее?

#define RED_PIN  9
#define GREEN_PIN  10
#define BLUE_PIN  11
#define DIGITAL_IN 7


void setup() {
  Serial.begin(9600);

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

void loop() {
  
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);    

if (sensorValue < 640)
  {
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
  }
  
  else if (sensorValue > 610)
    {
      mainColors (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsRed (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsGreen (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsBlue (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsYellow (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsTurquoise (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsPink (RED_PIN,GREEN_PIN,BLUE_PIN);
      mainColorsWhite (RED_PIN,GREEN_PIN,BLUE_PIN);
    }

}

void mainColors(int x, int y, int z) // Выкл. – все светодиоды выключены
    {
      digitalWrite(x, LOW);
      digitalWrite(y, LOW);
      digitalWrite(z, LOW);
    
      delay(1000);
    }
void mainColorsRed(int x, int y, int z) //  КРАСНЫЙ
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, LOW);
      digitalWrite(z, LOW);
      
      delay(1000);
    }
      
void mainColorsGreen(int x, int y, int z) // ЗЕЛЕНЫЙ.
    {
      digitalWrite(x, LOW);
      digitalWrite(y, HIGH);
      digitalWrite(z, LOW);
    
      delay(1000);
    }

void mainColorsBlue(int x, int y, int z)  //СИНИЙ.
    {
      digitalWrite(x, LOW);
      digitalWrite(y, LOW);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsYellow(int x, int y, int z) //ЖЕЛТЫЙ.
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, HIGH);
      digitalWrite(z, LOW);
    
      delay(1000);
    }
void mainColorsTurquoise(int x, int y, int z) // БИРЮЗОВЫЙ
    {
      digitalWrite(x, LOW);
      digitalWrite(y, HIGH);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsPink(int x, int y, int z) //РОЗОВЫЙ
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, LOW);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }
void mainColorsWhite(int x, int y, int z) //БЕЛЫЙ
    {
      digitalWrite(x, HIGH);
      digitalWrite(y, HIGH);
      digitalWrite(z, HIGH);
    
      delay(1000);
    }

 

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

обьясни внятно, какова должна быть логика приложения. 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

DetSimen пишет:

обьясни внятно, какова должна быть логика приложения. 

739862_900.jpg

Termate
Offline
Зарегистрирован: 03.07.2017

DetSimen пишет:

обьясни внятно, какова должна быть логика приложения. 

 

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

Alex_Mirko
Alex_Mirko аватар
Offline
Зарегистрирован: 16.05.2016
#define RED_PIN  9
#define GREEN_PIN  10
#define BLUE_PIN  11
#define DIGITAL_IN 7


void setup() {
  Serial.begin(9600);

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

void loop() {

  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);

  if (sensorValue < 640)
  {
    analogWrite(RED_PIN, 0);
    analogWrite(GREEN_PIN, 0);
    analogWrite(BLUE_PIN, 0);
  }

  else if (sensorValue > 610)
  {
    analogWrite(RED_PIN, random(255));
    analogWrite(GREEN_PIN, random(255));
    analogWrite(BLUE_PIN, random(255));
  }

}

 

Termate
Offline
Зарегистрирован: 03.07.2017

Alex_Mirko пишет:

#define RED_PIN  9
#define GREEN_PIN  10
#define BLUE_PIN  11
#define DIGITAL_IN 7


void setup() {
  Serial.begin(9600);

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

void loop() {

  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);

  if (sensorValue < 640)
  {
    analogWrite(RED_PIN, 0);
    analogWrite(GREEN_PIN, 0);
    analogWrite(BLUE_PIN, 0);
  }

  else if (sensorValue > 610)
  {
    analogWrite(RED_PIN, random(255));
    analogWrite(GREEN_PIN, random(255));
    analogWrite(BLUE_PIN, random(255));
  }

}

 

 

Огромное Спасибо! А то я этот random и так и сяк а он никак)))