void loop() {
if (Serial.available()) {
char a =(int)Serial.read();
Serial.print(a[0][1]);
}
}
I want to give a command to Arduino Uno from my pc. Command will come from an array in visual studio. For example, it will give {66,90}. Arduino must identify the command in the array also. Because I need to pull these 2 numbers for my next codes.
1. Use code tags (</>) to put codes inline with the post page; your codes would appear like this:
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
char a = (int)Serial.read();
Serial.print(a[0][1]);
}
}
2. Be literate in programming style so that opening brace ({) and closing brace (}) are vertically aligned as I have done in Step-1 for you.
3. Fix your sketch of Step-1 with respect to the following issues: (1) The variable a is an 8-bit (char) location; why are you trying to store 16-bit value (int) returned by Serial.read();? It is enough to keep the lower 8-bit value which is the character coming form the Serial Monitor.
(2) The variable a is not an array structure; but, a[0][1] is an array element; fix this incompatibility/mismatch.
4. State clearly what you want to achieve. Do want to enter this: {66,90} from the InputBox (Fig-1) of Serial Monitor and then catch it by the UNO and then do what?
It will send it to Uno via Bluetooth from my pc and it will understand make blue light 66 and red light 90. I coded all the thinks in the 2D array includes visual studio. Me to change all variables in my program will take several times. All I need is Uno to read the 2d array numbers inside. For example in it is;
you may be interested in the following which I use for debugging programs. it demonstrates reading numeric values and the use of single character alpha commands.
// pcRead - debugging using serial monitor
const char version [] = "PcRead 200416a";
int debug = 0;
// ---------------------------------------------------------
// toggle output bit
void
pinToggle (
int pin)
{
static int bits = 0;
int bit = 1 << pin;
if (debug) {
Serial.print ("pinToggle: ");
Serial.println (pin);
}
if (bits & bit) {
digitalWrite (pin, LOW);
bits &= ~bit;
}
else {
digitalWrite (pin, HIGH);
bits |= bit;
}
}
// ---------------------------------------------------------
// toggle output bit
int
readString (
char *s,
int maxChar )
{
int n = 0;
Serial.print ("> ");
do {
if (Serial.available()) {
int c = Serial.read ();
if ('\n' == c)
break;
s [n++] = c;
if (maxChar == n)
break;
}
} while (true);
return n;
}
// -----------------------------------------------------------------------------
// process single character commands from the PC
#define MAX_CHAR 10
char s [MAX_CHAR] = {};
int analogPin = 0;
void
pcRead (void)
{
static int val = 13;
if (Serial.available()) {
int c = Serial.read ();
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
val = c - '0' + (10 * val);
break;
case 'A':
analogPin = val;
Serial.print ("analogPin = ");
Serial.println (val);
val = 0;
break;
case 'D':
debug ^= 1;
break;
case 'I':
pinMode (val, INPUT);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" INPUT");
val = 0;
break;
case 'O':
pinMode (val, OUTPUT);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" OUTPUT");
val = 0;
break;
case 'P':
pinMode (val, INPUT_PULLUP);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" INPUT_PULLUP");
val = 0;
break;
case 'a':
Serial.print ("analogRead: ");
Serial.println (analogRead (val));
val = 0;
break;
case 'c':
digitalWrite (val, LOW);
Serial.print ("digitalWrite: LOW ");
Serial.println (val);
val = 0;
break;
case 'p':
#if !defined(ARDUINO_ARCH_ESP32)
analogWrite (analogPin, val);
Serial.print ("analogWrite: pin ");
Serial.print (analogPin);
Serial.print (", ");
Serial.println (val);
val = 0;
#endif
break;
case 'r':
Serial.print ("digitalRead: pin ");
Serial.print (val);
Serial.print (", ");
Serial.println (digitalRead (val));
val = 0;
break;
case 's':
digitalWrite (val, HIGH);
Serial.print ("digitalWrite: HIGH ");
Serial.println (val);
val = 0;
break;
case 't':
Serial.print ("pinToggle ");
Serial.println (val);
pinToggle (val);
val = 0;
break;
case 'v':
Serial.print ("\nversion: ");
Serial.println (version);
break;
case '\n': // ignore
break;
case '"':
while ('\n' != Serial.read ()) // discard linefeed
;
readString (s, MAX_CHAR-1);
Serial.println (s);
break;
case '?':
Serial.println ("\npcRead:\n");
Serial.println (" [0-9] append to #");
Serial.println (" A # - set analog pin #");
Serial.println (" D # - set debug to #");
Serial.println (" I # - set pin # to INPUT");
Serial.println (" O # - set pin # to OUTPUT");
Serial.println (" P # - set pin # to INPUT_PULLUP");
Serial.println (" a # - analogRead (pin #)");
Serial.println (" c # - digitalWrite (pin #, LOW)");
Serial.println (" p # -- analogWrite (analogPin, #)");
Serial.println (" r # - digitalRead (pin #)");
Serial.println (" s - digitalWrite (pin #, HIGH)");
Serial.println (" t -- toggle pin # output");
Serial.println (" v - print version");
Serial.println (" \" - read string");
Serial.println (" ? - list of commands");
break;
default:
Serial.print ("unknown char ");
Serial.println (c,HEX);
break;
}
}
}
// -----------------------------------------------------------------------------
void
loop (void)
{
pcRead ();
}
// -----------------------------------------------------------------------------
void
setup (void)
{
Serial.begin(115200);
Serial.println (version);
#if defined(ARDUINO_ARCH_ESP32)
Serial.println ("esp32");
#endif
}
void loop()
{
int a[1][2];
if (Serial.available())
{
a[0][0] = Serial.parseInt();
a[0][1] = Serial.parseInt();
while (Serial.available()) Serial.read(); // Clear out any characters at the end of the line
Serial.println(a[0][1]); // Show second number of the pair
}
}
This displays the value 90 in Serial Monitor when I type in {66,90}.
if (Serial.available())
{
a[0][0] = Serial.parseInt();
a[0][1] = Serial.parseInt();
while (Serial.available()) Serial.read(); // Clear out any characters at the end of the line
Serial.println(a[0][1]); // Show second number of the pair
}
}
This displays the value 90 in Serial Monitor when I type in {66,90}.
Thank you, it solved my problem. I didn't know parseInt command.