Как я писал код для Arduino с помощью Python

в 11:52, , рубрики: arduino, python, генерация кода, начинающие программисты, Программирование, Электроника для начинающих

Картинка для привлечения внимания
Картинка для привлечения внимания

На днях появилась подработка, поступил заказ записать скетч на ардуино. Простенький, но объёмный. С повторяющимися блоками. Нужно было управлять каждым портом Arduino Mega отдельно, при получении команды по Uart. Отправляешь символ — и светодиод (к примеру) загорается на определенное время. Написал скетч на 2 команды, скинул заказчику для тестов, получил предоплату. Дальше, нужно было масштабировать на все порты.

Для начала я честно попробовал руками. Написав первые 26 #define, энтузиазм иссяк. Я пошел подышать свежим воздухом, и вспомнил, что у меня на ПК (Win 7 x64), уже установлен Python 3.6 из дистрибутива Anaconda. Кстати, это наиболее удобный способ установки Python`а на Windows, т.к. всё уже включено и настроено по умолчанию, и есть пакетный менеджер.

Итак, приступим.

Создаем папку, в ней пустой файл, я назвал его «arduino_gen.py» и bat файл «start_py.bat» со следующим содержимым:

python.exe arduino_gen.py > code_out.txt
@pause

Этот файл нам потребуется, для запуска программы на Python`е
Теперь мы напишем программку, которая сгенерирует нам необходимый код для Arduino.

Для начала, создадим два списка со всеми необходимыми нам значениями, которые мы будем подставлять в код. Имена могут быть любыми, дело вкуса.

chap = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 
num = ['2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53']

И две переменные, для перебора списков

i = 0
k = 0

И теперь создадим цикл для генерации #define PIN_a 2… #define PIN_Z 53

iteration1 = True

while iteration1:

	print('#define PIN_' + chap[i] + ' ' + num[k])

	i = i + 1
	k = k + 1
	if i > 51:
		iteration1 = False

print()

Сохраняем, запускаем файл «start_py.bat»

результат

#define PIN_a 2
#define PIN_b 3
#define PIN_c 4
#define PIN_d 5
#define PIN_e 6
#define PIN_f 7
#define PIN_g 8
#define PIN_h 9
#define PIN_i 10
#define PIN_j 11
#define PIN_k 12
#define PIN_l 13
#define PIN_m 14
#define PIN_n 15
#define PIN_o 16
#define PIN_p 17
#define PIN_q 18
#define PIN_r 19
#define PIN_s 20
#define PIN_t 21
#define PIN_u 22
#define PIN_v 23
#define PIN_w 24
#define PIN_x 25
#define PIN_y 26
#define PIN_z 27
#define PIN_A 28
#define PIN_B 29
#define PIN_C 30
#define PIN_D 31
#define PIN_E 32
#define PIN_F 33
#define PIN_G 34
#define PIN_H 35
#define PIN_I 36
#define PIN_J 37
#define PIN_K 38
#define PIN_L 39
#define PIN_M 40
#define PIN_N 41
#define PIN_O 42
#define PIN_P 43
#define PIN_Q 44
#define PIN_R 45
#define PIN_S 46
#define PIN_T 47
#define PIN_U 48
#define PIN_V 49
#define PIN_W 50
#define PIN_X 51
#define PIN_Y 52
#define PIN_Z 53

Если мы хотим вывести результат сразу в файл, тогда допишем:

python.exe arduino_gen.py > code_out.txt
@pause

В результате, мы получим файл «code_out.txt » из которого, код удобно копировать в скетч в лучших традициях Arduino.

Уже на этом этапе, у меня возник вопрос, хватит ли у Arduino памяти, если сгенерировать большое количество переменных. Однако, забегая вперед, скажу, что памяти вполне хватило, в чем можно убедиться про компиляции скетча.

image

Далее, я приведу остальной код, в котором несложно разобраться. Но, для начала, рассмотрим

Упрощенный скетч

// Задаем пины 
#define PIN_a 2 
#define PIN_b 3 


//Задаем время 
#define TIME_a 10000 
#define TIME_b 10000 


//логическое состояние светодиода 
boolean ledState_a = false; 
boolean ledState_b = false; 


int time_a = 0; 
int time_b = 0; 


void setup() { 
// инициализация 
Serial.begin(9600); 
for (int i = 2; i <= 53; i++) 
pinMode(i, OUTPUT); 
} 
void loop() { 
if (Serial.available() >0) { 
int x = Serial.read(); 


//a 
if(x == 'a'){ 
ledState_a = true; 
time_a = TIME_a; 
x = 0; 
} 

//b 
if(x == 'b'){ 
ledState_b = true; 
time_b = TIME_b; 
x = 0; 
} 

} 
// Исполнительная часть 
//a 
if(ledState_a == true){ 
time_a = time_a - 1; 
digitalWrite(PIN_a, HIGH); 
} 

if(time_a == 0){ 
ledState_a = false; 
} 

if(ledState_a == false){ 
digitalWrite(PIN_a, LOW); 
} 
//b 
if(ledState_b == true){ 
time_b = time_b - 1; 
} 
if(time_b > 0){ 
digitalWrite(PIN_b, HIGH); 
} 
if(time_b == 0){ 
digitalWrite(PIN_b, LOW); 
ledState_b = false; 
} 
//Задержка в конце 
delay(1); 
}

Здесь, нужно сгенерировать 4 блока кода в начале
И два блока в конце
В последствии, заказчик захотел изменить логику работы, чтобы при приходе заглавной буквы менялось состояние выхода. Я переписал участок кода:

//Когда приходит большая буква - меняем состояние 
//A
if(x == 'A'){
    digitalWrite (PIN_A, !digitalRead(PIN_A));
    x = 0;
    }

И масштабировал

i = 26
iteration7 = True
while iteration7:
	print()
	print('//' + chap[i])
	print("if(x == '" + chap[i] + "'){")
	print('    digitalWrite (PIN_' + chap[i] + ', !digitalRead(PIN_' + chap[i] + '));')
	print('    x = 0;')
	print('    }')
	i = i + 1
	if i > 51:
		iteration7 = False
print()
print('}')
print()

Вот, что в итоге получилось.

Очень длинный код, я предупреждал!

// Задаем пины
#define PIN_a 2
#define PIN_b 3
#define PIN_c 4
#define PIN_d 5
#define PIN_e 6
#define PIN_f 7
#define PIN_g 8
#define PIN_h 9
#define PIN_i 10
#define PIN_j 11
#define PIN_k 12
#define PIN_l 13
#define PIN_m 14
#define PIN_n 15
#define PIN_o 16
#define PIN_p 17
#define PIN_q 18
#define PIN_r 19
#define PIN_s 20
#define PIN_t 21
#define PIN_u 22
#define PIN_v 23
#define PIN_w 24
#define PIN_x 25
#define PIN_y 26
#define PIN_z 27
#define PIN_A 28
#define PIN_B 29
#define PIN_C 30
#define PIN_D 31
#define PIN_E 32
#define PIN_F 33
#define PIN_G 34
#define PIN_H 35
#define PIN_I 36
#define PIN_J 37
#define PIN_K 38
#define PIN_L 39
#define PIN_M 40
#define PIN_N 41
#define PIN_O 42
#define PIN_P 43
#define PIN_Q 44
#define PIN_R 45
#define PIN_S 46
#define PIN_T 47
#define PIN_U 48
#define PIN_V 49
#define PIN_W 50
#define PIN_X 51
#define PIN_Y 52
#define PIN_Z 53

//Задаем время
//Здесь, скорее всего, потребуется поправка
//Например, 1 секунда может быть не 1000, а 865, к примеру.
//Нужно будет секундомером померить, и, если необходимо,
// уменьшить на некий коофициент
#define TIME_a 1000
#define TIME_b 1000
#define TIME_c 1000
#define TIME_d 1000
#define TIME_e 1000
#define TIME_f 1000
#define TIME_g 1000
#define TIME_h 1000
#define TIME_i 1000
#define TIME_j 1000
#define TIME_k 1000
#define TIME_l 1000
#define TIME_m 1000
#define TIME_n 1000
#define TIME_o 1000
#define TIME_p 1000
#define TIME_q 1000
#define TIME_r 1000
#define TIME_s 1000
#define TIME_t 1000
#define TIME_u 1000
#define TIME_v 1000
#define TIME_w 1000
#define TIME_x 1000
#define TIME_y 1000
#define TIME_z 1000
#define TIME_A 1000
#define TIME_B 1000
#define TIME_C 1000
#define TIME_D 1000
#define TIME_E 1000
#define TIME_F 1000
#define TIME_G 1000
#define TIME_H 1000
#define TIME_I 1000
#define TIME_J 1000
#define TIME_K 1000
#define TIME_L 1000
#define TIME_M 1000
#define TIME_N 1000
#define TIME_O 1000
#define TIME_P 1000
#define TIME_Q 1000
#define TIME_R 1000
#define TIME_S 1000
#define TIME_T 1000
#define TIME_U 1000
#define TIME_V 1000
#define TIME_W 1000
#define TIME_X 1000
#define TIME_Y 1000
#define TIME_Z 1000

//логическое состояние светодиода (да / нет)
boolean ledState_a = false;
boolean ledState_b = false;
boolean ledState_c = false;
boolean ledState_d = false;
boolean ledState_e = false;
boolean ledState_f = false;
boolean ledState_g = false;
boolean ledState_h = false;
boolean ledState_i = false;
boolean ledState_j = false;
boolean ledState_k = false;
boolean ledState_l = false;
boolean ledState_m = false;
boolean ledState_n = false;
boolean ledState_o = false;
boolean ledState_p = false;
boolean ledState_q = false;
boolean ledState_r = false;
boolean ledState_s = false;
boolean ledState_t = false;
boolean ledState_u = false;
boolean ledState_v = false;
boolean ledState_w = false;
boolean ledState_x = false;
boolean ledState_y = false;
boolean ledState_z = false;
boolean ledState_A = false;
boolean ledState_B = false;
boolean ledState_C = false;
boolean ledState_D = false;
boolean ledState_E = false;
boolean ledState_F = false;
boolean ledState_G = false;
boolean ledState_H = false;
boolean ledState_I = false;
boolean ledState_J = false;
boolean ledState_K = false;
boolean ledState_L = false;
boolean ledState_M = false;
boolean ledState_N = false;
boolean ledState_O = false;
boolean ledState_P = false;
boolean ledState_Q = false;
boolean ledState_R = false;
boolean ledState_S = false;
boolean ledState_T = false;
boolean ledState_U = false;
boolean ledState_V = false;
boolean ledState_W = false;
boolean ledState_X = false;
boolean ledState_Y = false;
boolean ledState_Z = false;

//Переменные, для хранения времени
int time_a = 0;
int time_b = 0;
int time_c = 0;
int time_d = 0;
int time_e = 0;
int time_f = 0;
int time_g = 0;
int time_h = 0;
int time_i = 0;
int time_j = 0;
int time_k = 0;
int time_l = 0;
int time_m = 0;
int time_n = 0;
int time_o = 0;
int time_p = 0;
int time_q = 0;
int time_r = 0;
int time_s = 0;
int time_t = 0;
int time_u = 0;
int time_v = 0;
int time_w = 0;
int time_x = 0;
int time_y = 0;
int time_z = 0;
int time_A = 0;
int time_B = 0;
int time_C = 0;
int time_D = 0;
int time_E = 0;
int time_F = 0;
int time_G = 0;
int time_H = 0;
int time_I = 0;
int time_J = 0;
int time_K = 0;
int time_L = 0;
int time_M = 0;
int time_N = 0;
int time_O = 0;
int time_P = 0;
int time_Q = 0;
int time_R = 0;
int time_S = 0;
int time_T = 0;
int time_U = 0;
int time_V = 0;
int time_W = 0;
int time_X = 0;
int time_Y = 0;
int time_Z = 0;

void setup() {
// не стал переписывать инициализацию
Serial.begin(9600);
for (int i = 2; i <= 53; i++)
pinMode(i, OUTPUT);
}
void loop() {
if (Serial.available() >0) {
int x = Serial.read();

//Проверяем, что у нас пришло

//a
if(x == 'a'){
ledState_a = true;
time_a = TIME_a;
x = 0;
}

//b
if(x == 'b'){
ledState_b = true;
time_b = TIME_b;
x = 0;
}

//c
if(x == 'c'){
ledState_c = true;
time_c = TIME_c;
x = 0;
}

//d
if(x == 'd'){
ledState_d = true;
time_d = TIME_d;
x = 0;
}

//e
if(x == 'e'){
ledState_e = true;
time_e = TIME_e;
x = 0;
}

//f
if(x == 'f'){
ledState_f = true;
time_f = TIME_f;
x = 0;
}

//g
if(x == 'g'){
ledState_g = true;
time_g = TIME_g;
x = 0;
}

//h
if(x == 'h'){
ledState_h = true;
time_h = TIME_h;
x = 0;
}

//i
if(x == 'i'){
ledState_i = true;
time_i = TIME_i;
x = 0;
}

//j
if(x == 'j'){
ledState_j = true;
time_j = TIME_j;
x = 0;
}

//k
if(x == 'k'){
ledState_k = true;
time_k = TIME_k;
x = 0;
}

//l
if(x == 'l'){
ledState_l = true;
time_l = TIME_l;
x = 0;
}

//m
if(x == 'm'){
ledState_m = true;
time_m = TIME_m;
x = 0;
}

//n
if(x == 'n'){
ledState_n = true;
time_n = TIME_n;
x = 0;
}

//o
if(x == 'o'){
ledState_o = true;
time_o = TIME_o;
x = 0;
}

//p
if(x == 'p'){
ledState_p = true;
time_p = TIME_p;
x = 0;
}

//q
if(x == 'q'){
ledState_q = true;
time_q = TIME_q;
x = 0;
}

//r
if(x == 'r'){
ledState_r = true;
time_r = TIME_r;
x = 0;
}

//s
if(x == 's'){
ledState_s = true;
time_s = TIME_s;
x = 0;
}

//t
if(x == 't'){
ledState_t = true;
time_t = TIME_t;
x = 0;
}

//u
if(x == 'u'){
ledState_u = true;
time_u = TIME_u;
x = 0;
}

//v
if(x == 'v'){
ledState_v = true;
time_v = TIME_v;
x = 0;
}

//w
if(x == 'w'){
ledState_w = true;
time_w = TIME_w;
x = 0;
}

//x
if(x == 'x'){
ledState_x = true;
time_x = TIME_x;
x = 0;
}

//y
if(x == 'y'){
ledState_y = true;
time_y = TIME_y;
x = 0;
}

//z
if(x == 'z'){
ledState_z = true;
time_z = TIME_z;
x = 0;
}
//Когда приходит большая буква — меняем состояние

//A
if(x == 'A'){
digitalWrite (PIN_A, !digitalRead(PIN_A));
x = 0;
}

//B
if(x == 'B'){
digitalWrite (PIN_B, !digitalRead(PIN_B));
x = 0;
}

//C
if(x == 'C'){
digitalWrite (PIN_C, !digitalRead(PIN_C));
x = 0;
}

//D
if(x == 'D'){
digitalWrite (PIN_D, !digitalRead(PIN_D));
x = 0;
}

//E
if(x == 'E'){
digitalWrite (PIN_E, !digitalRead(PIN_E));
x = 0;
}

//F
if(x == 'F'){
digitalWrite (PIN_F, !digitalRead(PIN_F));
x = 0;
}

//G
if(x == 'G'){
digitalWrite (PIN_G, !digitalRead(PIN_G));
x = 0;
}

//H
if(x == 'H'){
digitalWrite (PIN_H, !digitalRead(PIN_H));
x = 0;
}

//I
if(x == 'I'){
digitalWrite (PIN_I, !digitalRead(PIN_I));
x = 0;
}

//J
if(x == 'J'){
digitalWrite (PIN_J, !digitalRead(PIN_J));
x = 0;
}

//K
if(x == 'K'){
digitalWrite (PIN_K, !digitalRead(PIN_K));
x = 0;
}

//L
if(x == 'L'){
digitalWrite (PIN_L, !digitalRead(PIN_L));
x = 0;
}

//M
if(x == 'M'){
digitalWrite (PIN_M, !digitalRead(PIN_M));
x = 0;
}

//N
if(x == 'N'){
digitalWrite (PIN_N, !digitalRead(PIN_N));
x = 0;
}

//O
if(x == 'O'){
digitalWrite (PIN_O, !digitalRead(PIN_O));
x = 0;
}

//P
if(x == 'P'){
digitalWrite (PIN_P, !digitalRead(PIN_P));
x = 0;
}

//Q
if(x == 'Q'){
digitalWrite (PIN_Q, !digitalRead(PIN_Q));
x = 0;
}

//R
if(x == 'R'){
digitalWrite (PIN_R, !digitalRead(PIN_R));
x = 0;
}

//S
if(x == 'S'){
digitalWrite (PIN_S, !digitalRead(PIN_S));
x = 0;
}

//T
if(x == 'T'){
digitalWrite (PIN_T, !digitalRead(PIN_T));
x = 0;
}

//U
if(x == 'U'){
digitalWrite (PIN_U, !digitalRead(PIN_U));
x = 0;
}

//V
if(x == 'V'){
digitalWrite (PIN_V, !digitalRead(PIN_V));
x = 0;
}

//W
if(x == 'W'){
digitalWrite (PIN_W, !digitalRead(PIN_W));
x = 0;
}

//X
if(x == 'X'){
digitalWrite (PIN_X, !digitalRead(PIN_X));
x = 0;
}

//Y
if(x == 'Y'){
digitalWrite (PIN_Y, !digitalRead(PIN_Y));
x = 0;
}

//Z
if(x == 'Z'){
digitalWrite (PIN_Z, !digitalRead(PIN_Z));
x = 0;
}

}
//a
if(ledState_a == true){
time_a = time_a — 1;
digitalWrite(PIN_a, HIGH);
}

if(time_a == 0){
ledState_a = false;
}

if(ledState_a == false){
digitalWrite(PIN_a, LOW);
}

//b
if(ledState_b == true){
time_b = time_b — 1;
digitalWrite(PIN_b, HIGH);
}

if(time_b == 0){
ledState_b = false;
}

if(ledState_b == false){
digitalWrite(PIN_b, LOW);
}

//c
if(ledState_c == true){
time_c = time_c — 1;
digitalWrite(PIN_c, HIGH);
}

if(time_c == 0){
ledState_c = false;
}

if(ledState_c == false){
digitalWrite(PIN_c, LOW);
}

//d
if(ledState_d == true){
time_d = time_d — 1;
digitalWrite(PIN_d, HIGH);
}

if(time_d == 0){
ledState_d = false;
}

if(ledState_d == false){
digitalWrite(PIN_d, LOW);
}

//e
if(ledState_e == true){
time_e = time_e — 1;
digitalWrite(PIN_e, HIGH);
}

if(time_e == 0){
ledState_e = false;
}

if(ledState_e == false){
digitalWrite(PIN_e, LOW);
}

//f
if(ledState_f == true){
time_f = time_f — 1;
digitalWrite(PIN_f, HIGH);
}

if(time_f == 0){
ledState_f = false;
}

if(ledState_f == false){
digitalWrite(PIN_f, LOW);
}

//g
if(ledState_g == true){
time_g = time_g — 1;
digitalWrite(PIN_g, HIGH);
}

if(time_g == 0){
ledState_g = false;
}

if(ledState_g == false){
digitalWrite(PIN_g, LOW);
}

//h
if(ledState_h == true){
time_h = time_h — 1;
digitalWrite(PIN_h, HIGH);
}

if(time_h == 0){
ledState_h = false;
}

if(ledState_h == false){
digitalWrite(PIN_h, LOW);
}

//i
if(ledState_i == true){
time_i = time_i — 1;
digitalWrite(PIN_i, HIGH);
}

if(time_i == 0){
ledState_i = false;
}

if(ledState_i == false){
digitalWrite(PIN_i, LOW);
}

//j
if(ledState_j == true){
time_j = time_j — 1;
digitalWrite(PIN_j, HIGH);
}

if(time_j == 0){
ledState_j = false;
}

if(ledState_j == false){
digitalWrite(PIN_j, LOW);
}

//k
if(ledState_k == true){
time_k = time_k — 1;
digitalWrite(PIN_k, HIGH);
}

if(time_k == 0){
ledState_k = false;
}

if(ledState_k == false){
digitalWrite(PIN_k, LOW);
}

//l
if(ledState_l == true){
time_l = time_l — 1;
digitalWrite(PIN_l, HIGH);
}

if(time_l == 0){
ledState_l = false;
}

if(ledState_l == false){
digitalWrite(PIN_l, LOW);
}

//m
if(ledState_m == true){
time_m = time_m — 1;
digitalWrite(PIN_m, HIGH);
}

if(time_m == 0){
ledState_m = false;
}

if(ledState_m == false){
digitalWrite(PIN_m, LOW);
}

//n
if(ledState_n == true){
time_n = time_n — 1;
digitalWrite(PIN_n, HIGH);
}

if(time_n == 0){
ledState_n = false;
}

if(ledState_n == false){
digitalWrite(PIN_n, LOW);
}

//o
if(ledState_o == true){
time_o = time_o — 1;
digitalWrite(PIN_o, HIGH);
}

if(time_o == 0){
ledState_o = false;
}

if(ledState_o == false){
digitalWrite(PIN_o, LOW);
}

//p
if(ledState_p == true){
time_p = time_p — 1;
digitalWrite(PIN_p, HIGH);
}

if(time_p == 0){
ledState_p = false;
}

if(ledState_p == false){
digitalWrite(PIN_p, LOW);
}

//q
if(ledState_q == true){
time_q = time_q — 1;
digitalWrite(PIN_q, HIGH);
}

if(time_q == 0){
ledState_q = false;
}

if(ledState_q == false){
digitalWrite(PIN_q, LOW);
}

//r
if(ledState_r == true){
time_r = time_r — 1;
digitalWrite(PIN_r, HIGH);
}

if(time_r == 0){
ledState_r = false;
}

if(ledState_r == false){
digitalWrite(PIN_r, LOW);
}

//s
if(ledState_s == true){
time_s = time_s — 1;
digitalWrite(PIN_s, HIGH);
}

if(time_s == 0){
ledState_s = false;
}

if(ledState_s == false){
digitalWrite(PIN_s, LOW);
}

//t
if(ledState_t == true){
time_t = time_t — 1;
digitalWrite(PIN_t, HIGH);
}

if(time_t == 0){
ledState_t = false;
}

if(ledState_t == false){
digitalWrite(PIN_t, LOW);
}

//u
if(ledState_u == true){
time_u = time_u — 1;
digitalWrite(PIN_u, HIGH);
}

if(time_u == 0){
ledState_u = false;
}

if(ledState_u == false){
digitalWrite(PIN_u, LOW);
}

//v
if(ledState_v == true){
time_v = time_v — 1;
digitalWrite(PIN_v, HIGH);
}

if(time_v == 0){
ledState_v = false;
}

if(ledState_v == false){
digitalWrite(PIN_v, LOW);
}

//w
if(ledState_w == true){
time_w = time_w — 1;
digitalWrite(PIN_w, HIGH);
}

if(time_w == 0){
ledState_w = false;
}

if(ledState_w == false){
digitalWrite(PIN_w, LOW);
}

//x
if(ledState_x == true){
time_x = time_x — 1;
digitalWrite(PIN_x, HIGH);
}

if(time_x == 0){
ledState_x = false;
}

if(ledState_x == false){
digitalWrite(PIN_x, LOW);
}

//y
if(ledState_y == true){
time_y = time_y — 1;
digitalWrite(PIN_y, HIGH);
}

if(time_y == 0){
ledState_y = false;
}

if(ledState_y == false){
digitalWrite(PIN_y, LOW);
}

//z
if(ledState_z == true){
time_z = time_z — 1;
digitalWrite(PIN_z, HIGH);
}

if(time_z == 0){
ledState_z = false;
}

if(ledState_z == false){
digitalWrite(PIN_z, LOW);
}

delay(1);

}

Код на Python`е

