Advertisement
sanelss

Untitled

Nov 15th, 2013
635
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.98 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.  
  9. uint32_t _time;
  10. uint32_t _oldtime;
  11. uint16_t _interval;
  12.  
  13. uint16_t _bytecount;
  14.  
  15. String _inbuffer;
  16. char c;
  17.  
  18. void setup(){
  19.   _address=0;
  20.   _register=0;
  21.   _value=0;
  22.  
  23.   _time=0;
  24.   _oldtime=0;
  25.   _interval=0;
  26.  
  27.   _bytecount=0;
  28.  
  29.   _inbuffer="";
  30.  
  31.   Serial.begin(115200);
  32.   while(!Serial);
  33.   Wire.begin();
  34.   printMainMenu();
  35. }
  36. void loop(){
  37.   if(_interval!=0){
  38.     _time=millis();
  39.     if(_time>_oldtime+_interval){
  40.       _oldtime=_time;
  41.       Serial.print("***Register ");
  42.       printAllTypes(_register);
  43.       Serial.print("  =  ");
  44.       printAllTypes(readRegister(_register));
  45.       Serial.println("");
  46.     }
  47.   }
  48.  
  49.   if(Serial.available()){
  50.     c=Serial.read();
  51.     if(c==10||c==13){
  52.        Serial.println("");
  53.        processBuffer();
  54.     }
  55.     else{
  56.       Serial.print(c);
  57.       _inbuffer+=c;
  58.     }
  59.   }
  60. }
  61.  
  62.  
  63.  
  64. void printMainMenu(boolean printcursor){
  65.   Serial.println("-------------------------------------");
  66.   Serial.println("Main Menu:");
  67.   Serial.println("0. Clear tasks & Show Menu");
  68.   Serial.println("1. Enter/change Device Address");
  69.   Serial.println("2. Write Register");
  70.   Serial.println("3. Read Register");
  71.   Serial.println("4. Read Register X at Y ms Interval");
  72.   Serial.println("5. Read Y bytes from Register X");
  73.   Serial.println("6. Scan for i2c devices(7-bit address)");
  74.   Serial.println("*. Invalid options show menu");
  75.   Serial.println("-------------------------------------");
  76.   Serial.println("Direct commands:");
  77.   Serial.println("read register   (read 0x00)");
  78.   Serial.println("read register,interval   (read 0x00,250)");
  79.   Serial.println("write register,value  (write 0x1F,42)");
  80.   Serial.println("cls      - bunch of newline to clear txt");
  81.   Serial.println("-------------------------------------");
  82.   Serial.print("Current device: ");
  83.   printAllTypes(_address);
  84.   if(printcursor)
  85.     printCursor();
  86. }
  87. void printCursor(){
  88.   Serial.println("");
  89.   Serial.println("");
  90.   Serial.println("Enter Menu Item or Direct Command:");
  91.   Serial.print(">");
  92. }
  93.  
  94.  
  95. void processBuffer(){
  96.   _inbuffer.trim();
  97.   if(_inbuffer=="0"){
  98.     _interval=0;
  99.     Serial.println("\n\n**********   Clearing tasks   **********");
  100.     printMainMenu(false);
  101.   }
  102.   else if(_inbuffer=="1"){
  103.     _address=promptInput("Device Address");
  104.     Serial.print("***Device Address changed to: ");
  105.     printAllTypes(_address);
  106.   }
  107.   else if(_inbuffer=="2"){
  108.     _register=promptInput("Register Address");
  109.     _value=promptInput("Value");
  110.     writeTo(_register,_value);
  111.     Serial.print("***Register ");
  112.     printAllTypes(_register);
  113.     Serial.print("  =  ");
  114.     printAllTypes(readRegister(_register));
  115.   }
  116.   else if(_inbuffer=="3"){
  117.     _register=promptInput("Register Address");
  118.     Serial.print("***Register ");
  119.     printAllTypes(_register);
  120.     Serial.print("  =  ");
  121.     printAllTypes(readRegister(_register));
  122.   }
  123.   else if(_inbuffer=="4"){
  124.     _register=promptInput("Register Address");
  125.     _interval=promptInput("Interval time in ms");
  126.   }
  127.   else if(_inbuffer=="5"){
  128.     _register=promptInput("Register Address");
  129.     _bytecount=promptInput("Ammount of bytes to read");
  130.     byte _buff[_bytecount];
  131.     readFrom(_register,_bytecount,_buff);
  132.    
  133.     for(int i=0;i<_bytecount;i++){
  134.       printAllTypes(_register+i);
  135.       Serial.print("  =  ");
  136.       printAllTypes(_buff[i]);
  137.       Serial.println("");
  138.     }
  139.    
  140.   }
  141.   else if(_inbuffer=="6"){
  142.     for(byte i=1;i<127;i++){
  143.       Wire.beginTransmission(i);
  144.       byte e=Wire.endTransmission();
  145.       if(e==0){
  146.         Serial.println("");
  147.         Serial.print("Found device at: ");
  148.         printAllTypes(i);
  149.       }
  150.       else if(e==4){
  151.         Serial.print("Error at: ");
  152.         printAllTypes(i);
  153.       }
  154.     }
  155.     Serial.println("\n***Scan finished");
  156.   }
  157.   else if(_inbuffer.startsWith("read ")){
  158.     if(_inbuffer.indexOf(",")==-1){
  159.       _register=getValueFromString(_inbuffer.substring(_inbuffer.indexOf(" ")+1));
  160.       Serial.print("***Register ");
  161.       printAllTypes(_register);
  162.       Serial.print("  =  ");
  163.       printAllTypes(readRegister(_register));
  164.     }
  165.     else{
  166.       _register=getValueFromString(_inbuffer.substring(_inbuffer.indexOf(" ")+1,_inbuffer.indexOf(",")));
  167.       _interval=getValueFromString(_inbuffer.substring(_inbuffer.indexOf(",")+1));
  168.     }
  169.   }
  170.   else if(_inbuffer.startsWith("write ")){
  171.     _register=getValueFromString(_inbuffer.substring(_inbuffer.indexOf(" ")+1,_inbuffer.indexOf(",")));
  172.     _value=getValueFromString(_inbuffer.substring(_inbuffer.indexOf(",")+1));
  173.     writeTo(_register,_value);
  174.     Serial.print("***Register ");
  175.     printAllTypes(_register);
  176.     Serial.print("  =  ");
  177.     printAllTypes(readRegister(_register));
  178.   }
  179.   else if(_inbuffer.startsWith("cls")){
  180.     Serial.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  181.     printMainMenu(false);
  182.   }
  183.   else{
  184.      Serial.println("\n\n**********   Invalid Input   **********");
  185.      printMainMenu(false);
  186.   }
  187.   printCursor();
  188.   _inbuffer="";
  189. }
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205. void printMainMenu(){
  206.   printMainMenu(true);
  207. }
  208.  
  209. byte readRegister(byte reg){
  210.   byte _buff[1];
  211.   readFrom(reg,1,_buff);
  212.   return _buff[0];
  213. }
  214.  
  215. uint16_t promptInput(String msg){
  216.   uint16_t ret;
  217.   Serial.print("***Enter ");
  218.   Serial.print(msg);
  219.   Serial.println(": (Ex: 0xCA,0XCA,0xca,0Xca,0b11001010,0B11001010,202)");
  220.   Serial.print(">");
  221.   c=0;
  222.   _inbuffer="";
  223.   while(!(c==10||c==13)){
  224.     if(Serial.available()){
  225.       c=Serial.read();
  226.       if(!(c==10||c==13)){
  227.         Serial.print(c);
  228.         _inbuffer+=c;
  229.       }
  230.       else
  231.         Serial.println("");
  232.     }
  233.   };
  234.   ret=getValueFromString(_inbuffer);
  235.   _inbuffer="";
  236.   return ret;
  237. }
  238.  
  239. void printAllTypes(byte data){
  240.   Serial.print("0x");
  241.   Serial.print(data,HEX);
  242.   Serial.print(", 0b");
  243.   Serial.print(data,BIN);
  244.   Serial.print(", ");
  245.   Serial.print(data);  
  246. }
  247.  
  248. uint16_t getValueFromString(String s){
  249.   uint16_t ret;
  250.   if(s.startsWith("0x")||s.startsWith("0X")){
  251.     ret=(strToInt(s[2])*16+strToInt(s[3]));
  252.   }
  253.   else if(s.startsWith("0b")||s.startsWith("0B")){
  254.     ret=0;
  255.     for(int i=0;i<s.length()&&i<=8;i++){
  256.       ret|=((s[s.length()-1-i]=='1')? 1:0)<<i;
  257.     }
  258.   }
  259.   else{
  260.     ret=s.toInt();
  261.   }
  262.   return ret;
  263. }
  264.  
  265. byte strToInt(char c){
  266.   byte b=0;
  267.   if(c>='a'&&c<='f')
  268.     b=c-'a'+10;
  269.   else if(c>='A'&&c<='F')
  270.     b=c-'A'+10;
  271.   else if(c>='0'&&c<='9')
  272.     b=c-'0';
  273.   return b;
  274. }
  275.  
  276. void writeTo(byte reg, byte val) {
  277.   Wire.beginTransmission(_address);
  278.   Wire.write(reg);
  279.   Wire.write(val);
  280.   Wire.endTransmission();
  281. }
  282.  
  283. void readFrom(byte reg, int num, byte _buff[]) {
  284.   Wire.beginTransmission(_address);
  285.   Wire.write(reg);
  286.   Wire.endTransmission();
  287.  
  288.   Wire.beginTransmission(_address);
  289.   Wire.requestFrom((uint8_t)_address,(uint8_t)num);
  290.  
  291.   int i = 0;
  292.   while(Wire.available()){
  293.     _buff[i] = Wire.read();
  294.     i++;
  295.   }
  296.   Wire.endTransmission();
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement