Добавление i2c дисплея 20 04 к считывателю кодов радио брелков
- Войдите на сайт для отправки комментариев
Ср, 16/05/2018 - 17:36
Добрый день помогите добавить дисплей 2004 к данному скетчу
//Палкаподнималка //Поддерживает: CAME, NICE, AM MOTORS //Версия 2.0 #define wt 150000 //Задержка между посылками #define Pe 413 //AN MOTORS #define Pe2 Pe*2 //AN MOTORS #define rxPin 2 //Приемник #define rxOn 5 //Включение приёмника #define txPin 3 //Передатчик #define btsendPin 7 //кнопка, ОТПРАВКА #define btglushPin 8 //кнопка, ГЛУШИЛКА #define ledglPin 22 //индикатор режима глушилка #define ledcashPin 46 //индикатор сигнала в cashcame #define ledpwrPin 12 //индикатор режима power //Прием #define MAX_DELTA 200 //Максимальное отклонение от длительности при приеме volatile unsigned long prevtime; volatile unsigned int lolen, hilen, state; //AN Motors volatile static byte bcounter = 0; // количество принятых битов volatile static long code1 = 0; // зашифрованная часть volatile static long code2 = 0; // фиксированная часть volatile long c1 = 0; // переменная для отправки volatile long c2 = 0; // переменная для отправки volatile long Cash1 = 0; // кеш переменная для отправки volatile long Cash2 = 0; // кеш переменная для отправки //Came volatile static byte cameCounter = 0; // хранит количество бит volatile static long cameCode = 0; // сам код кнопки volatile long cashcame = 0; // кеш переменная для отправки //NICE volatile static byte niceCounter = 0; // count of bits stored volatile static long niceCode = 0; // code itself volatile long cashnice = 0; // кеш переменная для отправки int flag = 0; // флаг для обработки кнопки void setup() { //lcd.init(); pinMode(rxPin, INPUT); pinMode(rxOn, OUTPUT); pinMode(txPin, OUTPUT); pinMode(ledcashPin, OUTPUT); pinMode(ledglPin, OUTPUT); pinMode(ledpwrPin, OUTPUT); pinMode(btsendPin, INPUT); pinMode(btglushPin, INPUT); digitalWrite(ledpwrPin, HIGH); Serial.begin(9600); Serial.println("Scaner RUN"); randomSeed(analogRead(0)); //Генерация рандомного числа для AN Motors attachInterrupt(0, grab, CHANGE); //перехват пакетов digitalWrite(rxOn, HIGH); } void loop() { //обработка кнопки отправки кодов if (digitalRead(btsendPin) == HIGH) { noInterrupts(); //Выкл перехват digitalWrite(rxOn, LOW); digitalWrite(ledglPin, LOW); //Выкл индикатор глушилки flag = 1; } //обработка кнопки глушилки if (digitalRead(btglushPin) == HIGH) { noInterrupts(); //Выкл перехват digitalWrite(rxOn, LOW); digitalWrite(ledglPin, HIGH); //Вкл индикатор глушилки flag = 2; } switch (flag) { case 1: anmcode(); //AN MOTORS ccode(); //CAME ncode(); //NICE interrupts(); //Вкл перехват digitalWrite(rxOn, HIGH); flag = 0; break; case 2: //Глушилка digitalWrite(txPin, HIGH); delayMicroseconds(500); digitalWrite(txPin, LOW); delayMicroseconds(499); break; } } // ****************************************************** //Коды AN MOTORS void anmcode() { //КОД последий принятый от AN MOTORS if (Cash1 > 0 && Cash2 > 0) { c1 = Cash1 + random(0xff); c2 = Cash2; SendANMotors(c1, c2); } //Пример //c1 = 0x20220000 + random(0xff); //c2 = 0x2A3B4CE52; //SendANMotors(c1, c2); } //Коды CAME void ccode() { //Отправка последнего принятого кода со сканера if (cashcame > 0) { SendCame(cashcame); } //Пример //SendCame(2345); } //Коды NICE void ncode() { //Отправка последнего принятого кода со сканера if (cashnice > 0) { SendNice(cashnice); } //Пример //SendNice(1234); } // ****************************************************** //Отправка ANMotors void SendANMotors(long c1, long c2) { for (int j = 0; j < 4; j++) { digitalWrite(ledcashPin, !digitalRead(ledcashPin)); //отправляем 12 начальных импульсов 0-1 for (int i = 0; i < 12; i++) { delayMicroseconds(Pe); digitalWrite(txPin, HIGH); delayMicroseconds(Pe); digitalWrite(txPin, LOW); } delayMicroseconds(Pe * 10); //отправляем первую половину for (int i = 4 * 8; i > 0; i--) { SendBit(bitRead(c1, i - 1)); } //вторую половину for (int i = 4 * 8; i > 0; i--) { SendBit(bitRead(c2, i - 1)); } //и еще пару ненужных бит, которые означают батарейку и флаг повтора SendBit(1); SendBit(1); delayMicroseconds(Pe * 39); } delay(wt); } //Отправка ANMotors void SendBit(byte b) { if (b == 0) { digitalWrite(txPin, HIGH); // 0 delayMicroseconds(Pe2); digitalWrite(txPin, LOW); delayMicroseconds(Pe); } else { digitalWrite(txPin, HIGH); // 1 delayMicroseconds(Pe); digitalWrite(txPin, LOW); delayMicroseconds(Pe2); } } //Отправка CAME void SendCame(long Code) { for (int j = 0; j < 4; j++) { // посылку посылаем несколько раз подряд. digitalWrite(ledcashPin, !digitalRead(ledcashPin)); // время стартового импульса digitalWrite(txPin, HIGH); delayMicroseconds(320); digitalWrite(txPin, LOW); for (int i = 12; i > 0; i--) { byte b = bitRead(Code, i - 1); // побитово перебираем и посылаем код if (b) { digitalWrite(txPin, LOW); // 1 delayMicroseconds(640); digitalWrite(txPin, HIGH); delayMicroseconds(320); } else { digitalWrite(txPin, LOW); // 0 delayMicroseconds(320); digitalWrite(txPin, HIGH); delayMicroseconds(640); } } digitalWrite(txPin, LOW); delayMicroseconds(11520); } delay(wt); } //Отправка NICE void SendNice(long Code) { for (int j = 0; j < 4; j++) { // посылку посылаем 4 раза подряд. digitalWrite(ledcashPin, !digitalRead(ledcashPin)); // время стартового импульса digitalWrite(txPin, HIGH); delayMicroseconds(700); digitalWrite(txPin, LOW); for (int i = 12; i > 0; i--) { byte b = bitRead(Code, i - 1); // побитово перебираем и посылаем код if (b) { digitalWrite(txPin, LOW); // 1 delayMicroseconds(1400); digitalWrite(txPin, HIGH); delayMicroseconds(700); } else { digitalWrite(txPin, LOW); // 0 delayMicroseconds(700); digitalWrite(txPin, HIGH); delayMicroseconds(1400); } } digitalWrite(txPin, LOW); delayMicroseconds(25200); } delay(wt); } // ****************************************************** //ПРИЁМ boolean CheckValue(unsigned int base, unsigned int value) { return ((value == base) || ((value > base) && ((value - base) < MAX_DELTA)) || ((value < base) && ((base - value) < MAX_DELTA))); } void grab() { state = digitalRead(rxPin); if (state == HIGH) lolen = micros() - prevtime; else hilen = micros() - prevtime; prevtime = micros(); //AN MOTORS if (state == HIGH) { // последовательность закончилась if (CheckValue(Pe, hilen) && CheckValue(Pe2, lolen)) { // valid 1 if (bcounter < 32) code1 = (code1 << 1) | 1; else if (bcounter < 64) code2 = (code2 << 1) | 1; bcounter++; } else if (CheckValue(Pe2, hilen) && CheckValue(Pe, lolen)) { // valid 0 if (bcounter < 32) code1 = (code1 << 1) | 0; else if (bcounter < 64) code2 = (code2 << 1) | 0; bcounter++; } else bcounter = 0; //Вывод в терминал if (bcounter >= 65) { Serial.print("AN MOTORS: "); Serial.print(code1, HEX); Serial.print(" "); Serial.println(code2, HEX); digitalWrite(ledcashPin, HIGH); Cash1 = code1; Cash2 = code2; bcounter = 0; code1 = 0; code2 = 0; } } //CAME if (state == LOW) { // последовательность закончилась if (CheckValue(320, hilen) && CheckValue(640, lolen)) { // valid 1 cameCode = (cameCode << 1) | 1; cameCounter++; } else if (CheckValue(640, hilen) && CheckValue(320, lolen)) { // valid 0 cameCode = (cameCode << 1) | 0; cameCounter++; } else cameCounter = 0; } else if (lolen > 1000 && (cameCounter == 12 || cameCounter == 13) && ((cameCode & 0xfff) != 0xfff)) { Serial.print("CAME: "); Serial.println(cameCode & 0xfff); cashcame = cameCode & 0xfff; cameCounter = 0; cameCode = 0; digitalWrite(ledcashPin, HIGH); } //NICE if (state == LOW) { // последовательность закончилась if (CheckValue(700, hilen) && CheckValue(1400, lolen)) // valid 1 { niceCode = (niceCode << 1) | 1; niceCounter++; } else if (CheckValue(1400, hilen) && CheckValue(700, lolen)) // valid 0 { niceCode = (niceCode << 1) | 0; niceCounter++; } else niceCounter = 0; } else if (lolen > 2200 && (niceCounter == 12 || niceCounter == 13) && ((niceCode & 0xfff) != 0xfff)) { Serial.print("NICE: "); Serial.println(niceCode & 0xfff); cashnice = niceCode & 0xfff; niceCounter = 0; niceCode = 0; digitalWrite(ledcashPin, HIGH); } }
Пробовал сомостоятельно добавить поддержку дисплея но коды он не выводит
так что прошу помощи
вот мой вариант не рабочий
//Палкаподнималка //Поддерживает: CAME, NICE, AM MOTORS //Версия 2.0 #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,20,4); #define wt 150000 //Задержка между посылками #define Pe 413 //AN MOTORS #define Pe2 Pe*2 //AN MOTORS #define rxPin 2 //Приемник #define rxOn 5 //Включение приёмника #define txPin 3 //Передатчик #define btsendPin 7 //кнопка, ОТПРАВКА #define btglushPin 8 //кнопка, ГЛУШИЛКА #define ledglPin 22 //индикатор режима глушилка #define ledcashPin 46 //индикатор сигнала в cashcame #define ledpwrPin 12 //индикатор режима power //Прием #define MAX_DELTA 200 //Максимальное отклонение от длительности при приеме volatile unsigned long prevtime; volatile unsigned int lolen, hilen, state; //AN Motors volatile static byte bcounter = 0; // количество принятых битов volatile static long code1 = 0; // зашифрованная часть volatile static long code2 = 0; // фиксированная часть volatile long c1 = 0; // переменная для отправки volatile long c2 = 0; // переменная для отправки volatile long Cash1 = 0; // кеш переменная для отправки volatile long Cash2 = 0; // кеш переменная для отправки //Came volatile static byte cameCounter = 0; // хранит количество бит volatile static long cameCode = 0; // сам код кнопки volatile long cashcame = 0; // кеш переменная для отправки //NICE volatile static byte niceCounter = 0; // count of bits stored volatile static long niceCode = 0; // code itself volatile long cashnice = 0; // кеш переменная для отправки int flag = 0; // флаг для обработки кнопки void setup() { //lcd.init(); pinMode(rxPin, INPUT); pinMode(rxOn, OUTPUT); pinMode(txPin, OUTPUT); pinMode(ledcashPin, OUTPUT); pinMode(ledglPin, OUTPUT); pinMode(ledpwrPin, OUTPUT); pinMode(btsendPin, INPUT); pinMode(btglushPin, INPUT); digitalWrite(ledpwrPin, HIGH); lcd.backlight(); lcd.setCursor(3,0); lcd.print("Scaner RUN"); Serial.begin(9600); Serial.println("Scaner RUN"); randomSeed(analogRead(0)); //Генерация рандомного числа для AN Motors attachInterrupt(0, grab, CHANGE); //перехват пакетов digitalWrite(rxOn, HIGH); } void loop() { //обработка кнопки отправки кодов if (digitalRead(btsendPin) == HIGH) { noInterrupts(); //Выкл перехват digitalWrite(rxOn, LOW); digitalWrite(ledglPin, LOW); //Выкл индикатор глушилки flag = 1; } //обработка кнопки глушилки if (digitalRead(btglushPin) == HIGH) { noInterrupts(); //Выкл перехват digitalWrite(rxOn, LOW); digitalWrite(ledglPin, HIGH); //Вкл индикатор глушилки flag = 2; } switch (flag) { case 1: anmcode(); //AN MOTORS ccode(); //CAME ncode(); //NICE interrupts(); //Вкл перехват digitalWrite(rxOn, HIGH); flag = 0; break; case 2: //Глушилка digitalWrite(txPin, HIGH); delayMicroseconds(500); digitalWrite(txPin, LOW); delayMicroseconds(499); break; } } // ****************************************************** //Коды AN MOTORS void anmcode() { //КОД последий принятый от AN MOTORS if (Cash1 > 0 && Cash2 > 0) { c1 = Cash1 + random(0xff); c2 = Cash2; SendANMotors(c1, c2); } //Пример //c1 = 0x20220000 + random(0xff); //c2 = 0x2A3B4CE52; //SendANMotors(c1, c2); } //Коды CAME void ccode() { //Отправка последнего принятого кода со сканера if (cashcame > 0) { SendCame(cashcame); } //Пример //SendCame(2345); } //Коды NICE void ncode() { //Отправка последнего принятого кода со сканера if (cashnice > 0) { SendNice(cashnice); } //Пример //SendNice(1234); } // ****************************************************** //Отправка ANMotors void SendANMotors(long c1, long c2) { for (int j = 0; j < 4; j++) { digitalWrite(ledcashPin, !digitalRead(ledcashPin)); //отправляем 12 начальных импульсов 0-1 for (int i = 0; i < 12; i++) { delayMicroseconds(Pe); digitalWrite(txPin, HIGH); delayMicroseconds(Pe); digitalWrite(txPin, LOW); } delayMicroseconds(Pe * 10); //отправляем первую половину for (int i = 4 * 8; i > 0; i--) { SendBit(bitRead(c1, i - 1)); } //вторую половину for (int i = 4 * 8; i > 0; i--) { SendBit(bitRead(c2, i - 1)); } //и еще пару ненужных бит, которые означают батарейку и флаг повтора SendBit(1); SendBit(1); delayMicroseconds(Pe * 39); } delay(wt); } //Отправка ANMotors void SendBit(byte b) { if (b == 0) { digitalWrite(txPin, HIGH); // 0 delayMicroseconds(Pe2); digitalWrite(txPin, LOW); delayMicroseconds(Pe); } else { digitalWrite(txPin, HIGH); // 1 delayMicroseconds(Pe); digitalWrite(txPin, LOW); delayMicroseconds(Pe2); } } //Отправка CAME void SendCame(long Code) { for (int j = 0; j < 4; j++) { // посылку посылаем несколько раз подряд. digitalWrite(ledcashPin, !digitalRead(ledcashPin)); // время стартового импульса digitalWrite(txPin, HIGH); delayMicroseconds(320); digitalWrite(txPin, LOW); for (int i = 12; i > 0; i--) { byte b = bitRead(Code, i - 1); // побитово перебираем и посылаем код if (b) { digitalWrite(txPin, LOW); // 1 delayMicroseconds(640); digitalWrite(txPin, HIGH); delayMicroseconds(320); } else { digitalWrite(txPin, LOW); // 0 delayMicroseconds(320); digitalWrite(txPin, HIGH); delayMicroseconds(640); } } digitalWrite(txPin, LOW); delayMicroseconds(11520); } delay(wt); } //Отправка NICE void SendNice(long Code) { for (int j = 0; j < 4; j++) { // посылку посылаем 4 раза подряд. digitalWrite(ledcashPin, !digitalRead(ledcashPin)); // время стартового импульса digitalWrite(txPin, HIGH); delayMicroseconds(700); digitalWrite(txPin, LOW); for (int i = 12; i > 0; i--) { byte b = bitRead(Code, i - 1); // побитово перебираем и посылаем код if (b) { digitalWrite(txPin, LOW); // 1 delayMicroseconds(1400); digitalWrite(txPin, HIGH); delayMicroseconds(700); } else { digitalWrite(txPin, LOW); // 0 delayMicroseconds(700); digitalWrite(txPin, HIGH); delayMicroseconds(1400); } } digitalWrite(txPin, LOW); delayMicroseconds(25200); } delay(wt); } // ****************************************************** //ПРИЁМ boolean CheckValue(unsigned int base, unsigned int value) { return ((value == base) || ((value > base) && ((value - base) < MAX_DELTA)) || ((value < base) && ((base - value) < MAX_DELTA))); } void grab() { state = digitalRead(rxPin); if (state == HIGH) lolen = micros() - prevtime; else hilen = micros() - prevtime; prevtime = micros(); //AN MOTORS if (state == HIGH) { // последовательность закончилась if (CheckValue(Pe, hilen) && CheckValue(Pe2, lolen)) { // valid 1 if (bcounter < 32) code1 = (code1 << 1) | 1; else if (bcounter < 64) code2 = (code2 << 1) | 1; bcounter++; } else if (CheckValue(Pe2, hilen) && CheckValue(Pe, lolen)) { // valid 0 if (bcounter < 32) code1 = (code1 << 1) | 0; else if (bcounter < 64) code2 = (code2 << 1) | 0; bcounter++; } else bcounter = 0; //Вывод в терминал if (bcounter >= 65) { lcd.setCursor(2,1); lcd.print("AN MOTORS: "); lcd.print(code1, HEX); lcd.print(" "); lcd.print(code2, HEX); Serial.print("AN MOTORS: "); Serial.print(code1, HEX); Serial.print(" "); Serial.println(code2, HEX); digitalWrite(ledcashPin, HIGH); Cash1 = code1; Cash2 = code2; bcounter = 0; code1 = 0; code2 = 0; } } //CAME if (state == LOW) { // последовательность закончилась if (CheckValue(320, hilen) && CheckValue(640, lolen)) { // valid 1 cameCode = (cameCode << 1) | 1; cameCounter++; } else if (CheckValue(640, hilen) && CheckValue(320, lolen)) { // valid 0 cameCode = (cameCode << 1) | 0; cameCounter++; } else cameCounter = 0; } else if (lolen > 1000 && (cameCounter == 12 || cameCounter == 13) && ((cameCode & 0xfff) != 0xfff)) { lcd.setCursor(2,1); lcd.print("CAME: "); lcd.print(cameCode & 0xfff); Serial.print("CAME: "); Serial.println(cameCode & 0xfff); cashcame = cameCode & 0xfff; cameCounter = 0; cameCode = 0; digitalWrite(ledcashPin, HIGH); } //NICE if (state == LOW) { // последовательность закончилась if (CheckValue(700, hilen) && CheckValue(1400, lolen)) // valid 1 { niceCode = (niceCode << 1) | 1; niceCounter++; } else if (CheckValue(1400, hilen) && CheckValue(700, lolen)) // valid 0 { niceCode = (niceCode << 1) | 0; niceCounter++; } else niceCounter = 0; } else if (lolen > 2200 && (niceCounter == 12 || niceCounter == 13) && ((niceCode & 0xfff) != 0xfff)) { lcd.setCursor(2,1); lcd.print("NICE: "); lcd.print(niceCode & 0xfff); Serial.print("NICE: "); Serial.println(niceCode & 0xfff); cashnice = niceCode & 0xfff; niceCounter = 0; niceCode = 0; digitalWrite(ledcashPin, HIGH); } }
Зарание благодарю за помощь
049
//lcd.init();
Попробуйте эту библиотеку - https://elchupanibrei.livejournal.com/27443.html
lcd.init();
То что он закоментирован в коде это мой косяк при написании поста
С этой библиотекой тоже не работает
а стой что у меня в посте дисплей показывает надпись Scaner RUN но принятые коды не отображает так же перестал работать сканер через мониторинг порта