chap = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 

num = ['2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53']

i = 0
k = 0

iteration1 = True

while iteration1:

	print('#define PIN_' + chap[i] + ' ' + num[k])

	i = i + 1
	k = k + 1
	if i > 51:
		iteration1 = False

print()

i = 0
iteration2 = True
while iteration2:
	print('#define TIME_' + chap[i] + ' ' + '1000')
	i = i + 1
	if i > 51:
		iteration2 = False

print()

i = 0
iteration3 = True
while iteration3:
	print('boolean ledState_' + chap[i] + ' ' + '= false;')
	i = i + 1
	if i > 51:
		iteration3 = False

print()

i = 0
iteration4 = True
while iteration4:
	print('int time_' + chap[i] + ' ' + '= 0;')
	i = i + 1
	if i > 51:
		iteration4 = False

i = 0
iteration5 = True
while iteration5:
	print()
	print('//' + chap[i])
	print("if(x == '" + chap[i] + "'){")
	print('    ledState_' + chap[i] + ' = true;')
	print('    time_' + chap[i] + ' = TIME_' + chap[i] + ';')
	print('    x = 0;')
	print('    }')
	i = i + 1
	if i > 51:
		iteration5 = False

print()
print('}')
print()

i = 0
iteration6 = True
while iteration6:
	print()

	print('//' + chap[i])
	print("if(ledState_" + chap[i] + " == true){")
	print('    time_' + chap[i] + '  = time_' + chap[i] + ' - 1;')
	print('    digitalWrite(PIN_' + chap[i] + ', HIGH);')
	print('    }')
	print()

	print("if(time_" + chap[i] + " == 0){")
	print('    ledState_' + chap[i] + ' = false;')
	print('    }')
	print()

	print("if(ledState_" + chap[i] + " == false){")
	print('    digitalWrite(PIN_' + chap[i] + ', LOW);')
	print('    }')

	i = i + 1
	if i > 51:
		iteration6 = False

print()
print('delay(1);')
print()
print('}')

print('NEW VERSION')

i = 26
iteration7 = True
while iteration7:
	print()
	print('//' + chap[i])
	print("if(x == '" + chap[i] + "'){")
	print('    digitalWrite (PIN_' + chap[i] + ', !digitalRead(PIN_' + chap[i] + '));')
	print('    x = 0;')
	print('    }')
	i = i + 1
	if i > 51:
		iteration7 = False

print()
print('}')
print()
 

P.S.: Одной из целей автоматизации было избежать человеческих ошибок, каково же было моё удивление, когда скетч отказался компилироваться. Причина была в том, что я поторопился и написал алфавит с одной повторяющейся буковой.

P.P.S.: Заказчик был ужасно доволен, заплатил больше, чем договаривались, и даже разрешил поделиться кодом с читателями.

Учите Python, господа!

Автор: semen-pro

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js