E sada, ja bih želeo da na arduino prokačim onewire ds18b20 digitalni temperaturni senzor i nekako njegovo očitavanje recimo 73.5C (samo primer) da spakujem/konvertujem u (mislim da je to Function Code 03 - Read Holding Registers) kao da je očitana analogna vrednost i da tako šalje serijski na aplikaciju na pc-u (posluzice za testiranje qModMaster a dalje u planu neka scada za siromaha m2m mango).
Pretpostavljam da ovo nisam jasno napisao jer evo i ja sam čitao par puta da vidim ima li smisla pa logicno pojasnicu po potrebi :D
p.s. ovako izgleda osnova koda koji radi modbus rtu
Code:
modbusDevice regBank;
modbusSlave slave;
int AI0,AI1,AI2,AI3,AI4,AI5;
void setup()
{
regBank.setId(1); ///Set Slave ID
//Analog input registers
regBank.add(30001);
regBank.add(30002);
regBank.add(30003);
regBank.add(30004);
regBank.add(30005);
regBank.add(30006);
slave._device = ®Bank;
slave.setBaud(19200);
}
void loop(){
while(1){
//Analogni ulaz
AI0 = analogRead(0);
delay(10);
AI0 = analogRead(0);
regBank.set(30001, (word) AI0);
delay(10);
AI1 = analogRead(1);
delay(10);
AI1 = analogRead(1);
regBank.set(30002, (word) AI1);
delay(10);
AI2 = analogRead(2);
delay(10);
AI2 = analogRead(2);
regBank.set(30003, (word) AI2);
delay(10);
AI3 = analogRead(3);
delay(10);
AI3 = analogRead(3);
regBank.set(30004, (word) AI3);
delay(10);
AI4 = analogRead(4);
delay(10);
AI4 = analogRead(4);
regBank.set(30005, (word) AI4);
delay(10);
AI5 = analogRead(5);
delay(10);
AI5 = analogRead(5);
regBank.set(30006, (word) AI5);
delay(10);
slave.run();
}
}
modbusDevice regBank;
modbusSlave slave;
int AI0,AI1,AI2,AI3,AI4,AI5;
void setup()
{
regBank.setId(1); ///Set Slave ID
//Analog input registers
regBank.add(30001);
regBank.add(30002);
regBank.add(30003);
regBank.add(30004);
regBank.add(30005);
regBank.add(30006);
slave._device = ®Bank;
slave.setBaud(19200);
}
void loop(){
while(1){
//Analogni ulaz
AI0 = analogRead(0);
delay(10);
AI0 = analogRead(0);
regBank.set(30001, (word) AI0);
delay(10);
AI1 = analogRead(1);
delay(10);
AI1 = analogRead(1);
regBank.set(30002, (word) AI1);
delay(10);
AI2 = analogRead(2);
delay(10);
AI2 = analogRead(2);
regBank.set(30003, (word) AI2);
delay(10);
AI3 = analogRead(3);
delay(10);
AI3 = analogRead(3);
regBank.set(30004, (word) AI3);
delay(10);
AI4 = analogRead(4);
delay(10);
AI4 = analogRead(4);
regBank.set(30005, (word) AI4);
delay(10);
AI5 = analogRead(5);
delay(10);
AI5 = analogRead(5);
regBank.set(30006, (word) AI5);
delay(10);
slave.run();
}
}
dakle ovo je osnovni deo koda trenutno. kao sto vidite i kao sto je ocigledno kontroler ATmega328p na arduinu čita sve analogne ulaze i "set-uje" vrednosti 0-1023 u registre od 30001 do 30006.
E ja dakle zelim da očitam ds18b20 pomocu biblioteka dalas i onewire i da to spakujem recimo u registar 30007 a na racunaru vidim u nekom zapisu onih 73.5C da lici na ocitanu temperaturu. u inlude i setap bih dodao sve sto je potrebno za taj senzor samo ne znam kako da to pretocim u holding registar. Hvala