В файл program.ino в самом начале определяешь на какие пины подключен галетный переключатель, номер сообщения, в котором будет передаваться информация о его состоянии (я написал от балды 701, тебе нужно чтоб в питоновском файле такой же был описан) и заводим переменную, в которой будем хранить информацию о предыдущем опросе:
Код: Выделить всё
#define gPin1 1 //Тут номера пинов, куда подключается переключатель
#define gPin2 2
#define gPin3 3
#define gPin4 4
#define gPin5 5
#define gPin6 6
#define toolNumberID 701 //Номер пина в сообщении, такой же должен быть описан в HAL.py файле
int lastTool = -1;
В void setup() добавляешь инициализацию портов:
Код: Выделить всё
pinMode(gPin1, INPUT);
pinMode(gPin2, INPUT);
pinMode(gPin3, INPUT);
pinMode(gPin4, INPUT);
pinMode(gPin5, INPUT);
pinMode(gPin6, INPUT);
В void doUrgentStuff() добавляем опрос порта, для этого читаем пины ардины, по какому-то условию их складываем и сравниваем с предыдущим значением, если оно изменилось, то отправляем в linuxCNC:
Код: Выделить всё
//Читаем положение переключателя
int curTool = digitalRead(gPin1) + digitalRead(gPin2) << 1 + digitalRead(gPin3) << 2 + digitalRead(gPin4) << 3 + digitalRead(gPin5) << 4 + digitalRead(gPin6) << 5;
if(curTool != lastTool)
{
lastTool = curTool; //Запоминаем номер инструмента
int checkSum = toolNumberID + curTool;
Serial.print(toolNumberID); //Номер сообщения
Serial.print(" ");
Serial.print(curTool); //номер инструмента
Serial.print(" ");
Serial.print(checkSum); //контрольная сумма
Serial.println(";");
}
Идеально потом отрефакторить код и в отдельном файле все написать (как их принято называть модуле).
Файл program во вложении.