Я написал небольшую программу wpf для управления некоторыми светодиодами.Я построил 4 различных режима:
LEDON, LEDOFF, DIMMING, FLASH
Это очень просто и отлично работает.Я посылаю a, b, c или d (4 разные кнопки) в arduino и выполняю соответствующий цикл.
Теперь я пытаюсь создать слайдер в моей программе WPF, который может управлять яркостью светодиодов.Мой ползунок создает значения от 0 до 255. Я отправляю их в arduino.
Теперь я спрашиваю, является ли входящий байт числом, если да, я выполняю метод, который должен определять яркость, используя analog.write(PIN,value);
.
WPF:
private void targetSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
try
{
var val = Math.Round(targetSlider.Value).ToString();
Console.WriteLine("WPF: " + val);
serialPort1.Write(val);
var ArduVal = serialPort1.ReadByte();
Console.WriteLine("Arduino: " + ArduVal);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Arduino:
void loop()
{
checkSerial();
if(lightON)LightON();
else if(lightOFF)LightOFF();
else if(lightDIM) LightDIM();
else if(lightBLINK) LightBLINK();
}
void checkSerial()
{
while(Serial.available()>0){
int incoming=Serial.read();
if(isdigit(incoming)){
executeSlider(incoming);
Serial.print(incoming);
}
else{
char c=incoming;
executeCommand(c);
}
}
}
void executeSlider(int val){
analogWrite(BLUE, val);
analogWrite(GREEN, val);
analogWrite(RED, val);
}
Как вы можете видеть, я проверяю значения ползунка (которые отправляются в arduino) и значения, которыеприбыть в Arduino.
Значения arduino всегда коммутируют около 50. Я не понимаю, почему?Должен ли я передать массив?Или что-то не так с связью arudino-PC?
Консольный вывод:
WPF: 2
Arduino: 53
WPF: 4
Arduino: 48
WPF: 4
Arduino: 53
WPF: 5
Arduino: 50
WPF: 6
Arduino: 53
WPF: 8
Arduino: 50
WPF: 8
Arduino: 53
WPF: 10
Arduino: 51
WPF: 10
Arduino: 53
WPF: 12
Arduino: 52
WPF: 13
Arduino: 53
WPF: 14
Arduino: 54
WPF: 14
Arduino: 53
WPF: 15
Arduino: 54
WPF: 16
Arduino: 52
WPF: 16
Arduino: 57
WPF: 17
Arduino: 52
WPF: 18
Arduino: 56
WPF: 20
Arduino: 52
WPF: 20
Arduino: 57
WPF: 21
Arduino: 52
WPF: 22
Arduino: 56
WPF: 23
Arduino: 52
WPF: 25
Arduino: 57
WPF: 26
Arduino: 53
WPF: 27
Arduino: 48
WPF: 29
Arduino: 52
WPF: 30
Arduino: 57
WPF: 31
Arduino: 53
WPF: 32
Arduino: 49
WPF: 33
Arduino: 52
WPF: 34
Arduino: 57
WPF: 35
Arduino: 53
WPF: 37
Arduino: 50
РЕДАКТИРОВАТЬ: Я изменил функцию чтения моего arduino
void checkSerial()
{
while(Serial.available()>0){
int incoming=Serial.read();
if(isdigit(incoming)){
int sliderVal=Serial.parseInt();
executeSlider(sliderVal);
Serial.print(sliderVal);
}
else{
char c=incoming;
executeCommand(c);
}
}
}
Но входящие значения по-прежнему между48-58