Skip to content

Commit 3e6967a

Browse files
committed
Renamed all examples for each language, added new functions, and added a macro to expand only if __VA_ARGS__ is non empty <3
1 parent cf10021 commit 3e6967a

File tree

13 files changed

+2868
-5
lines changed

13 files changed

+2868
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
Uso básico variacao
3+
4+
O objetivo deste código é o de apresentar a ideia de usar o arduino com linguagem
5+
portugol, adaptada através do uso de diversas macros. Mais informações consultar
6+
documentação do projeto ArduinoLang.
7+
8+
criado 28 de Fevereiro de 2018
9+
por Jeferson Lima
10+
11+
Este exemplo está em dominio público.
12+
13+
*/
14+
15+
// Inclui biblioteca para linguagem português com estilo da linguagem portugol
16+
#include <ArduinoLangPT_Portugol.h>
17+
18+
// Configura o arduino
19+
configura
20+
inicio
21+
22+
// Inserir funções e metodos aqui que devam ser executados apenas uma vez
23+
24+
fim
25+
26+
// Executa o algoritmo em loop, indefinidamente
27+
algoritmo
28+
inicio
29+
30+
// Codigo para ser executado enquanto o mesmo estiver ligado
31+
32+
fim
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
Leitura Analógica Serial
3+
4+
Este exemplo mostra como ler um pino analógico e enviar o mesmo pela serial.
5+
Você pode ler o resultado deste pelo Monitor Serial ou pelo Plotter Serial
6+
encontrado em (Ferramentas > Plotter Serial).
7+
8+
O objetivo deste código é o de apresentar a ideia de usar o arduino com linguagem
9+
portugol, adaptada através do uso de diversas macros. Mais informações consultar
10+
documentação do projeto ArduinoLang.
11+
12+
criado 28 de Fevereiro de 2018
13+
por Jeferson Lima
14+
15+
Este exemplo está em dominio público.
16+
17+
*/
18+
19+
// Inclui biblioteca para linguagem português com estilo da linguagem portugol
20+
#include <ArduinoLangPT_Portugol.h>
21+
22+
// Configura o arduino
23+
configura
24+
inicio
25+
26+
// Inicializa a comunicação serial
27+
Serial.comecar(9600)
28+
29+
fim
30+
31+
// Executa o algoritmo em loop, indefinidamente
32+
algoritmo
33+
inicio
34+
35+
// Le o valor do pino analogico, valor este entre 0 e 1023
36+
numerico(valorSensor)
37+
valorSensor = leiaAnalogico(A0)
38+
39+
// Imprime o estado do botão na Serial
40+
Serial.imprimeln(valorSensor)
41+
42+
// Espera por 1 milissegundo para aumentar a estabilidade
43+
espera(1)
44+
45+
fim
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
Leitura Analógica de voltagem
3+
4+
Este exemplo mostra como ler a voltagem de um pino analógico e enviar o mesmo pela
5+
serial. Você pode ler o resultado deste pelo Monitor Serial ou pelo Plotter Serial
6+
encontrado em (Ferramentas > Plotter Serial)
7+
8+
O objetivo deste código é o de apresentar a ideia de usar o arduino com linguagem
9+
portugol, adaptada através do uso de diversas macros. Mais informações consultar
10+
documentação do projeto ArduinoLang.
11+
12+
criado 28 de Fevereiro de 2018
13+
por Jeferson Lima
14+
15+
Este exemplo está em dominio público.
16+
17+
*/
18+
19+
// Inclui biblioteca para linguagem português com estilo da linguagem portugol
20+
#include <ArduinoLangPT_Portugol.h>
21+
22+
// Configura o arduino
23+
configura
24+
inicio
25+
26+
// Inicializa a comunicação serial
27+
Serial.comecar(9600)
28+
29+
fim
30+
31+
// Executa o algoritmo em loop, indefinidamente
32+
algoritmo
33+
inicio
34+
35+
// Le o valor do pino analogico, valor este entre 0 e 1023
36+
numerico(valorSensor)
37+
valorSensor = leiaAnalogico(A0)
38+
39+
// Converte a leitura analogica para uma voltagem entre 0 e 5V
40+
decimal(voltagem)
41+
voltagem = valorSensor * (5.0 / 1023.0)
42+
43+
// Imprime o estado do botão na Serial
44+
Serial.imprimeln(voltagem)
45+
46+
// Espera por 1 milissegundo para aumentar a estabilidade
47+
espera(1)
48+
49+
fim
+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
Melodia
3+
4+
Executa uma melodia.
5+
6+
Circuito
7+
- resistor de 50 ohms e alto-falante piezoelétrico
8+
9+
O objetivo deste código é o de apresentar a ideia de usar o arduino com linguagem
10+
portugol, adaptada através do uso de diversas macros. Mais informações consultar
11+
documentação do projeto ArduinoLang.
12+
13+
criado 28 de Fevereiro de 2018
14+
por Jeferson Lima
15+
16+
Este exemplo está em dominio público.
17+
18+
*/
19+
20+
// Inclui biblioteca para linguagem português com estilo da linguagem portugol
21+
#include <ArduinoLangPT_Portugol.h>
22+
23+
// Inclui as notas
24+
#include "notas.h"
25+
26+
// Declara o vetor de duracao das notas
27+
vetor(numerico(), duracaoNotas, 8, {
28+
4, 8, 8, 4, 4, 4, 4, 4
29+
})
30+
31+
// Declara o vetor da melodia
32+
vetor(numerico(), melodia, 8, {
33+
NOTA_C4, NOTA_G3, NOTA_G3, NOTA_A3, NOTA_G3, 0, NOTA_B3, NOTA_C4
34+
})
35+
36+
// Configura o arduino
37+
configura
38+
inicio
39+
40+
// Percore as notas da melodia
41+
numerico(estaNota)
42+
para estaNota de 1 ate(estaNota, 8) faca
43+
inicio
44+
45+
// Para calcular a duração da nota, pegue um segundo e divida pelo tipo da nota.
46+
// Exemplo: quarta nota = 1000 / 4, oitava nota = 1000 / 8, etc.
47+
numerico(duracaoNota)
48+
duracaoNota = 1000 / duracaoNotas[estaNota]
49+
50+
// Executa o tom pelo tempo definido
51+
tom(8, melodia[estaNota], duracaoNota)
52+
53+
// Como o tom é executado em paralelo, para sentirmos a diferença entre as notas
54+
// iremos esperar por 30% do tempo a mais, porque funciona bem
55+
numerico(pausaEntreNotas)
56+
pausaEntreNotas = duracaoNota * 1.30
57+
espera(pausaEntreNotas)
58+
59+
// Para de executar o som
60+
semTom(8)
61+
62+
fim
63+
64+
fim
65+
66+
// Executa o algoritmo em loop, indefinidamente
67+
algoritmo
68+
inicio
69+
70+
// Sem necessidade para repetir a música
71+
72+
fim

