Hi Folks,
I saw the post “Read value from Tinker analogWrite pins”, and I am looking for what is probably a simpler version of that discussion.
I simply want to read [0-255] from Tinker and latch onto that value in my Core firmware. I can see that the value is passed once when I update Tinker, but it is momentary, and I am not skilled enough to latch onto that value.
I am using A5, and I simply want to control pwm on A5…but from Tinker. I want the Tinker value to persist until I update the value on Tinker.
Please help this hardware guy!
My code:
int led = D0;
int led2 = D7;
int xPin = A0;
int yPin = A1;
int zPin = A2;
int tPin = A3;
int tVal = 0;
int xVal = 0;
int yVal = 0;
int zVal = 0;
int iPWM = 0;
int tinkerDigitalRead(String pin);
int tinkerDigitalWrite(String command);
int tinkerAnalogRead(String pin);
int tinkerAnalogWrite(String command);
//PUT YOUR VARIABLES HERE
void setup()
{
Spark.function("digitalread", tinkerDigitalRead);
Spark.function("digitalwrite", tinkerDigitalWrite);
Spark.function("analogread", tinkerAnalogRead);
Spark.function("analogwrite", tinkerAnalogWrite);
//PUT YOUR SETUP CODE HERE
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(D6,INPUT);
Serial.begin(9600);
}
void loop()
{
tVal = analogRead(tPin);
xVal = analogRead(xPin);
yVal = analogRead(yPin);
zVal = analogRead(zPin);
Serial.print(tVal);
Serial.print(" ");
Serial.print(xVal);
Serial.print(" ");
Serial.print(yVal);
Serial.print(" ");
Serial.println(iPWM);
delay(50);
tinkerDigitalWrite("D7" "HIGH");
tinkerDigitalRead("D6Val" "D6");
tinkerAnalogRead("xVal" "A0");
tinkerAnalogWrite("A5" "iPWM");
}
int tinkerDigitalRead(String pin) {
int pinNumber = pin.charAt(1) - '0';
if (pinNumber< 0 || pinNumber >7) return -1;
if(pin.startsWith("D")) {
pinMode(pinNumber, INPUT_PULLDOWN);
return digitalRead(pinNumber);}
else if (pin.startsWith("A")){
pinMode(pinNumber+10, INPUT_PULLDOWN);
return digitalRead(pinNumber+10);}
return -2;}
int tinkerDigitalWrite(String command){
bool value = 0;
int pinNumber = command.charAt(1) - '0';
if (pinNumber< 0 || pinNumber >7) return -1;
if(command.substring(3,7) == "HIGH") value = 1;
else if(command.substring(3,6) == "LOW") value = 0;
else return -2;
if(command.startsWith("D")){
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, value);
return 1;}
else if(command.startsWith("A")){
pinMode(pinNumber+10, OUTPUT);
digitalWrite(pinNumber+10, value);
return 1;}
else return -3;}
int tinkerAnalogRead(String pin){
int pinNumber = pin.charAt(1) - '0';
if (pinNumber< 0 || pinNumber >7) return -1;
if(pin.startsWith("D")){
pinMode(pinNumber, INPUT);
return analogRead(pinNumber);}
else if (pin.startsWith("A")){
pinMode(pinNumber+10, INPUT);
return analogRead(pinNumber+10);}
return -2;}
int tinkerAnalogWrite(String command){
int pinNumber = command.charAt(1) - '0';
if (pinNumber< 0 || pinNumber >7) return -1;
String value = command.substring(3);
if(command.startsWith("D")){
pinMode(pinNumber, OUTPUT);
analogWrite(pinNumber, value.toInt());
return 1;}
else if(command.startsWith("A")){
pinMode(pinNumber+10, OUTPUT);
analogWrite(pinNumber+10, value.toInt());
return 1;}
else return -2;}
I’ve edited your post to properly format the code. Please check out this post, so you know how to do this yourself in the future. Thanks in advance! ~Jordy