Arduino parse com string

from http://www.geek-workshop.com/thread-158-1-1.html


在串口输入1011101..的话,就会令Arduino的D2~Dx引脚产生高/低电平,当然,一次发送的数据视Arduino引脚数而定,比如Arduino UNO/nano之类的,只有D2~D13十二个引脚。我们打12个数字就好。比如101101011010,如果中间有非0和1的字符,则自动跳过该位设置:比如122202221222这样。因为2不是允许范围内,就只设置D2/D6/D10的值了:


String comdata "";void setup()
{
  
Serial.begin(9600);
  
for(int 2<= 13i++) pinMode(iOUTPUT);
}
void loop()
{
  
while (Serial.available() > 0)
  {
    
comdata += int(Serial.read()) - '0';
    
delay(2);
  }
  
if(comdata.length() > 0)
  {
    
for(int 0comdata.length(); i++)
    {
      
if(comdata[i]=='0'||comdata[i]=='1')
      {
        
digitalWrite(2comdata[i] - '0');
        
Serial.print("Pin ");
        
Serial.print(2);
        
Serial.print(" is ");
        
Serial.println(comdata[i]);
      }
    }
    
comdata "";
  }
}



 

 


再来一个:进阶版(有待测试)
输入六个逗号分隔数比如:50,20,5,255,20,20
就能令Arduino的PWM引脚(3,5,6,9,10,11):按照PWM值发光。所以逗号分割数必须是0~255

String comdata "";int numdata[6] = {0}, PWMPin[6] = {35691011}, mark 0;void setup()
{
  
for(int 06i++) pinMode(PWMPin[i], OUTPUT);
  
Serial.begin(9600);
}
void loop()
{
  
int 0;
  
while (Serial.available() > 0)
  {
    
comdata += char(Serial.read());
    
delay(2);
    
mark 1;
  }

  
if(mark == 1)
  {
    
Serial.println(comdata);
    
Serial.println(comdata.length());
    
for(int 0comdata.length() ; i++)
    {
      
if(comdata[i] == ',')
      {
        
j++;
      }
      
else
      
{
        
numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
      }
    }
    
comdata String("");


    
for(int 06i++)
    {
      
Serial.print("Pin ");
      
Serial.print(PWMPin[i]);
      
Serial.print(" = ");
      
Serial.println(numdata[i]);
      
analogWrite(PWMPin[i], numdata[i]);
      
numdata[i] = 0;
    }
    
mark 0;
  }
}



留言

熱門文章