Advertisement
sanelss

Untitled

Nov 14th, 2013
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. //Code by: sanelss@gmail.com
  2.  
  3. #include <Wire.h>
  4.  
  5. byte _address;
  6. byte _register;
  7. byte _value;
  8. String _inbuffer;
  9.  
  10. void setup(){
  11. _address=0;
  12. _inbuffer="";
  13.  
  14. Serial.begin(115200);
  15. while(!Serial);
  16.  
  17. Wire.begin();
  18.  
  19. printMainMenu();
  20. }
  21.  
  22. void loop(){
  23. if(Serial.available()){
  24. char c=Serial.read();
  25. Serial.println(c);
  26. switch(c-'0'){
  27. case 1:
  28. _address=promptInput("Device Address");
  29. Serial.print("Device Address changed to: ");
  30. printAllTypes(_address);
  31. Serial.print("\nEnter Menu Item:\n>");
  32. break;
  33. case 2:
  34. _register=promptInput("Rgister Address");
  35. _value=promptInput("Value");
  36. writeTo(_register,_value);
  37. Serial.print("Register ");
  38. printAllTypes(_register);
  39. Serial.print(" = ");
  40. printAllTypes(readRegister(_register));
  41. Serial.print("\nEnter Menu Item:\n>");
  42. break;
  43. case 3:
  44. _register=promptInput("Rgister Address");
  45. Serial.print("Register 0x");
  46. Serial.print(_register,HEX);
  47. Serial.print(": ");
  48. printAllTypes(readRegister(_register));
  49. Serial.print("\nEnter Menu Item:\n>");
  50. break;
  51. default:
  52. Serial.println("\n\nInvalid Input");
  53. printMainMenu();
  54. break;
  55. }
  56. }
  57. }
  58.  
  59. void printMainMenu(){
  60. Serial.println("-------------------------------------");
  61. Serial.println("Main Menu:");
  62. Serial.println("1. Enter/change Device Address");
  63. Serial.println("2. Write Register");
  64. Serial.println("3. Read Register");
  65. Serial.println("4. Read Register X times at Y Interval");
  66. Serial.println("5. Read X Registers starting at register Y");
  67. Serial.println("-------------------------------------");
  68. Serial.print("Current device: ");
  69. printAllTypes(_address);
  70. Serial.print("\nEnter Menu Item:\n>");
  71. }
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81. byte readRegister(byte reg){
  82. byte _buff[1];
  83. readFrom(reg,1,_buff);
  84. return _buff[0];
  85. }
  86.  
  87. byte promptInput(String msg){
  88. Serial.print("Enter ");
  89. Serial.print(msg);
  90. Serial.print(": (Example: 0xCA,0XCA,0xca,0Xca, 0b11001010, 0B11001010, 202)\n>");
  91. while(!Serial.available());
  92. _inbuffer="";
  93. while(Serial.available()>0)
  94. _inbuffer+=(char)Serial.read();
  95. Serial.println(_inbuffer);
  96. return getValueFromString(_inbuffer);
  97. }
  98.  
  99.  
  100. void printAllTypes(byte data){
  101. Serial.print("0x");
  102. Serial.print(data,HEX);
  103. Serial.print(", 0b");
  104. Serial.print(data,BIN);
  105. Serial.print(", ");
  106. Serial.println(data);
  107. }
  108.  
  109. byte getValueFromString(String s){
  110. byte ret;
  111. if(s[0]=='0'&&(s[1]=='x'||s[1]=='X')){
  112. ret=(strToInt(s[2])*16+strToInt(s[3]));
  113. }
  114. else if(s[0]=='0'&&(s[1]=='b'||s[1]=='B')){
  115. ret=0;
  116. for(int i=0;i<s.length()&&i<8;i++){
  117. ret|=((s[s.length()-1-i]=='1')? 1:0)<<i;
  118. }
  119. }
  120. else{
  121. char buf[4];
  122. s.toCharArray(buf,sizeof(buf));
  123. ret=atoi(buf);
  124. }
  125. return ret;
  126. }
  127.  
  128. byte strToInt(char c){
  129. byte b=c-'0';
  130. if(b>48&&b<55)
  131. b-=39;
  132. else if(b>9&&b<23)
  133. b-=7;
  134. else if(b<0||b>9)
  135. b=0;
  136. return b;
  137. }
  138.  
  139. void writeTo(byte reg, byte val) {
  140. Wire.beginTransmission(_address);
  141. Wire.write(reg);
  142. Wire.write(val);
  143. Wire.endTransmission();
  144. }
  145.  
  146.  
  147. void readFrom(byte reg, int num, byte _buff[]) {
  148. Wire.beginTransmission(_address);
  149. Wire.write(reg);
  150. Wire.endTransmission();
  151.  
  152. Wire.beginTransmission(_address);
  153. Wire.requestFrom((uint8_t)_address,(uint8_t)num);
  154.  
  155. int i = 0;
  156. while(Wire.available()){
  157. _buff[i] = Wire.read();
  158. i++;
  159. }
  160. Wire.endTransmission();
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement