Perguntas de iniciante

Olá, estou começando a brincar com o Arduino e fiquei com algumas dúvidas.

  1. Qual a maneira correta de "parar" o Arduino? Explico melhor: Estou com ele conectado no USB executando um determinado código em um determinado circuito. Ai eu preciso adicionar alguns componentes e alterar um pouco do código. Atualmente o que eu faço é "desplugar" a USB do notebook. Faço as alterações e "plugo" novamente. Está correto isso? Não tem a possibilidade de estragar algo?

  2. Existe algum limite de upload para Arduino? Eu li que as memórias EEPROM suportam no máximo 100.000 remoção/escrita e leitura infinita. Isso se aplica ao Arduino?

  3. Conectei um LED no oin 10, fiz o digitalWrite(10, HIHG) e não setei o pinMode(10, OUTPUT). Mesmo assim, o LED acendeu, bem fraco, mas acendeu. Quando coloquei o código pinMode(10, OUTPUT), ele continuou aceso, mas dessa vez, bem mais forte (conforme o esperado). A questão é, por que eu ele acendeu mesmo não setando o modo como OUTPUT?

Oenning:

  1. Qual a maneira correta de "parar" o Arduino? Explico melhor: Estou com ele conectado no USB executando um determinado código em um determinado circuito. Ai eu preciso adicionar alguns componentes e alterar um pouco do código. Atualmente o que eu faço é "desplugar" a USB do notebook. Faço as alterações e "plugo" novamente. Está correto isso? Não tem a possibilidade de estragar algo?

É isso mesmo. O microcrontrolador foi feito para funcionar desta maneira. tudo que está no LOOP() roda para sempre e pronto.

Oenning:
2) Existe algum limite de upload para Arduino? Eu li que as memórias EEPROM suportam no máximo 100.000 remoção/escrita e leitura infinita. Isso se aplica ao Arduino?

Sim, existe. O limite de tamanho do programa compilado no uno é ~30k e no mega2560 é ~254k. (os 2k é por causa do bootloader que usa memória flash). Quanto ao limite de escrita/remoção deve ser por volta disso mesmo.

Oenning:
3) Conectei um LED no oin 10, fiz o digitalWrite(10, HIHG) e não setei o pinMode(10, OUTPUT). Mesmo assim, o LED acendeu, bem fraco, mas acendeu. Quando coloquei o código pinMode(10, OUTPUT), ele continuou aceso, mas dessa vez, bem mais forte (conforme o esperado). A questão é, por que eu ele acendeu mesmo não setando o modo como OUTPUT?

Não sei precisar isso mas provavelmente deve ser por causa do resistor pull-up do pino no uC.

Olá pessoal, boa noite!
Estou querendo fazer um projeto de monitoria de canais, TV.
onde queria criar um arduino que identificasse um canal fora do ar, ou tela black através do receptor de tv. (decoder).
tem como??

Olá pesooal, bom dia !!!!

Por favor me ajudem !!!!!! preciso usar os comandos if e while.

Preciso criar bum programa com 3 botões e 1 led.
Quando o botão 1 for pressionado o programa deverá armazenar a quantidade de vezes que foi pressionado, e quando o botão "ENTER" (3) for pressionado, o programa deverá acender e apagar o led a quantidade de vezes que o botão 1 foi pressionado.
Caso a pessoa deseje diminuir a quantidade de vezes que o led piscará, deverá utilizar o botão 2 (antes de apertar o ENTER).

Sou iniciante na programação de arduino e estou precisando comunicar um programa com uma página HTML, minha dúvida é como montar o código que irá criar um botão na página web que quando pressionado irá ligar uma saída do arduino.

Claudemiro:
Olá pesooal, bom dia !!!!

Por favor me ajudem !!!!!! preciso usar os comandos if e while.

