COM + ARDUINO MEGA + DELPHI
- Войдите на сайт для отправки комментариев
Ср, 04/09/2013 - 21:09
Пример скетча для управления выходами ARDUINO MEGA.
Чтение и запись Массива и отдельных ног.
формат записи:
Команда (0 1 2 3 4 5) - адрес выхода( в виде символа, код символа-1= коду ноги)
опционально символы 0 1 (HI LO для записи в порт) ~окончание строки
Пример: 2-!"#$~ (Прочитать выводы 32 33 34 35) код символа -1
т.к. в Delphi #0 конец строки
Ответ: 1111~
String in_byte, out_byte; int opr, iEnd,iPos,iAdr; void setup() { Serial.begin(9600); in_byte=""; out_byte=""; } // 0 set pin array 0-A1B0C1\ // 1 get pin array 1-ABSDEF\ // 2 set pin array HI 2-ABS\ // 3 set pin array LO 3-ABS\ // 4 set pin OUTPUT 4-ABCD\ // 5 set pin INPUT 5-ASD\ 34 void loop() { while (Serial.available() == 0); in_byte += char(Serial.read()); iEnd = in_byte.indexOf("~"); if (iEnd > 0) { out_byte=""; opr = int(in_byte.charAt(0))-48; iPos = 2; while (iPos < iEnd) { iAdr = int(in_byte.charAt(iPos))-1; // delphi #0 end string iPos++; switch (opr) { case 0: if (in_byte.charAt(iPos) == '0') {digitalWrite(iAdr,LOW);} else {digitalWrite(iAdr,HIGH);} iPos++; break; case 1: if (digitalRead(iAdr) == HIGH) {out_byte += '1'; } else {out_byte += '0'; } break; case 2: digitalWrite(iAdr,HIGH); break; case 3: digitalWrite(iAdr,LOW); break; case 4: pinMode(iAdr, OUTPUT); break; case 5: pinMode(iAdr, INPUT); break; } if (iPos == iEnd) break; } iEnd=0; iPos=0; opr=0; Serial.print(out_byte+"~"); in_byte=""; out_byte=""; } }
Посты по всей видимости править нельзя.
Вот чуть улучшенный код без “indexOf”
Чуть позже размещу модуль на Delphi
Цель проекта программатор для 29СXXX и AT89C55 и любых других программируемых микросхем