examples/PT-Portugol/Melodia/notas.h

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*************************************************
2+
* Constantes Públicas
3+
*************************************************/
4+
5+
#define NOTA_B0 31
6+
#define NOTA_C1 33
7+
#define NOTA_CS1 35
8+
#define NOTA_D1 37
9+
#define NOTA_DS1 39
10+
#define NOTA_E1 41
11+
#define NOTA_F1 44
12+
#define NOTA_FS1 46
13+
#define NOTA_G1 49
14+
#define NOTA_GS1 52
15+
#define NOTA_A1 55
16+
#define NOTA_AS1 58
17+
#define NOTA_B1 62
18+
#define NOTA_C2 65
19+
#define NOTA_CS2 69
20+
#define NOTA_D2 73
21+
#define NOTA_DS2 78
22+
#define NOTA_E2 82
23+
#define NOTA_F2 87
24+
#define NOTA_FS2 93
25+
#define NOTA_G2 98
26+
#define NOTA_GS2 104
27+
#define NOTA_A2 110
28+
#define NOTA_AS2 117
29+
#define NOTA_B2 123
30+
#define NOTA_C3 131
31+
#define NOTA_CS3 139
32+
#define NOTA_D3 147
33+
#define NOTA_DS3 156
34+
#define NOTA_E3 165
35+
#define NOTA_F3 175
36+
#define NOTA_FS3 185
37+
#define NOTA_G3 196
38+
#define NOTA_GS3 208
39+
#define NOTA_A3 220
40+
#define NOTA_AS3 233
41+
#define NOTA_B3 247
42+
#define NOTA_C4 262
43+
#define NOTA_CS4 277
44+
#define NOTA_D4 294
45+
#define NOTA_DS4 311
46+
#define NOTA_E4 330
47+
#define NOTA_F4 349
48+
#define NOTA_FS4 370
49+
#define NOTA_G4 392
50+
#define NOTA_GS4 415
51+
#define NOTA_A4 440
52+
#define NOTA_AS4 466
53+
#define NOTA_B4 494
54+
#define NOTA_C5 523
55+
#define NOTA_CS5 554
56+
#define NOTA_D5 587
57+
#define NOTA_DS5 622
58+
#define NOTA_E5 659
59+
#define NOTA_F5 698
60+
#define NOTA_FS5 740
61+
#define NOTA_G5 784
62+
#define NOTA_GS5 831
63+
#define NOTA_A5 880
64+
#define NOTA_AS5 932
65+
#define NOTA_B5 988
66+
#define NOTA_C6 1047
67+
#define NOTA_CS6 1109
68+
#define NOTA_D6 1175
69+
#define NOTA_DS6 1245
70+
#define NOTA_E6 1319
71+
#define NOTA_F6 1397
72+
#define NOTA_FS6 1480
73+
#define NOTA_G6 1568
74+
#define NOTA_GS6 1661
75+
#define NOTA_A6 1760
76+
#define NOTA_AS6 1865
77+
#define NOTA_B6 1976
78+
#define NOTA_C7 2093
79+
#define NOTA_CS7 2217
80+
#define NOTA_D7 2349
81+
#define NOTA_DS7 2489
82+
#define NOTA_E7 2637
83+
#define NOTA_F7 2794
84+
#define NOTA_FS7 2960
85+
#define NOTA_G7 3136
86+
#define NOTA_GS7 3322
87+
#define NOTA_A7 3520
88+
#define NOTA_AS7 3729
89+
#define NOTA_B7 3951
90+
#define NOTA_C8 4186
91+
#define NOTA_CS8 4435
92+
#define NOTA_D8 4699
93+
#define NOTA_DS8 4978
94+
95+

