sanelss

Untitled

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