Прошу помочь в изменение скетча
- Войдите на сайт для отправки комментариев
Пнд, 24/10/2016 - 12:27
Народ помогите преобразовать скетч, чтобы вместо посылки команды "w" была возможность отсылать 3 команды к примеру "1", "2", "3".
и в соответсивии с эти выполнялась команда на запись ключа "1" идет запись 0x01, 0x86, 0xF1, 0x04, 0x12, 0x00, 0x00, 0x05; "2" 0x01, 0x86, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF; "3" 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00.
Сам скетч:
// Based on https://danman.eu/blog/cloning-ibutton-using-rw1990-and-avr/ // and: http://elimelecsarduinoprojects.blogspot.com/2013/06/read-dallas-ibutton... // By Swift Geek 28-08-2015 // TODO: danger to atmega328! Use OpenCollector logic! // Used 4.8kΩ Pull-up and 3.1 Vcc for arduino/pull-up #include <OneWire.h> #define pin 10 OneWire ibutton (pin); // I button connected on PIN 2. byte addr[8]; //array to store the Ibutton ID. void setup(){ Serial.begin(115200); } void loop(){ if (!ibutton.search (addr)){//read attached ibutton and asign value to buffer ibutton.reset_search(); delay(200); return; } Serial.print(millis()/1000); Serial.print("> "); for (byte x = 0; x<8; x++){ Serial.print(addr[x],HEX); //print the buffer content in LSB. For MSB: for (int x = 8; x>0; x--) Serial.print(" "); } //compute crc// byte crc; crc = ibutton.crc8(addr, 7); Serial.print("CRC: "); Serial.println(crc,HEX); if ( Serial.read() == 'w' ){ ibutton.skip();ibutton.reset();ibutton.write(0x33); Serial.print(" ID before write:"); for (byte x=0; x<8; x++){ Serial.print(' '); Serial.print(ibutton.read(), HEX); } // send reset ibutton.skip(); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); // send logical 0 digitalWrite(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(60); pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10); Serial.print('\n'); Serial.print(" Writing iButton ID:\n "); // Hardcode here your desired ID // // 01 D5 9F DC 02 00 00 96 byte newID[8] = {0x01, 0x86, 0xF1, 0x04, 0x12, 0x00, 0x00, 0x05}; ibutton.skip(); ibutton.reset(); ibutton.write(0xD5); for (byte x = 0; x<8; x++){ writeByte(newID[x]); Serial.print('*'); } Serial.print('\n'); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); //send logical 1 digitalWrite(10, LOW); pinMode(10, OUTPUT); delayMicroseconds(10); pinMode(10, INPUT); digitalWrite(10, HIGH); delay(10); } } int writeByte(byte data){ int data_bit; for(data_bit=0; data_bit<8; data_bit++){ if (data & 1){ digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } else { digitalWrite(pin, LOW); pinMode(pin, OUTPUT); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } data = data >> 1; } return 0; }
Т. е. в зависимости от полученной команды ("1", "2" или "3") менялось значение в строке 57?
В строках 38-42 что-то будет меняться в зависимости от полученной команды ("1", "2" или "3") или нет?
Т. е. в зависимости от полученной команды ("1", "2" или "3") менялось значение в строке 57?
В строках 38-42 что-то будет меняться в зависимости от полученной команды ("1", "2" или "3") или нет?
да и шла запись того или иного ключа
сразу скажу, что протестить в консоле без подключенной схемы и ключа нельзя
да и шла запись того или иного ключа
сразу скажу, что протестить в консоле без подключенной схемы и ключа нельзя
Я имел ввиду, что если вместо 'w' будет стоять '1' - код "0x33" в функции "ibutton.write(0x33);" поменяется?
Если нет, то строку 37 заменяете на:
строку 57 на:
проблема запись едет но проблема во второй части кода где выбор ключей
я в написаниях скетчей не селен, но можно сделать по такому примеру:
к примеру 57 строка
организовать через функцию if (c привязкой прочитанного в сериале)?