keywords.txt

+11-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ leiaDigital KEYWORD2
1111
leiaAnalogico KEYWORD2
1212
declare KEYWORD2
1313
espera KEYWORD2
14+
tom KEYWORD2
15+
semTom KEYWORD2
1416

1517
# Methods -- KEYWORD2
1618
# ---------------------
@@ -22,10 +24,11 @@ imprimeln KEYWORD2
2224
# ---------------------
2325
numerico RESERVED_WORD_2
2426
decimal RESERVED_WORD_2
27+
vetor RESERVED_WORD_2
28+
declare RESERVED_WORD_2
2529

2630
# Reserved -- RESERVED_WORD
2731
# -------------------------
28-
enquanto RESERVED_WORD
2932

3033
retorna RESERVED_WORD
3134
fim_algoritmo RESERVED_WORD
@@ -41,6 +44,13 @@ senao RESERVED_WORD
4144
ou RESERVED_WORD
4245
e RESERVED_WORD
4346

47+
para RESERVED_WORD
48+
de RESERVED_WORD
49+
ate RESERVED_WORD
50+
51+
enquanto RESERVED_WORD
52+
faca RESERVED_WORD
53+
4454
# Constants -- RESERVED_WORD_2
4555
# -------------------------
4656
ALTO RESERVED_WORD_2
@@ -61,7 +71,6 @@ LED_INTEGRADO RESERVED_WORD_2
6171
inicio DATA_TYPE
6272
fim DATA_TYPE
6373
fimse DATA_TYPE
64-
faca DATA_TYPE
6574

