A organização é um dos principais pontos a se prestar atenção caso você esteja programando. Um código organizado permite ao usuário ou a qualquer um que esteja o vendo, rápidamente identificar do que é que o programa se trata. Além disso, caso apareça alguma falha, será muito mais fácil de ajeitar.
Este guia foi feito para pessoas que tem um minimo de experiência em programação, tendo em mente a linguagem do Arduino.
Iremos por partes.
Usar bibliotecas (libraries)
Biblioteca é um conjunto de códigos feito por alguem com o intúito de facilitar a comunicação com outros dispositivos, ou até mesmo encurtar partes de um código.
Um exemplo que já vem com a IDE do arduino é a biblioteca do Servo motor, veja abaixo o código comentado:
#include //Inclui a biblioteca do servo motor no programa, se esta parte não for posta no código, as funções providas pela biblioteca (veja adiante) não funcionarão. Bibliotecas são localizadas em "...\arduino-1.0.X\libraries"
Servo myservo; //Define que a variável myservo é um Servo, isso só pode ser feito se tivermos a biblioteca do servo, pois a função Servo é exclusiva dessa biblioteca.
int potpin = 0;
int val;
void setup()
{
myservo.attach(9); //Novamente, a função x.attach(y) é exclusiva da biblioteca do servo, sem ela, o compilador retornaria um erro.
}
void loop()
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 179);
myservo.write(val); // A função x.write(y) também faz parte da biblioteca do servo
delay(15);
}
Você pode ver mais sobre livrarias e como as instalar nesse conteudo aqui, que foi uma das referencias desse ponto.
Usar funções
Funções são partes de código que podem ser reutilizadas, fazendo que você não precise redigitar certa parte várias vezes. Uma "função" pode ser criada com a dt* void, veja a seguir um exemplo em que são criada duas funções, traço e ponto, sendo assim, podemos escrever em código morse facilmente, sem precisar digitar digitalWrite(x, HIGH/LOW) um bocado de vezes.:
void loop() {
ponto(); traco(); ponto(); //R
delay(1750);
traco(); traco(); traco(); //O
delay(1750);
traco(); ponto(); ponto(); ponto(); //B
delay(1750);
traco(); traco(); traco(); //O
delay(5000);
}
//-- Função ponto
void ponto() { //Definimos a função ponto();
digitalWrite(x, HIGH);
delay(250);
digitalWrite(x, LOW);
delay(250);
}
//--- Função traco (com c pois o arduino não reconheçe ç)
void traco() { //Definimos a função traço();
digitalWrite(x, HIGH);
delay(1000);
digitalWrite(x, LOW);
delay(250);
}
Funções criadas com void não retornam valores, ou seja, não alteram nada que esteja fora de sua definição, então se você quiser criar uma função para, por exemplo, somar dois números, e retornar o resultado para podermos guardar em uma variável ou usar, usamos a dt* int (podem ser outras, como long e etc.):
void setup() {
//Definir algo
}
void loop() {
int resultSoma = somar(5, 3); /*A variável resultSoma é igual a soma de 5 e 3, você pode notar que nós separamos os dois valores que
pretendemos usar com uma vírgula. Nesse caso, 5 e 3
são equivalentes a x e y, logo abaixo */
}
int somar(int x, int y) { //A função é declarada FORA das duas funções principais (void e loop)
return x + y; /*Aqui declaramos que o valor a ser retornado são os dois valores da f unção somados. */
}
*dt = datatype
Whitespace
O Whitespace (Mais precisamente, Identation) é, como o próprio nome diz, um espaço em branco. Em algumas linguas, como o Python, ele é essencial para que o programa funcione corretamente, mas esse não é o caso para a linguagem que o Arduino utiliza.
Um bom código vai fazer uso do espaço em branco para indicar quando uma parte do código está dentro de outra, como podemos ver a seguir:
if(2+1==3) {
digitalWrite(8,HIGH);
}
Note que a parte digitalWrite(8,HIGH); está prefixada por 4 espaços (ou TAB).
Se houvesse outro if dentro dele, a próxima linha de código estaria prefixada por 8 espaços (ou 2 TAB).
if(2+1==3) {
digitalWrite(8, HIGH);
if(2+2=4) {
digitalWrite(9, HIGH);
}
}
Como visto acima, também é recomendado fechar a chave { } no mesmo nível em que a abriu.
Switch Case
O switch case pode lhe ajudar muito na programação de, por exemplo, controles remotos.
int NomeSwitch = 3;
switch(NomeSwitch) {
case 2: //Caso NomeSwitch seja igual a 2, mandar uma corrente alta para o pino 8.
digitalWrite(8,HIGH);
break;
case 3: //Caso seja 3, mandar uma corrente alta para pino 7.
digitalWrite(7,HIGH);
break;
default: //Caso não seja nenhum dos dois, mandar uma corrente alta pro pino 6.
digitalWrite(6,HIGH);
break;
}
Ainda há uma categoria chamada default, onde ele executa a ação que estiver nesse caso especial se nenhuma dos outros casos forem true, como o else.
Comentários
Você pode comentar seu código colocando duas barras (//) antes da parte que você quer comentar. Se seu comentário tiver mais de uma linha, você pode começar o comentário com /* e terminá-lo com */
Comentar o seu código é uma das coisas mais importantes à fazer, pois ela ajuda a identificar o que cada parte especifica faz. Se habitue a escrever comentários, mesmo que sejam bobos como;
digitalWrite(8,HIGH); //Esta parte liga o LED
Observe o código de outros
Vá passeando pela internet em fóruns de programação, e analise a maneira que os outros escrevem seus programas. Você com certeza irá descobrir novas técnicas, e irá melhorar ainda mais.
Se achar algum problema em seu código, tente expor ele para outras pessoas na internet, e tente compreender o que está errado.
Tente escrever em poucas linhas
Isso não vai, provavelmente, fazer seu programa ficar mais fácil de ler e editar, mas há vários jeitos de diminuir a quantidade de linhas em um código, e aprendendo a utilizar estes métodos, você provavelmente vai conseguir melhorar muito a fluidez.
Um bom exemplo é o operador ternário (?), que pode ser utilizado como um if; else, caso uma parte do código esteja ocupando espaço demais.
Ele pode ser usado assim:
Esta parte do código:
if (2+1==3) {
digitalWrite(8,HIGH);
} else {
digitalWrite(7,HIGH);
}
Vira isso:
(2+1==3) ? digitalWrite(8,HIGH) : digitalWrite(7,HIGH);
Funciona básicamente assim:
Condição ? Fazer algo se for verdadeira : Fazer algo se for falsa;
Estarei atualizando esse guia ainda mais em breve
Ou