Seguinte galera, to enfrentando um problema com o código, quando usei if else, ele le a distancia certa, e em seguida le 0, e fica algo tipo :
ex-
0
20
0
20
0
21
0
22
0
20
assim, estou tentando usar o switch case, mas estou encontrando o problema___ "tent_ultrassonico_distancia_led:96: error: 'distancia' cannot appear in a constant-expression"___
se alguem poder me ajudar!
CÓDIGO:
// Projeto : Sequencial de Leds com potenciometro
// Baseado no projeto sequencial de leds do Livro Arduino Basico - Autor Michael Roberts
// Alterações : Arduino & Cia
#include "Ultrasonic.h"
#define echoPin 3 //Pino 13 recebe o pulso do echo
#define trigPin 2 //Pino 12 envia o pulso para gerar o echo
//iniciando a função e passando os pinos
Ultrasonic ultrasonic(12,13);
byte ledPin[]={4,5,6,7,8,9,10,11,12,13}; //Cria um array para os pinos dos Leds
int ledDelay; // Intervalo entre as alterações
int direcao = 1; // Direcao do "movimento"
int ledatual = 0;
;
void setup()
{
pinMode(echoPin, INPUT); // define o pino 3 como entrada (recebe)
pinMode(trigPin, OUTPUT); // define o pino 2 como saida (envia)
Serial.begin(9600); // Inicializa a comunicacao serial
for (int x=0; x<10; x++) // Loop que define todos os pinos como saída
{
pinMode(ledPin[x],OUTPUT);
}
}
void loop()
{
//seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
// função Ranging, faz a conversão do tempo de
//resposta do echo em centimetros, e armazena
//na variavel distancia
int distancia = (ultrasonic.Ranging(CM));
Serial.print("Distancia em CM: ");
Serial.println(distancia);
delay(1000); //espera 1 segundo para fazer a leitura novamente
switch (distancia) {
case ( distancia <=10 ):
for (int x=0; x<10 ; x++) {
digitalWrite(ledPin[x], HIGH);
delay(50);
}
break;
case (( distancia >10 ) && (distancia <= 20)):
funcum();
break;
case (( distancia >20 ) && (distancia <= 30)):
funcdois();
break;
case (( distancia >30 ) && (distancia <= 40)):
functres();
break;
case (( distancia >40 ) && (distancia <= 50)):
funcquatro();
break;
case (( distancia >50 ) && (distancia <= 60)):
funccinco();
break;
case (( distancia >60 ) && (distancia <= 70)):
funcseis();
break;
case (( distancia >70 ) && (distancia <= 80)):
funcsete();
break;
case (( distancia >80 ) && (distancia <= 90)):
funcoito();
break;
case (( distancia >90 ) && (distancia <= 100)):
funcnove();
break;
default :
for (int x=0; x<10 ; x++) {
digitalWrite(ledPin[x], LOW);
delay(50);
}
}
}
void funcum() {
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], HIGH);
digitalWrite(ledPin[8], HIGH);
digitalWrite(ledPin[9], LOW);
}
void funcdois() {
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], HIGH);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void functres(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], HIGH);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcquatro(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], HIGH);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funccinco(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], HIGH);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcseis(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], HIGH);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcsete(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], HIGH);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcoito(){
digitalWrite(ledPin[0], HIGH) ;
digitalWrite(ledPin[1], HIGH);
digitalWrite(ledPin[2], LOW);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}
void funcnove(){
digitalWrite(ledPin[0], HIGH);
digitalWrite(ledPin[1], LOW);
digitalWrite(ledPin[2], LOW);
digitalWrite(ledPin[3], LOW);
digitalWrite(ledPin[4], LOW);
digitalWrite(ledPin[5], LOW);
digitalWrite(ledPin[6], LOW);
digitalWrite(ledPin[7], LOW);
digitalWrite(ledPin[8], LOW);
digitalWrite(ledPin[9], LOW);
}