6675
# LibNames -- DATA_TYPE
6776
# -------------------------

src/ArduinoLangPT_Portugol.h

+15-2
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,27 @@
3838
// Redefine reserved words
3939
#define retorna PREVENT_SEMICOLON_ERROR return
4040

41+
// Just types
42+
#define numerico0() int
43+
#define decimal0() float
44+
4145
// Redefine types
4246
#define declareType(_TYPE, _NAME) PREVENT_SEMICOLON_ERROR _TYPE _NAME;
4347
#define numerico1(_NAME) declareType(int, _NAME)
4448
#define decimal1(_NAME) declareType(float, _NAME)
4549

50+
// Vector Initialization
51+
#define vetor(_TYPE, _NAME, _SIZE, ...) PREVENT_SEMICOLON_ERROR _TYPE _NAME[_SIZE + 1] PREPEND_EQUAL_IF_NONEMPTY(__VA_ARGS__);
52+
//#define vetor(...) GET_MACRO(_, ##__VA_ARGS__, vetor4, vetor3, _, _, _)(__VA_ARGS__)
53+
4654
// Types with values
4755
#define declareTypeValue(_TYPE, _NAME, _VALUE) PREVENT_SEMICOLON_ERROR _TYPE _NAME = _VALUE;
4856
#define numerico2(_NAME, _VALUE) declareTypeValue(int, _NAME, _VALUE)
4957
#define decimal2(_NAME, _VALUE) declareTypeValue(float, _NAME, _VALUE)
5058

5159
// Overloaded declare functions
52-
#define numerico(...) GET_MACRO(__VA_ARGS__, numerico2, numerico1)(__VA_ARGS__)
53-
#define decimal(...) GET_MACRO(__VA_ARGS__, decimal2, decimal1)(__VA_ARGS__)
60+
#define numerico(...) GET_MACRO(_, ##__VA_ARGS__, _, _, numerico2, numerico1, numerico0)(__VA_ARGS__)
61+
#define decimal(...) GET_MACRO(_, ##__VA_ARGS__, _, _, decimal2, decimal1, decimal0)(__VA_ARGS__)
5462

5563
// And then the function to declare any number of vars
5664
#define declare(_TYPE, ...) PREVENT_SEMICOLON_ERROR CALL_MACRO_X_FOR_EACH(_TYPE, __VA_ARGS__)
@@ -73,6 +81,8 @@
7381
#define escrevaDigital(_PIN, _STATE) PREVENT_SEMICOLON_ERROR digitalWrite(_PIN, _STATE);
7482
#define escrevaAnalogico(_PIN, _VALUE) PREVENT_SEMICOLON_ERROR analogWrite(_PIN, _VALUE);
7583
#define espera(_TIME) PREVENT_SEMICOLON_ERROR delay(_TIME);
84+
#define tom(_TIME, _NOTE, _DURATION) PREVENT_SEMICOLON_ERROR tone(_TIME, _NOTE, _DURATION);
85+
#define semTom(_TIME) PREVENT_SEMICOLON_ERROR noTone(_TIME);
7686

7787
// Basic functions with return
7888
#define leiaAnalogico(_PIN) analogRead(_PIN);
@@ -83,6 +93,9 @@
8393
#define imprime(_TEXT) println(_TEXT);
8494
#define imprimeln(_TEXT) print(_TEXT);
8595

96+
// Avoid errors on objects
97+
#define Serial PREVENT_SEMICOLON_ERROR Serial
98+
8699
// Constants
87100
#define ALTO HIGH
88101
#define BAIXO LOW

0 commit comments

Comments
 (0)