Preciso criar bum programa com 3 botões e 1 led.
Quando o botão 1 for pressionado o programa deverá armazenar a quantidade de vezes que foi pressionado, e quando o botão "ENTER" (3) for pressionado, o programa deverá acender e apagar o led a quantidade de vezes que o botão 1 foi pressionado.
Caso a pessoa deseje diminuir a quantidade de vezes que o led piscará, deverá utilizar o botão 2 (antes de apertar o ENTER).

Traquilo Claudemiro.

Faz assim que não tem erro:

int conta=0; // armazena o numero de vezes que o botão é pressionado
int i;

void loop () {

if (!botao1)
{
delay(300);
conta++; // Se o botao1 for pressionado incrementa a variável conta
}

if (!botao2)
{
delay(300);
conta--; // Se o botao2 for pressionado decrementa a variável conta

if (!botao3)
{
delay(300);
for(i=0;i<conta;i++)
{
digitalWrite(led,HIGH);
delay(500);
digitalWrite(led,LOW);
delay(500);
}
conta=0;
}

IMPORTANTE: O delay de 300ms é importante por causa do efeito debounce, senão o programa vai interpretar que vc apertou os botões várias vezes

Bom claro que ainda faltam declarar e configurar os botões, escrever as linhas de comando de leitura dos botões etc...mais ai acredito que vc já sabe como fazer por isso não coloquei

Claudemiro:
Olá pesooal, bom dia !!!!

Por favor me ajudem !!!!!! preciso usar os comandos if e while.

Preciso criar bum programa com 3 botões e 1 led.
Quando o botão 1 for pressionado o programa deverá armazenar a quantidade de vezes que foi pressionado, e quando o botão "ENTER" (3) for pressionado, o programa deverá acender e apagar o led a quantidade de vezes que o botão 1 foi pressionado.
Caso a pessoa deseje diminuir a quantidade de vezes que o led piscará, deverá utilizar o botão 2 (antes de apertar o ENTER).

Faltam muitas informações, como por exemplo, quanto tempo o led deve permanecer aceso? A necessidade de colocar limite?

int numeroPiscadas = 0;

botaoAumenta = 3;

botaoDiminui = 4;

piscaLed = 5;

led = 6;

tempoPisca = 100;

boolean verificaBotaoUp = false;

boolean verificaBotaoDown = false;


void setup(){

  pinMode(botaoAumenta,INPUT);

  pinMode(botaoDiminui,INPUT);

  pinMode(piscaLed, INPUT);

  pinMode(led, OUTPUT);

}

void loop(){

  if((digitalRead(botaoAumenta)== HIGH) && (verificaBotaoUp == false)){
   
      numeroPiscada++;

      verificaBotao = true;

  }  else {
 
      verificabotaoUP = false;

  }


  if((digitalRead(botaoDiminiu)== HIGH) && (verificaBotaoDown == false)){

     if(numeroPiscada > 0) {

         numeroPiscada--;

     }

     verificaBotaoDown = true;

  } else {

     verificaBotaoDown = false;

  }

  if(digitalRead(botaoAumenta)== HIGH){

     for(int i =0; i<=numeroPiscadas; i++) {

        digitalWrite(led,HIGH);

        delay(tempoPisca/2);
        
        digitalWrite(led,LOW);

        delay(tempoPisca/2);

     }


}

Claudemiro:
Olá pesooal, bom dia !!!!

Por favor me ajudem !!!!!! preciso usar os comandos if e while.

Preciso criar bum programa com 3 botões e 1 led.
Quando o botão 1 for pressionado o programa deverá armazenar a quantidade de vezes que foi pressionado, e quando o botão "ENTER" (3) for pressionado, o programa deverá acender e apagar o led a quantidade de vezes que o botão 1 foi pressionado.
Caso a pessoa deseje diminuir a quantidade de vezes que o led piscará, deverá utilizar o botão 2 (antes de apertar o ENTER).

Faltou um pedaço do código, segue abaixo corrigido.

Claudemiro:
Olá pesooal, bom dia !!!!

Por favor me ajudem !!!!!! preciso usar os comandos if e while.

Preciso criar bum programa com 3 botões e 1 led.
Quando o botão 1 for pressionado o programa deverá armazenar a quantidade de vezes que foi pressionado, e quando o botão "ENTER" (3) for pressionado, o programa deverá acender e apagar o led a quantidade de vezes que o botão 1 foi pressionado.
Caso a pessoa deseje diminuir a quantidade de vezes que o led piscará, deverá utilizar o botão 2 (antes de apertar o ENTER).

Faltam muitas informações, como por exemplo, quanto tempo o led deve permanecer aceso? A necessidade de colocar limite?

int numeroPiscadas = 0;

botaoAumenta = 3;

botaoDiminui = 4;

piscaLed = 5;

led = 6;

tempoPisca = 100;

boolean verificaBotaoUp = false;

boolean verificaBotaoDown = false;


void setup(){

  pinMode(botaoAumenta,INPUT);

  pinMode(botaoDiminui,INPUT);

  pinMode(piscaLed, INPUT);

  pinMode(led, OUTPUT);

}

void loop(){

  if((digitalRead(botaoAumenta)== HIGH) && (verificaBotaoUp == false)){
   
      numeroPiscada++;

      verificaBotao = true;

  }  else {
 
      verificabotaoUP = false;

  }


  if((digitalRead(botaoDiminiu)== HIGH) && (verificaBotaoDown == false)){

     if(numeroPiscada > 0) {

         numeroPiscada--;

     }

     verificaBotaoDown = true;

  } else {

     verificaBotaoDown = false;

  }

  if(digitalRead(botaoAumenta)== HIGH){

     for(int i =0; i<=numeroPiscadas; i++) {

        digitalWrite(led,HIGH);

        delay(tempoPisca/2);
        
        digitalWrite(led,LOW);

        delay(tempoPisca/2);

     } //FALTOU ESSA PARTE DO CÓDIGO

   numeroPiscadas = 0; 
   } // ATÉ AQUI


}

Boa noite pessoal, estou desenvolvendo um projeto na qual preciso capturar um pico de um sinal analógico e o tempo desse pico. O sinal começa em zero e se altera no espaço de tempo de 0 a 200ms, com amplitude de aproximadamente 30mA, qual comando uso para ter esse valor?

Oenning:
Olá, estou começando a brincar com o Arduino e fiquei com algumas dúvidas.

  1. Qual a maneira correta de "parar" o Arduino? Explico melhor: Estou com ele conectado no USB executando um determinado código em um determinado circuito. Ai eu preciso adicionar alguns componentes e alterar um pouco do código. Atualmente o que eu faço é "desplugar" a USB do notebook. Faço as alterações e "plugo" novamente. Está correto isso? Não tem a possibilidade de estragar algo?

Caro amigo, não há nescidade de desplugar e plugar o arduino no pc toda vez que fizer alteração no código, apenas em caso de prototipagem é aconselhável como boas maneira da eletrônica. E para não estragar o arduino

  1. Existe algum limite de upload para Arduino? Eu li que as memórias EEPROM suportam no máximo 100.000 remoção/escrita e leitura infinita. Isso se aplica ao Arduino?

Limites de upload's? Não único limite é quanto a memoria(colega acima já explicou isso acima) e da vida útil do seu Arduíno.

  1. Conectei um LED no oin 10, fiz o digitalWrite(10, HIHG) e não setei o pinMode(10, OUTPUT). Mesmo assim, o LED acendeu, bem fraco, mas acendeu. Quando coloquei o código pinMode(10, OUTPUT), ele continuou aceso, mas dessa vez, bem mais forte (conforme o esperado). A questão é, por que eu ele acendeu mesmo não setando o modo como OUTPUT?

Isso acontece com qual quer CI, é chamado de estado flutuante ele está ocilando sua porta com energia alta e baixa para nois o efeito em um LED é a luminosidade. A chamada da função pinMode apenas irá fazer com que o Arduíno possa distinguir o pino para uso se PULL UP ou PULL DOWN já que se trata de microcontrolador. Caso ainda esteja com dúvidas quanto a isso sugiro um que leia um livro de eletrônica digital.

Como faço para um motor servo ir 0° até 90° a cada 12 horas sem parar? O objetivo é a rotação do servo servir como uma cancela que a cada 12 horas abrirá espaço para passagem de um um água.

Oenning:
Olá, estou começando a brincar com o Arduino e fiquei com algumas dúvidas.

  1. Qual a maneira correta de "parar" o Arduino? Explico melhor: Estou com ele conectado no USB executando um determinado código em um determinado circuito. Ai eu preciso adicionar alguns componentes e alterar um pouco do código. Atualmente o que eu faço é "desplugar" a USB do notebook. Faço as alterações e "plugo" novamente. Está correto isso? Não tem a possibilidade de estragar algo?

Não é necessário desligar a ficha usb para "parar" o Arduino. O IDE depois de compilar o código faz um reset ao Arduino seguido do upload do novo codigo. Esta função é feita pelo "firmware" do Arduino, também conhecido por bootloader que aceita o carregamento de um novo programa nos segundos iniciais (julgo que 10 s) após o reboot.
Estar sempre a ligar e desligar a ficha USB pode eventualmente conduzir a problemas de contacto.

  1. Existe algum limite de upload para Arduino? Eu li que as memórias EEPROM suportam no máximo 100.000 remoção/escrita e leitura infinita. Isso se aplica ao Arduino?

Sim, esses valores aplicam-se aos arduinos. Os valores exatos tem que ser consultados nas datasheet da Atmel para o microcontrolador em particular. Para alem do numero de ciclos de escrita também é interessante saber o tempo de retenção do conteúdo da flash, que não é eterno.

  1. Conectei um LED no oin 10, fiz o digitalWrite(10, HIHG) e não setei o pinMode(10, OUTPUT). Mesmo assim, o LED acendeu, bem fraco, mas acendeu. Quando coloquei o código pinMode(10, OUTPUT), ele continuou aceso, mas dessa vez, bem mais forte (conforme o esperado). A questão é, por que eu ele acendeu mesmo não setando o modo como OUTPUT?

Se não for configurado com o pinMode o arduino terá uma resistência interna para os 5 V (vcc) de um valor relativamente alto, não me recordo se é 1K ou 10K.
Mas atenção que não se deve configurar o pino para OUTPUT e ligar diretamente o led, porque o arduino vai tentar passar toda a corrente que o led pedir. Se for um led pequeno é provavel que queime o led primeiro, mas se for um led capaz de pedir mais de 40 mA provavelmente vai queimar primeiro o arduino.
Portanto, a maneira correta de ligar um led diretamente a um pino é colocar o pinMode(x, OUTPUT) e colocar entre o pino e o positivo do led uma resistência de pelo menos 220ohm, isso vai limitar a corrente a valores seguros para o led e para o arduino.

Alguém poderia me ajudar?
Estou fazendo um projeto de reaproveitamento da água da máquina de lavar, porém esta máquina esta sendo simulada com um motor de uma máquina antiga.O motor no começo dos testes funcionou normal, porém agora não quis mais funcionar, e a bomba de água funciona, porém não esta puxando a água. Vou mandar o código, se alguém puder me ajuda. Muito obrigado.
const int SNA = 7; // SENSOR DE NIVEL ALTO
const int SNB = 6; // SENSOR DE NIVEL BAIXO
const int releBomba = 2; // RELE QUE LIGA A BOMBA
int estadoSNA = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL ( 0 = desligado 1 = ligado)
int estadoSNB = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL
int estadoRele = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL
// OBS: ( 0 = desligado 1 = ligado) Sensor Alto = 0 e baixo = 1;
void setup()
{
pinMode(SNA, INPUT); //DEFINE A PORTA COMO ENTRADA
pinMode(SNB, INPUT); //DEFINE A PORTA COMO ENTRADA
pinMode(releBomba, OUTPUT); //DEFINE A PORTA COMO SAÍDA
}
void loop(){
estadoSNA = digitalRead(SNA); // LÊ O VALOR NA PORTA DIGITAL
estadoSNB = digitalRead(SNB);
if((estadoSNA == 1) && (estadoSNB == 1) && (estadoRele == 0)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, LOW); // liga a bomba (está invertido o estado)
estadoRele = 1; // relé ligado
}
if ((estadoSNA == 1) && (estadoSNB == 0) && (estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, LOW); // liga a bomba (está invertido o estado)
estadoRele = 1; // relé ligado

}
if((estadoSNA == 0) && (estadoSNB == 0) && (estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
if((estadoSNA == 1) && (estadoSNB == 0) && (estadoRele == 0)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
if((estadoSNA == 0) && (estadoSNB == 1) && (estadoRele == 0 || estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
}

Caro amigo, você diz que a bomba liga mas não puxa a água, isso pode ser problema na bomba.
Outra coisa, você já fez o teste em uma protoboard? um teste das condições de acionamento? verificar se o programa está agindo conforme o esperado?
Depois posta a resposta aqui!

POR FAVOR UM HELP......

Sou iniciante e estou tentando controlar 300 leds RGB WS2812B em uma das saídas digitais do arduino nano, até 120 leds vai bem depois não controla mais , será que está faltando corrente na saída digital, estou usando uma fonte externa de 5 Volts 60 Amperes para ligar os leds, teoricamente a saída do arduino é só um sinal de comando.

Abraço Galera......

Será que o protocolo que estás a usar não consegue controlar mais de 120 LED's devido às temporizações?

como fazer para uma porta do arduino responder sempre que uma determinada porta estiver alta?

Hi, I am a beginner in the arduino area, I wanted a help in my code and do an aquarium monitoring, I want to put 7 temperature sensors, 7 relays, separately, 5 ph, 5 water sensor, 5 oxygen sensor . the relays and to activate when the temperature drops, low by 28 degrees, and I want to put an LCD (16.2), to monitor the temperature, ph, water oxygen, and also either via bluetooth to see the dandos and can shoot the bombs manually by a cell phone, I started to do some things, but with difficulty in this project, I thank you already any possible help......... :frowning:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 6 on the Arduino
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 9

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device addresses
DeviceAddress insideThermometer; //outsideThermometer;

int relay =7;

void setup(void)

{
pinMode(relay,OUTPUT);

lcd.begin(16, 2);

// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");

// Start up the library
sensors.begin();

// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");

// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");

// assign address manually. the addresses below will beed to be changed
// to valid device addresses on your bus. device address can be retrieved
// by using either oneWire.search(deviceAddress) or individually via
// sensors.getAddress(deviceAddress, index)
//insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
//outsideThermometer = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

// search for devices on the bus and assign based on an index. ideally,
// you would do this to initially discover addresses on the bus and then
// use those addresses and manually assign them (see above) once you know
// the devices on your bus (and assuming they don't change).
//
// method 1: by index
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
//if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");

// method 2: search()
// search() looks for the next device. Returns 1 if a new address has been
// returned. A zero might mean that the bus is shorted, there are no devices,
// or you have already retrieved all of them. It might be a good idea to
// check the CRC to make sure you didn't get garbage. The order is
// deterministic. You will always get the same devices in the same order
//
// Must be called before search()
//oneWire.reset_search();
// assigns the first address found to insideThermometer
//if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer");
// assigns the seconds address found to outsideThermometer
//if (!oneWire.search(outsideThermometer)) Serial.println("Unable to find address for outsideThermometer");

// show the addresses we found on the bus
Serial.print("Device 0 Address: ");
printAddress(insideThermometer);
Serial.println();

// Serial.print("Device 1 Address: ");
// printAddress(outsideThermometer);
// Serial.println();

// set the resolution to 9 bit
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
// sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();

// Serial.print("Device 1 Resolution: ");
// Serial.print(sensors.getResolution(outsideThermometer), DEC);
// Serial.println();

// set up the LCD's number of columns and rows:

}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 7; i++)
{
// zero pad the address if necessary
if (deviceAddress < 16) Serial.print("0");
_ Serial.print(deviceAddress*, HEX);_
_
}_
_
}_
_
// function to print the temperature for a device*_
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);

Serial.print(" Temp F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
delay(2000);

}
// function to print a device's resolution
void printResolution(DeviceAddress deviceAddress)
{
Serial.print("Resolution: ");
Serial.print(sensors.getResolution(deviceAddress));
*Serial.println(); *
}
// main function to print information about a device
void printData(DeviceAddress deviceAddress)
{
Serial.print("Device Address: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
//Serial.print("Requesting temperatures...");
sensors.requestTemperatures();
//Serial.println("DONE");
// print the device information
//printData(insideThermometer);
//printData(outsideThermometer);

* Serial.println(sensors.getTempC(insideThermometer));*
//Serial.println(sensors.getTempC(outsideThermometer));
Serial.println(" ");

lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 2);
lcd.print("celsius: ");
lcd.print(sensors.getTempC(insideThermometer));
lcd.print(" C");

int setpoint = 29;
int swing = 1;
if ( sensors.getTempC(insideThermometer) >=setpoint + swing) //&& sensors.getTempC(insideThermometer) >sensors.getTempC(outsideThermometer) )
{
digitalWrite(7,HIGH);
* Serial.println("ON ");*
}
else if ( sensors.getTempC(insideThermometer) <setpoint - swing)
{
digitalWrite(7,LOW);
Serial.println("OFF ");
}
delay(500);
}

Sou iniciante ..
Por favor alguém ajude =D
Queria apenas que quando executasse o "case" novamente ele fizesse o reverso, (desligasse o led).

const int Led1 = 7;

void setup() {
Serial.begin(9600);
pinMode(Led1, OUTPUT);
}
void loop() {
if (Serial.available()) {
char geral = Serial.read();
switch (geral) {
case '1':
digitalWrite(sala, HIGH);
break;
default:
Serial.print("Valor ");
Serial.print(casa);
Serial.println(" incorreto.");
digitalWrite(sala, LOW);

}
}
}

FelipeQ:
Sou iniciante ..
Por favor alguém ajude =D
Queria apenas que quando executasse o "case" novamente ele fizesse o reverso, (desligasse o led).

Pode armazenar o estado do led em uma variavel

const int sala = 7;
int EstadoSala=LOW; // ou HIGH

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':
      if (EstadoSala = HIGH ) {
         EstadoSala=LOW;
      } else {
         EstadoSala=HIGH;
      };
      digitalWrite(sala, EstadoSala);
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

Ou assim:

const int sala = 7;
int EstadoSala=LOW; // ou HIGH

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
 digitalWrite(sala, EstadoSala); // estado inicial 
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':    
      digitalWrite(sala, !EstadoSala); // Operação de Negação.
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

Ou ainda, sem usar nenhuma variável.

const int sala = 7;

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
 digitalWrite(sala, LOW); // estado inicial
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':    
      digitalWrite(sala, !digitalRead(sala)); // Operação de Negação.
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

O código original contem vários erros, corrigi-os de modo a validar os meus exemplos.

REGRA: Ao postar o código neste forum, use o marcado de código (code).

Dica: Sempre declare as variáveis, constantes, strucs no inicio da função, nunca no meio do código.